diff --git a/devtools-crash-analyzer/app/dev.bundle.js b/devtools-crash-analyzer/app/dev.bundle.js new file mode 100644 index 0000000..0978946 --- /dev/null +++ b/devtools-crash-analyzer/app/dev.bundle.js @@ -0,0 +1,244 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/app.ts": +/*!********************!*\ + !*** ./src/app.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ App: () => (/* binding */ App) +/* harmony export */ }); +/* harmony import */ var _todo_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./todo.js */ "./src/todo.ts"); +/* harmony import */ var _todo_status_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./todo-status.js */ "./src/todo-status.ts"); + + +var App = /** @class */ (function () { + function App(element) { + this.element = element; + this.todos = []; + // Create a few tasks, for demo. + this.todos.push(new _todo_js__WEBPACK_IMPORTED_MODULE_0__.Todo(1, 'Example task 1', _todo_status_js__WEBPACK_IMPORTED_MODULE_1__.TodoStatus.ACTIVE)); + this.todos.push(new _todo_js__WEBPACK_IMPORTED_MODULE_0__.Todo(2, 'Another example task', _todo_status_js__WEBPACK_IMPORTED_MODULE_1__.TodoStatus.COMPLETED)); + this.todos.push(new _todo_js__WEBPACK_IMPORTED_MODULE_0__.Todo(3, 'Something else to do', _todo_status_js__WEBPACK_IMPORTED_MODULE_1__.TodoStatus.ACTIVE)); + this.todos.push(new _todo_js__WEBPACK_IMPORTED_MODULE_0__.Todo(4, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', _todo_status_js__WEBPACK_IMPORTED_MODULE_1__.TodoStatus.COMPLETED)); + this.render(); + } + App.prototype.render = function () { + var _this = this; + this.element.innerHTML = "\n \n \n "); + var input = this.element.querySelector('input'); + input.addEventListener('keypress', function (e) { + if (e.key === 'Enter') { + _this.todos.push(new _todo_js__WEBPACK_IMPORTED_MODULE_0__.Todo(_this.todos.length + 1, input.value, _todo_status_js__WEBPACK_IMPORTED_MODULE_1__.TodoStatus.ACTIVE)); + input.value = ''; + _this.render(); + } + }); + var checkboxes = this.element.querySelectorAll('input[type="checkbox"]'); + checkboxes.forEach(function (checkbox, index) { + checkbox.addEventListener('change', function () { + if (checkbox.checked) { + _this.todos[index].markCompleted(); + } + else { + _this.todos[index].markActive(); + } + _this.render(); + }); + }); + var buttons = this.element.querySelectorAll('button'); + buttons.forEach(function (button, index) { + button.addEventListener('click', function () { + _this.todos.splice(index, 1); + _this.render(); + }); + }); + }; + return App; +}()); + + + +/***/ }), + +/***/ "./src/todo-status.ts": +/*!****************************!*\ + !*** ./src/todo-status.ts ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TodoStatus: () => (/* binding */ TodoStatus) +/* harmony export */ }); +var TodoStatus; +(function (TodoStatus) { + TodoStatus[TodoStatus["ACTIVE"] = 0] = "ACTIVE"; + TodoStatus[TodoStatus["COMPLETED"] = 1] = "COMPLETED"; +})(TodoStatus || (TodoStatus = {})); + + +/***/ }), + +/***/ "./src/todo.ts": +/*!*********************!*\ + !*** ./src/todo.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Todo: () => (/* binding */ Todo) +/* harmony export */ }); +/* harmony import */ var _todo_status_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./todo-status.js */ "./src/todo-status.ts"); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ "./src/util.ts"); + + +var Todo = /** @class */ (function () { + function Todo(id, text, status) { + this.id = id; + this.text = text; + this.status = status; + } + Todo.prototype.isCompleted = function () { + return this.status === _todo_status_js__WEBPACK_IMPORTED_MODULE_0__.TodoStatus.COMPLETED; + }; + Todo.prototype.markCompleted = function () { + this.status = _todo_status_js__WEBPACK_IMPORTED_MODULE_0__.TodoStatus.COMPLETED; + }; + Todo.prototype.markActive = function () { + this.status = _todo_status_js__WEBPACK_IMPORTED_MODULE_0__.TodoStatus.ACTIVE; + }; + Todo.prototype.render = function () { + return todoMarkupBuilder(this); + }; + Todo.prototype.onStateChange = function (callback) { }; + Todo.prototype.onRemove = function (callback) { }; + return Todo; +}()); + +function todoMarkupBuilder(todo) { + return "
  • \n \n ").concat((0,_util_js__WEBPACK_IMPORTED_MODULE_1__.processUIString)(todo.text), "\n \n
  • "); +} + + +/***/ }), + +/***/ "./src/util.ts": +/*!*********************!*\ + !*** ./src/util.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ processUIString: () => (/* binding */ processUIString) +/* harmony export */ }); +function processUIString(str) { + return shorten(capitalize(str), 30); +} +function shorten(str, maxLength) { + if (str.length <= maxLength) { + return str; + } + throw new Error("test error"); + return str.slice(0, maxLength) + '...'; +} +function capitalize(str) { + return str[0].toUpperCase() + str.slice(1); +} + + +/***/ }), + +/***/ "./node_modules/@microsoft/edge-devtools-crash-analyzer-support/dist/index.mjs": +/*!*************************************************************************************!*\ + !*** ./node_modules/@microsoft/edge-devtools-crash-analyzer-support/dist/index.mjs ***! + \*************************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ __esModule: () => (/* binding */ r), +/* harmony export */ installErrorStackModuleAnnotations: () => (/* binding */ t) +/* harmony export */ }); +var e={};(()=>{var r=e;function t(e){const r=new Map;for(const t of e){const e=t.getFileName(),a=t.getScriptHash();e&&a&&r.set(e,a)}if(r.size){const e=["","Source modules:"];for(const[t,a]of r.entries())e.push(` ${t} ${a}`);return e.join("\n")}}let a;function n(e,r){let n;return n=a?a.apply(Error,[e,r]):e.stack,t(r)?n+"\n"+t(r):n}Object.defineProperty(r,"X",{value:!0}),r.s=void 0,r.s=function(e){var r;"firstPrepareStackTrace"!==(null===(r=e.prepareStackTrace)||void 0===r?void 0:r.name)&&(a=e.prepareStackTrace,e.prepareStackTrace=function r(t,c){if(c.length>0){if("getScriptHash"in c[0].constructor.prototype)return e.prepareStackTrace===r&&(e.prepareStackTrace=n),n.apply(e,[t,c]);e.prepareStackTrace=a}return"function"==typeof a?a.apply(e,[t,c]):t.stack})}})();var r=e.X,t=e.s; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +/*!**********************!*\ + !*** ./src/index.ts ***! + \**********************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _microsoft_edge_devtools_crash_analyzer_support__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @microsoft/edge-devtools-crash-analyzer-support */ "./node_modules/@microsoft/edge-devtools-crash-analyzer-support/dist/index.mjs"); +/* harmony import */ var _app_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app.js */ "./src/app.ts"); + + +if (false) {} +var appElement = document.querySelector('#app'); +var app = new _app_js__WEBPACK_IMPORTED_MODULE_1__.App(appElement); + +/******/ })() +; +//# sourceMappingURL=dev.bundle.js.map \ No newline at end of file diff --git a/devtools-crash-analyzer/app/dev.bundle.js.map b/devtools-crash-analyzer/app/dev.bundle.js.map new file mode 100644 index 0000000..47be7dd --- /dev/null +++ b/devtools-crash-analyzer/app/dev.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dev.bundle.js","mappings":"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","sources":["webpack://devtools-crash-analyzer/./src/app.ts","webpack://devtools-crash-analyzer/./src/todo-status.ts","webpack://devtools-crash-analyzer/./src/todo.ts","webpack://devtools-crash-analyzer/./src/util.ts","webpack://devtools-crash-analyzer/./node_modules/@microsoft/edge-devtools-crash-analyzer-support/dist/index.mjs","webpack://devtools-crash-analyzer/webpack/bootstrap","webpack://devtools-crash-analyzer/webpack/runtime/define property getters","webpack://devtools-crash-analyzer/webpack/runtime/hasOwnProperty shorthand","webpack://devtools-crash-analyzer/webpack/runtime/make namespace object","webpack://devtools-crash-analyzer/./src/index.ts"],"sourcesContent":["import { Todo } from './todo.js';\r\nimport { TodoStatus } from './todo-status.js';\r\n\r\nexport class App {\r\n private todos: Todo[] = [];\r\n\r\n constructor(private element: HTMLElement) {\r\n // Create a few tasks, for demo.\r\n this.todos.push(new Todo(\r\n 1,\r\n 'Example task 1',\r\n TodoStatus.ACTIVE,\r\n ));\r\n this.todos.push(new Todo(\r\n 2,\r\n 'Another example task',\r\n TodoStatus.COMPLETED,\r\n ));\r\n this.todos.push(new Todo(\r\n 3,\r\n 'Something else to do',\r\n TodoStatus.ACTIVE,\r\n ));\r\n this.todos.push(new Todo(\r\n 4,\r\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',\r\n TodoStatus.COMPLETED,\r\n ));\r\n this.render();\r\n }\r\n\r\n private render() {\r\n this.element.innerHTML = `\r\n \r\n \r\n `;\r\n\r\n const input = this.element.querySelector('input') as HTMLInputElement;\r\n input.addEventListener('keypress', (e) => {\r\n if (e.key === 'Enter') {\r\n this.todos.push(new Todo(\r\n this.todos.length + 1,\r\n input.value,\r\n TodoStatus.ACTIVE,\r\n ));\r\n input.value = '';\r\n this.render();\r\n }\r\n });\r\n\r\n const checkboxes = this.element.querySelectorAll('input[type=\"checkbox\"]');\r\n checkboxes.forEach((checkbox: Element, index) => {\r\n checkbox.addEventListener('change', () => {\r\n if ((checkbox as HTMLInputElement).checked) {\r\n this.todos[index].markCompleted();\r\n } else {\r\n this.todos[index].markActive();\r\n }\r\n this.render();\r\n });\r\n });\r\n\r\n const buttons = this.element.querySelectorAll('button');\r\n buttons.forEach((button, index) => {\r\n button.addEventListener('click', () => {\r\n this.todos.splice(index, 1);\r\n this.render();\r\n });\r\n });\r\n }\r\n}\r\n","export enum TodoStatus {\r\n ACTIVE,\r\n COMPLETED,\r\n}\r\n","import { TodoStatus } from './todo-status.js';\r\nimport { processUIString } from './util.js';\r\n\r\nexport class Todo {\r\n constructor(\r\n public id: number,\r\n public text: string,\r\n public status: TodoStatus,\r\n ) {}\r\n\r\n isCompleted() {\r\n return this.status === TodoStatus.COMPLETED;\r\n }\r\n\r\n markCompleted() {\r\n this.status = TodoStatus.COMPLETED;\r\n }\r\n\r\n markActive() {\r\n this.status = TodoStatus.ACTIVE;\r\n }\r\n\r\n render() {\r\n return todoMarkupBuilder(this);\r\n }\r\n\r\n onStateChange(callback: () => void) {}\r\n\r\n onRemove(callback: () => void) {}\r\n}\r\n\r\nfunction todoMarkupBuilder(todo: Todo) {\r\n return `
  • \r\n \r\n ${processUIString(todo.text)}\r\n \r\n
  • `;\r\n}\r\n","export function processUIString(str: string): string {\r\n return shorten(capitalize(str), 30);\r\n}\r\n\r\nfunction shorten(str: string, maxLength: number): string {\r\n if (str.length <= maxLength) {\r\n return str;\r\n }\r\n throw new Error(\"test error\");\r\n return str.slice(0, maxLength) + '...';\r\n}\r\n\r\nfunction capitalize(str: string): string {\r\n return str[0].toUpperCase() + str.slice(1);\r\n}\r\n","var e={};(()=>{var r=e;function t(e){const r=new Map;for(const t of e){const e=t.getFileName(),a=t.getScriptHash();e&&a&&r.set(e,a)}if(r.size){const e=[\"\",\"Source modules:\"];for(const[t,a]of r.entries())e.push(` ${t} ${a}`);return e.join(\"\\n\")}}let a;function n(e,r){let n;return n=a?a.apply(Error,[e,r]):e.stack,t(r)?n+\"\\n\"+t(r):n}Object.defineProperty(r,\"X\",{value:!0}),r.s=void 0,r.s=function(e){var r;\"firstPrepareStackTrace\"!==(null===(r=e.prepareStackTrace)||void 0===r?void 0:r.name)&&(a=e.prepareStackTrace,e.prepareStackTrace=function r(t,c){if(c.length>0){if(\"getScriptHash\"in c[0].constructor.prototype)return e.prepareStackTrace===r&&(e.prepareStackTrace=n),n.apply(e,[t,c]);e.prepareStackTrace=a}return\"function\"==typeof a?a.apply(e,[t,c]):t.stack})}})();var r=e.X,t=e.s;export{r as __esModule,t as installErrorStackModuleAnnotations};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { installErrorStackModuleAnnotations } from '@microsoft/edge-devtools-crash-analyzer-support';\r\nimport { App } from './app.js';\r\n\r\nif (process.env.NODE_ENV === \"production\") {\r\n installErrorStackModuleAnnotations(Error);\r\n}\r\n\r\nconst appElement = document.querySelector('#app') as HTMLElement;\r\nconst app = new App(appElement);\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/devtools-crash-analyzer/app/dev.html b/devtools-crash-analyzer/app/dev.html new file mode 100644 index 0000000..74041d5 --- /dev/null +++ b/devtools-crash-analyzer/app/dev.html @@ -0,0 +1,16 @@ + + + + TODO App - Development build + + + + +

    DevTools Crash Analyzer demo

    +

    Open the Console tool in DevTools to view the crash stack trace.

    +

    In the development version of the application (dev) the stack trace shows original file and function names thanks to source maps. In the production version of the application (prod), the stack trace shows bundled file and minified function names.

    +

    Copy the production stack trace, and use the Crash analyzer tool to unminify it.

    +
    +
    + + \ No newline at end of file diff --git a/devtools-crash-analyzer/app/prod.bundle.js b/devtools-crash-analyzer/app/prod.bundle.js new file mode 100644 index 0000000..aef1075 --- /dev/null +++ b/devtools-crash-analyzer/app/prod.bundle.js @@ -0,0 +1,2 @@ +(()=>{"use strict";var t={};(()=>{var e=t;function n(t){const e=new Map;for(const n of t){const t=n.getFileName(),o=n.getScriptHash();t&&o&&e.set(t,o)}if(e.size){const t=["","Source modules:"];for(const[n,o]of e.entries())t.push(` ${n} ${o}`);return t.join("\n")}}let o;function r(t,e){let r;return r=o?o.apply(Error,[t,e]):t.stack,n(e)?r+"\n"+n(e):r}Object.defineProperty(e,"X",{value:!0}),e.s=void 0,e.s=function(t){var e;"firstPrepareStackTrace"!==(null===(e=t.prepareStackTrace)||void 0===e?void 0:e.name)&&(o=t.prepareStackTrace,t.prepareStackTrace=function e(n,i){if(i.length>0){if("getScriptHash"in i[0].constructor.prototype)return t.prepareStackTrace===e&&(t.prepareStackTrace=r),r.apply(t,[n,i]);t.prepareStackTrace=o}return"function"==typeof o?o.apply(t,[n,i]):n.stack})}})();var e,n=t.s;!function(t){t[t.ACTIVE=0]="ACTIVE",t[t.COMPLETED=1]="COMPLETED"}(e||(e={}));var o=function(){function t(t,e,n){this.id=t,this.text=e,this.status=n}return t.prototype.isCompleted=function(){return this.status===e.COMPLETED},t.prototype.markCompleted=function(){this.status=e.COMPLETED},t.prototype.markActive=function(){this.status=e.ACTIVE},t.prototype.render=function(){return'
  • \n \n ').concat(function(t,e){if(t.length<=30)return t;throw new Error("test error")}(function(t){return t[0].toUpperCase()+t.slice(1)}(t.text)),"\n \n
  • ");var t},t.prototype.onStateChange=function(t){},t.prototype.onRemove=function(t){},t}(),r=function(){function t(t){this.element=t,this.todos=[],this.todos.push(new o(1,"Example task 1",e.ACTIVE)),this.todos.push(new o(2,"Another example task",e.COMPLETED)),this.todos.push(new o(3,"Something else to do",e.ACTIVE)),this.todos.push(new o(4,"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",e.COMPLETED)),this.render()}return t.prototype.render=function(){var t=this;this.element.innerHTML='\n \n \n ");var n=this.element.querySelector("input");n.addEventListener("keypress",(function(r){"Enter"===r.key&&(t.todos.push(new o(t.todos.length+1,n.value,e.ACTIVE)),n.value="",t.render())})),this.element.querySelectorAll('input[type="checkbox"]').forEach((function(e,n){e.addEventListener("change",(function(){e.checked?t.todos[n].markCompleted():t.todos[n].markActive(),t.render()}))})),this.element.querySelectorAll("button").forEach((function(e,n){e.addEventListener("click",(function(){t.todos.splice(n,1),t.render()}))}))},t}();n(Error),new r(document.querySelector("#app"))})(); +//# sourceMappingURL=prod.bundle.js.map \ No newline at end of file diff --git a/devtools-crash-analyzer/app/prod.bundle.js.map b/devtools-crash-analyzer/app/prod.bundle.js.map new file mode 100644 index 0000000..1b03b63 --- /dev/null +++ b/devtools-crash-analyzer/app/prod.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prod.bundle.js","mappings":"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","sources":["webpack://devtools-crash-analyzer/./node_modules/@microsoft/edge-devtools-crash-analyzer-support/dist/index.mjs","webpack://devtools-crash-analyzer/./src/todo-status.ts","webpack://devtools-crash-analyzer/./src/todo.ts","webpack://devtools-crash-analyzer/./src/util.ts","webpack://devtools-crash-analyzer/./src/app.ts","webpack://devtools-crash-analyzer/./src/index.ts"],"sourcesContent":["var e={};(()=>{var r=e;function t(e){const r=new Map;for(const t of e){const e=t.getFileName(),a=t.getScriptHash();e&&a&&r.set(e,a)}if(r.size){const e=[\"\",\"Source modules:\"];for(const[t,a]of r.entries())e.push(` ${t} ${a}`);return e.join(\"\\n\")}}let a;function n(e,r){let n;return n=a?a.apply(Error,[e,r]):e.stack,t(r)?n+\"\\n\"+t(r):n}Object.defineProperty(r,\"X\",{value:!0}),r.s=void 0,r.s=function(e){var r;\"firstPrepareStackTrace\"!==(null===(r=e.prepareStackTrace)||void 0===r?void 0:r.name)&&(a=e.prepareStackTrace,e.prepareStackTrace=function r(t,c){if(c.length>0){if(\"getScriptHash\"in c[0].constructor.prototype)return e.prepareStackTrace===r&&(e.prepareStackTrace=n),n.apply(e,[t,c]);e.prepareStackTrace=a}return\"function\"==typeof a?a.apply(e,[t,c]):t.stack})}})();var r=e.X,t=e.s;export{r as __esModule,t as installErrorStackModuleAnnotations};","export enum TodoStatus {\r\n ACTIVE,\r\n COMPLETED,\r\n}\r\n","import { TodoStatus } from './todo-status.js';\r\nimport { processUIString } from './util.js';\r\n\r\nexport class Todo {\r\n constructor(\r\n public id: number,\r\n public text: string,\r\n public status: TodoStatus,\r\n ) {}\r\n\r\n isCompleted() {\r\n return this.status === TodoStatus.COMPLETED;\r\n }\r\n\r\n markCompleted() {\r\n this.status = TodoStatus.COMPLETED;\r\n }\r\n\r\n markActive() {\r\n this.status = TodoStatus.ACTIVE;\r\n }\r\n\r\n render() {\r\n return todoMarkupBuilder(this);\r\n }\r\n\r\n onStateChange(callback: () => void) {}\r\n\r\n onRemove(callback: () => void) {}\r\n}\r\n\r\nfunction todoMarkupBuilder(todo: Todo) {\r\n return `
  • \r\n \r\n ${processUIString(todo.text)}\r\n \r\n
  • `;\r\n}\r\n","export function processUIString(str: string): string {\r\n return shorten(capitalize(str), 30);\r\n}\r\n\r\nfunction shorten(str: string, maxLength: number): string {\r\n if (str.length <= maxLength) {\r\n return str;\r\n }\r\n throw new Error(\"test error\");\r\n return str.slice(0, maxLength) + '...';\r\n}\r\n\r\nfunction capitalize(str: string): string {\r\n return str[0].toUpperCase() + str.slice(1);\r\n}\r\n","import { Todo } from './todo.js';\r\nimport { TodoStatus } from './todo-status.js';\r\n\r\nexport class App {\r\n private todos: Todo[] = [];\r\n\r\n constructor(private element: HTMLElement) {\r\n // Create a few tasks, for demo.\r\n this.todos.push(new Todo(\r\n 1,\r\n 'Example task 1',\r\n TodoStatus.ACTIVE,\r\n ));\r\n this.todos.push(new Todo(\r\n 2,\r\n 'Another example task',\r\n TodoStatus.COMPLETED,\r\n ));\r\n this.todos.push(new Todo(\r\n 3,\r\n 'Something else to do',\r\n TodoStatus.ACTIVE,\r\n ));\r\n this.todos.push(new Todo(\r\n 4,\r\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',\r\n TodoStatus.COMPLETED,\r\n ));\r\n this.render();\r\n }\r\n\r\n private render() {\r\n this.element.innerHTML = `\r\n \r\n \r\n `;\r\n\r\n const input = this.element.querySelector('input') as HTMLInputElement;\r\n input.addEventListener('keypress', (e) => {\r\n if (e.key === 'Enter') {\r\n this.todos.push(new Todo(\r\n this.todos.length + 1,\r\n input.value,\r\n TodoStatus.ACTIVE,\r\n ));\r\n input.value = '';\r\n this.render();\r\n }\r\n });\r\n\r\n const checkboxes = this.element.querySelectorAll('input[type=\"checkbox\"]');\r\n checkboxes.forEach((checkbox: Element, index) => {\r\n checkbox.addEventListener('change', () => {\r\n if ((checkbox as HTMLInputElement).checked) {\r\n this.todos[index].markCompleted();\r\n } else {\r\n this.todos[index].markActive();\r\n }\r\n this.render();\r\n });\r\n });\r\n\r\n const buttons = this.element.querySelectorAll('button');\r\n buttons.forEach((button, index) => {\r\n button.addEventListener('click', () => {\r\n this.todos.splice(index, 1);\r\n this.render();\r\n });\r\n });\r\n }\r\n}\r\n","import { installErrorStackModuleAnnotations } from '@microsoft/edge-devtools-crash-analyzer-support';\r\nimport { App } from './app.js';\r\n\r\nif (process.env.NODE_ENV === \"production\") {\r\n installErrorStackModuleAnnotations(Error);\r\n}\r\n\r\nconst appElement = document.querySelector('#app') as HTMLElement;\r\nconst app = new App(appElement);\r\n"],"names":["e","r","t","Map","getFileName","a","getScriptHash","set","size","entries","push","join","n","apply","Error","stack","Object","defineProperty","value","s","prepareStackTrace","name","c","length","constructor","prototype","TodoStatus","id","text","status","isCompleted","this","COMPLETED","markCompleted","markActive","ACTIVE","render","todo","str","maxLength","shorten","toUpperCase","slice","capitalize","onStateChange","callback","onRemove","element","todos","Todo","innerHTML","map","input","querySelector","addEventListener","key","querySelectorAll","forEach","checkbox","index","checked","button","splice","App","document"],"sourceRoot":""} \ No newline at end of file diff --git a/devtools-crash-analyzer/app/prod.html b/devtools-crash-analyzer/app/prod.html new file mode 100644 index 0000000..fd44186 --- /dev/null +++ b/devtools-crash-analyzer/app/prod.html @@ -0,0 +1 @@ +TODO App - Production build

    DevTools Crash Analyzer demo

    Open the Console tool in DevTools to view the crash stack trace.

    In the development version of the application (dev) the stack trace shows original file and function names thanks to source maps. In the production version of the application (prod), the stack trace shows bundled file and minified function names.

    Copy the production stack trace, and use the Crash analyzer tool to unminify it.

    \ No newline at end of file diff --git a/devtools-crash-analyzer/app/styles.css b/devtools-crash-analyzer/app/styles.css new file mode 100644 index 0000000..4aa8dc3 --- /dev/null +++ b/devtools-crash-analyzer/app/styles.css @@ -0,0 +1,56 @@ +html, body { + margin: 0; + padding: 0; + font-family: 'Roboto', sans-serif; + font-size: 1.2rem; + color: #333; +} + +* { + box-sizing: border-box; +} + +input { + font-family: inherit; + font-size: inherit; + padding: 0.5rem; +} + +body { + padding: 2rem; +} + +h1, p { + margin: 0 0 1rem 0; +} + +#app { + padding: 2rem; +} + +#app input[type="text"] { + width: 100%; +} + +#app ul, #app li { + list-style-type: none; + padding: 0; + margin: 0; +} + +#app ul { + margin-block-start: 2rem; + display: flex; + flex-direction: column; + gap: 1rem; +} + +#app li { + display: flex; + align-items: center; + gap: 1rem; +} + +#app li .text { + margin-inline-end: auto; +} \ No newline at end of file diff --git a/devtools-crash-analyzer/package-lock.json b/devtools-crash-analyzer/package-lock.json new file mode 100644 index 0000000..8c492ac --- /dev/null +++ b/devtools-crash-analyzer/package-lock.json @@ -0,0 +1,1916 @@ +{ + "name": "devtools-crash-analyzer", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "devtools-crash-analyzer", + "version": "1.0.0", + "devDependencies": { + "@microsoft/edge-devtools-crash-analyzer-support": "^1.0.0", + "html-webpack-plugin": "^5.6.0", + "ts-loader": "^9.5.1", + "typescript": "^5.5.2", + "webpack": "^5.92.1", + "webpack-cli": "^5.1.4", + "webpack-merge": "^5.10.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@microsoft/edge-devtools-crash-analyzer-support": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@microsoft/edge-devtools-crash-analyzer-support/-/edge-devtools-crash-analyzer-support-1.0.0.tgz", + "integrity": "sha512-Gd+nTYnHS+GItVBtBx3QxNyAVLoaV0Ubx6KhXkOcKnYlRtRdgsIC8D/nq1sDDBiZVbNyjosrsfzcVBmPyap0RA==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001639", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz", + "integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.815", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.815.tgz", + "integrity": "sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + } + } +} diff --git a/devtools-crash-analyzer/package.json b/devtools-crash-analyzer/package.json new file mode 100644 index 0000000..a48f885 --- /dev/null +++ b/devtools-crash-analyzer/package.json @@ -0,0 +1,18 @@ +{ + "name": "devtools-crash-analyzer", + "version": "1.0.0", + "description": "A demo showing how to use the Crash Analyzer tool in Edge DevTools", + "devDependencies": { + "html-webpack-plugin": "^5.6.0", + "ts-loader": "^9.5.1", + "typescript": "^5.5.2", + "webpack": "^5.92.1", + "webpack-cli": "^5.1.4", + "webpack-merge": "^5.10.0", + "@microsoft/edge-devtools-crash-analyzer-support": "^1.0.0" + }, + "scripts": { + "build-dev": "webpack --config webpack.dev.js", + "build-prod": "webpack --config webpack.prod.js" + } +} diff --git a/devtools-crash-analyzer/src/app.ts b/devtools-crash-analyzer/src/app.ts new file mode 100644 index 0000000..4108ed1 --- /dev/null +++ b/devtools-crash-analyzer/src/app.ts @@ -0,0 +1,73 @@ +import { Todo } from './todo.js'; +import { TodoStatus } from './todo-status.js'; + +export class App { + private todos: Todo[] = []; + + constructor(private element: HTMLElement) { + // Create a few tasks, for demo. + this.todos.push(new Todo( + 1, + 'Example task 1', + TodoStatus.ACTIVE, + )); + this.todos.push(new Todo( + 2, + 'Another example task', + TodoStatus.COMPLETED, + )); + this.todos.push(new Todo( + 3, + 'Something else to do', + TodoStatus.ACTIVE, + )); + this.todos.push(new Todo( + 4, + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', + TodoStatus.COMPLETED, + )); + this.render(); + } + + private render() { + this.element.innerHTML = ` + + + `; + + const input = this.element.querySelector('input') as HTMLInputElement; + input.addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + this.todos.push(new Todo( + this.todos.length + 1, + input.value, + TodoStatus.ACTIVE, + )); + input.value = ''; + this.render(); + } + }); + + const checkboxes = this.element.querySelectorAll('input[type="checkbox"]'); + checkboxes.forEach((checkbox: Element, index) => { + checkbox.addEventListener('change', () => { + if ((checkbox as HTMLInputElement).checked) { + this.todos[index].markCompleted(); + } else { + this.todos[index].markActive(); + } + this.render(); + }); + }); + + const buttons = this.element.querySelectorAll('button'); + buttons.forEach((button, index) => { + button.addEventListener('click', () => { + this.todos.splice(index, 1); + this.render(); + }); + }); + } +} diff --git a/devtools-crash-analyzer/src/edge-devtools-crash-analyzer-support.d.ts b/devtools-crash-analyzer/src/edge-devtools-crash-analyzer-support.d.ts new file mode 100644 index 0000000..b3dea86 --- /dev/null +++ b/devtools-crash-analyzer/src/edge-devtools-crash-analyzer-support.d.ts @@ -0,0 +1 @@ +declare module '@microsoft/edge-devtools-crash-analyzer-support'; diff --git a/devtools-crash-analyzer/src/index.html b/devtools-crash-analyzer/src/index.html new file mode 100644 index 0000000..b2d74bb --- /dev/null +++ b/devtools-crash-analyzer/src/index.html @@ -0,0 +1,16 @@ + + + + <%= htmlWebpackPlugin.options.title %> + + + + +

    DevTools Crash Analyzer demo

    +

    Open the Console tool in DevTools to view the crash stack trace.

    +

    In the development version of the application (dev) the stack trace shows original file and function names thanks to source maps. In the production version of the application (prod), the stack trace shows bundled file and minified function names.

    +

    Copy the production stack trace, and use the Crash analyzer tool to unminify it.

    +
    +
    + + \ No newline at end of file diff --git a/devtools-crash-analyzer/src/index.ts b/devtools-crash-analyzer/src/index.ts new file mode 100644 index 0000000..40021df --- /dev/null +++ b/devtools-crash-analyzer/src/index.ts @@ -0,0 +1,9 @@ +import { installErrorStackModuleAnnotations } from '@microsoft/edge-devtools-crash-analyzer-support'; +import { App } from './app.js'; + +if (process.env.NODE_ENV === "production") { + installErrorStackModuleAnnotations(Error); +} + +const appElement = document.querySelector('#app') as HTMLElement; +const app = new App(appElement); diff --git a/devtools-crash-analyzer/src/todo-status.ts b/devtools-crash-analyzer/src/todo-status.ts new file mode 100644 index 0000000..a1fe254 --- /dev/null +++ b/devtools-crash-analyzer/src/todo-status.ts @@ -0,0 +1,4 @@ +export enum TodoStatus { + ACTIVE, + COMPLETED, +} diff --git a/devtools-crash-analyzer/src/todo.ts b/devtools-crash-analyzer/src/todo.ts new file mode 100644 index 0000000..5eac8c0 --- /dev/null +++ b/devtools-crash-analyzer/src/todo.ts @@ -0,0 +1,38 @@ +import { TodoStatus } from './todo-status.js'; +import { processUIString } from './util.js'; + +export class Todo { + constructor( + public id: number, + public text: string, + public status: TodoStatus, + ) {} + + isCompleted() { + return this.status === TodoStatus.COMPLETED; + } + + markCompleted() { + this.status = TodoStatus.COMPLETED; + } + + markActive() { + this.status = TodoStatus.ACTIVE; + } + + render() { + return todoMarkupBuilder(this); + } + + onStateChange(callback: () => void) {} + + onRemove(callback: () => void) {} +} + +function todoMarkupBuilder(todo: Todo) { + return `
  • + + ${processUIString(todo.text)} + +
  • `; +} diff --git a/devtools-crash-analyzer/src/util.ts b/devtools-crash-analyzer/src/util.ts new file mode 100644 index 0000000..56f8dac --- /dev/null +++ b/devtools-crash-analyzer/src/util.ts @@ -0,0 +1,15 @@ +export function processUIString(str: string): string { + return shorten(capitalize(str), 30); +} + +function shorten(str: string, maxLength: number): string { + if (str.length <= maxLength) { + return str; + } + throw new Error("test error"); + return str.slice(0, maxLength) + '...'; +} + +function capitalize(str: string): string { + return str[0].toUpperCase() + str.slice(1); +} diff --git a/devtools-crash-analyzer/tsconfig.json b/devtools-crash-analyzer/tsconfig.json new file mode 100644 index 0000000..780d58d --- /dev/null +++ b/devtools-crash-analyzer/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "outDir": "./app/", + "noImplicitAny": true, + "module": "es6", + "target": "es5", + "sourceMap": true, + "allowJs": true, + "moduleResolution": "node" + } +} \ No newline at end of file diff --git a/devtools-crash-analyzer/webpack.common.js b/devtools-crash-analyzer/webpack.common.js new file mode 100644 index 0000000..29e023f --- /dev/null +++ b/devtools-crash-analyzer/webpack.common.js @@ -0,0 +1,23 @@ +const path = require("path"); + +module.exports = { + entry: "./src/index.ts", + output: { + path: path.resolve(__dirname, "app") + }, + module: { + rules: [ + { + test: /\.tsx?$/, + use: "ts-loader", + exclude: /node_modules/, + } + ], + }, + resolve: { + extensions: [".tsx", ".ts", ".js"], + extensionAlias: { + ".js": [".js", ".ts"], + }, + }, +}; diff --git a/devtools-crash-analyzer/webpack.dev.js b/devtools-crash-analyzer/webpack.dev.js new file mode 100644 index 0000000..a65ab1f --- /dev/null +++ b/devtools-crash-analyzer/webpack.dev.js @@ -0,0 +1,20 @@ +const webpack = require("webpack"); +const { merge } = require("webpack-merge"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const common = require("./webpack.common.js"); + +module.exports = merge(common, { + mode: "development", + devtool: "source-map", + output: { + filename: "dev.bundle.js", + }, + plugins: [ + new HtmlWebpackPlugin({ + title: "TODO App - Development build", + filename: "dev.html", + template: "src/index.html", + }), + new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("development") }), + ], +}); diff --git a/devtools-crash-analyzer/webpack.prod.js b/devtools-crash-analyzer/webpack.prod.js new file mode 100644 index 0000000..370c7c5 --- /dev/null +++ b/devtools-crash-analyzer/webpack.prod.js @@ -0,0 +1,20 @@ +const webpack = require("webpack"); +const { merge } = require("webpack-merge"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const common = require("./webpack.common.js"); + +module.exports = merge(common, { + mode: "production", + devtool: "source-map", + output: { + filename: "prod.bundle.js", + }, + plugins: [ + new HtmlWebpackPlugin({ + title: "TODO App - Production build", + filename: "prod.html", + template: "src/index.html", + }), + new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("production") }), + ], +});