diff --git a/appTs/.editorconfig b/.editorconfig similarity index 100% rename from appTs/.editorconfig rename to .editorconfig diff --git a/appTs/.eslintrc.js b/.eslintrc.js similarity index 100% rename from appTs/.eslintrc.js rename to .eslintrc.js diff --git a/appTs/.gitignore b/.gitignore similarity index 100% rename from appTs/.gitignore rename to .gitignore diff --git a/appTs/.yo-rc.json b/.yo-rc.json similarity index 100% rename from appTs/.yo-rc.json rename to .yo-rc.json diff --git a/BUILD_SIZE_REDUCTION.md b/BUILD_SIZE_REDUCTION.md index b61e379e..0c292a4f 100644 --- a/BUILD_SIZE_REDUCTION.md +++ b/BUILD_SIZE_REDUCTION.md @@ -11,5 +11,5 @@ - creating a selective bundling script only for copying necessary stuff -> 43.7 MB - rebuild code viewer with highlight.js (removing core.ui.codeeditor) -> 178.14 (208.84) -> removeFromBuild.js 71.94 - merge dark and bright css -> 178.13MB -- minify.sh script -> 43.16MB +- deploy script -> 43.16MB - using webcomponents instead of sap.m \ No newline at end of file diff --git a/app2/.compodocrc.json b/app2/.compodocrc.json deleted file mode 100644 index 191ec4f3..00000000 --- a/app2/.compodocrc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "UI5 Testrecorder", - "tsconfig": "./tsconfig.doc.json", - "output": "documentation", - "customLogo": "src/assets/icons/icon.svg", - "includes": "doc_assets", - "silent": true, - "hideGenerator": false, - "disablePrivate": false, - "disableSourceCode":false, - "disableTemplateTab": false, - "disableStyleTab":false -} diff --git a/app2/.eslintignore b/app2/.eslintignore deleted file mode 100644 index 93337d1a..00000000 --- a/app2/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -src\models -*.js -/node_modules -/server/node_modules -package-lock.json -/client/node_modules -/src/app/shared/services/API.service.ts -/src/graphql diff --git a/app2/.eslintrc.js b/app2/.eslintrc.js deleted file mode 100644 index 17606f60..00000000 --- a/app2/.eslintrc.js +++ /dev/null @@ -1,52 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', // Specifies the ESLint parser - plugins: ['unused-imports', 'sonarjs'], - extends: [ - 'eslint:recommended', - 'plugin:sonarjs/recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended' - ], - parserOptions: { - // Allows for the parsing of modern ECMAScript features - ecmaVersion: 2018, - sourceType: 'module', // Allows for the use of imports - prefixWithI: 'always', - }, - rules: { - '@typescript-eslint/camelcase': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-inferrable-types': 'off', - '@typescript-eslint/type-annotation-spacing': 1, - '@typescript-eslint/typedef': [ - 'error', - { - 'arrowParameter': true, - 'arrayDestructuring': true, - 'objectDestructuring': true, - 'parameter': true - } - ], - 'unused-imports/no-unused-imports-ts': 2, - 'unused-imports/no-unused-vars-ts': 1, - 'linebreak-style': [2, 'unix'], - 'quotes': [2, 'single'], - 'no-prototype-builtins': 0, - 'no-case-declarations': 0, - 'indent': ['error', 4, { - 'SwitchCase': 1, - }], - 'semi': 2, - 'arrow-parens': 1, - 'object-curly-newline': 1, - 'max-len': [1, {'code': 140, 'comments': 120, 'ignoreStrings': true}], - 'no-warning-comments': [2, {'terms': ['@TODO', '@FIXME']}], - 'space-infix-ops': 1, - 'space-before-blocks': 1, - 'keyword-spacing': 1, - 'brace-style': 1, - 'spaced-comment': 1 - }, - root: true -}; diff --git a/app2/.gitignore b/app2/.gitignore deleted file mode 100644 index 8402ee1f..00000000 --- a/app2/.gitignore +++ /dev/null @@ -1,54 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp -/out-tsc -# Only exists if Bazel was run -/bazel-out - -# dependencies -/node_modules - -# profiling files -chrome-profiler-events*.json - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# misc -/.angular/cache -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -yarn-error.log -testem.log -/typings - -# System Files -.DS_Store -Thumbs.db - -# Documentation -/documentation - -# test-time: code service -dist-codeservice - -/source_maps diff --git a/app2/.stylelintrc.js b/app2/.stylelintrc.js deleted file mode 100644 index 17aec29c..00000000 --- a/app2/.stylelintrc.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - "extends": "stylelint-config-standard-scss", - "plugins": [ - "stylelint-scss" - ], - "rules": { - "at-rule-no-unknown": null, - "scss/at-rule-no-unknown": true, - "scss/selector-no-redundant-nesting-selector": true, - "indentation": 4, - "selector-class-pattern": [ - "^([_a-z][a-z0-9]*)(-{0,2}[a-z0-9]+)*$", - { - "message": "Expected class selector to use hypen" - } - ], - "selector-pseudo-element-no-unknown": [ - true, - { - "ignorePseudoElements": [ - "ng-deep" - ] - } - ] - } -} \ No newline at end of file diff --git a/app2/README.md b/app2/README.md deleted file mode 100644 index e807a960..00000000 --- a/app2/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Ui5Testrecorder - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.1. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/app2/angular.json b/app2/angular.json deleted file mode 100644 index 302dc68b..00000000 --- a/app2/angular.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "ui5-testrecorder": { - "projectType": "application", - "schematics": { - "@schematics/angular:application": { - "strict": true - }, - "@schematics/angular:component": { - "style": "scss" - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist/", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets", - "src/manifest.json" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/pink-bluegrey.css", - "src/styles.scss" - ], - "scripts": [ - "./node_modules/jszip/dist/jszip.min.js" - ] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "1mb", - "maximumError": "2mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "none", - "optimization": { - "scripts": true, - "styles": { - "minify": true, - "inlineCritical": false - } - } - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "browserTarget": "ui5-testrecorder:build:production" - }, - "development": { - "browserTarget": "ui5-testrecorder:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "ui5-testrecorder:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "assets": [ - "src/favicon.ico", - "src/assets", - "../../manifest.json" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/pink-bluegrey.css", - "src/styles.scss" - ], - "scripts": [] - } - } - } - } - }, - "cli": { - "analytics": false - } -} diff --git a/app2/deployZip.js b/app2/deployZip.js deleted file mode 100644 index 02d63677..00000000 --- a/app2/deployZip.js +++ /dev/null @@ -1,14 +0,0 @@ -const { zip } = require('zip-a-folder'); -const { version } = require('./package.json'); -const { argv } = require('process'); - -let suffix = ''; -if (argv.includes('--pre')) { - suffix = 'nightly_' -} - -const zipping = async () => { - zip('dist', `../journey_recorder_${suffix}${version.replace(/\./gm, '-')}.zip`); -} - -zipping(); diff --git a/app2/doc_assets/infos.md b/app2/doc_assets/infos.md deleted file mode 100644 index 8cbc4e32..00000000 --- a/app2/doc_assets/infos.md +++ /dev/null @@ -1,5 +0,0 @@ -To add assets add -``` -{title: string, file: string} -``` -to the summary.json. diff --git a/app2/doc_assets/page_api.yaml b/app2/doc_assets/page_api.yaml deleted file mode 100644 index 1cfd5274..00000000 --- a/app2/doc_assets/page_api.yaml +++ /dev/null @@ -1,763 +0,0 @@ -swagger: "2.0" -info: - description: "Used to retrieve and check information in a rest like manner for injected code" - version: "0.1.0" - title: "UI5 Testrecorder REST" - termsOfService: "" - contact: - email: "adrian.marten@msg.group" - license: - name: "Apache 2.0" - url: "http://www.apache.org/licenses/LICENSE-2.0.html" -host: "" -basePath: "/page" -tags: -- name: "controls" - description: "Every UI5 control on the page" - externalDocs: - description: "Find out more about UI5-Controls" - url: "https://ui5.sap.com/#/api" -- name: "pet" - description: "Everything about your Pets" - externalDocs: - description: "Find out more" - url: "http://swagger.io" -- name: "store" - description: "Access to Petstore orders" -- name: "user" - description: "Operations about user" - externalDocs: - description: "Find out more about our store" - url: "http://swagger.io" -schemes: -- "https" -- "http" -paths: - /controls: - get: - tags: - - "controls" - summary: "Find controls on page by their attributes" - description: "Multiple controls can be searched filtered by their attributes" - operationId: "getControls" - produces: - - "application/json" - parameters: - - name: "controlClass" - in: "query" - description: "full qualified class name of the control" - required: false - type: "string" - - name: "styleClass" - in: "query" - description: "style classes applied to the control, where all have to be present" - required: false - type: "array" - items: - type: "string" - responses: - "200": - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Control" - "400": - description: "invalid search options provided" - /controls({controlId})/action: - post: - tags: - - "controls" - summary: "Perform an certain action by the control" - description: "You can trigger an action by a control given the concrete control and action information" - operationId: "controlAction" - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - name: "controlId" - in: "path" - description: "ID of the control to execute the action" - required: true - type: "string" - - name: "body" - in: "body" - description: "Action object with the action informations" - required: true - schema: - $ref: "#/definitions/Action" - responses: - "200": - description: "successful operation" - "405": - description: "Invalid action" - /pet: - put: - tags: - - "pet" - summary: "Update an existing pet" - description: "" - operationId: "updatePet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - responses: - "400": - description: "Invalid ID supplied" - "404": - description: "Pet not found" - "405": - description: "Validation exception" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByStatus: - get: - tags: - - "pet" - summary: "Finds Pets by status" - description: "Multiple status values can be provided with comma separated strings" - operationId: "findPetsByStatus" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "status" - in: "query" - description: "Status values that need to be considered for filter" - required: true - type: "array" - items: - type: "string" - enum: - - "available" - - "pending" - - "sold" - default: "available" - collectionFormat: "multi" - responses: - "200": - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - "400": - description: "Invalid status value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByTags: - get: - tags: - - "pet" - summary: "Finds Pets by tags" - description: "Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing." - operationId: "findPetsByTags" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "tags" - in: "query" - description: "Tags to filter by" - required: true - type: "array" - items: - type: "string" - collectionFormat: "multi" - responses: - "200": - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - "400": - description: "Invalid tag value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - deprecated: true - /pet/{petId}: - get: - tags: - - "pet" - summary: "Find pet by ID" - description: "Returns a single pet" - operationId: "getPetById" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to return" - required: true - type: "integer" - format: "int64" - responses: - "200": - description: "successful operation" - schema: - $ref: "#/definitions/Pet" - "400": - description: "Invalid ID supplied" - "404": - description: "Pet not found" - security: - - api_key: [] - post: - tags: - - "pet" - summary: "Updates a pet in the store with form data" - description: "" - operationId: "updatePetWithForm" - consumes: - - "application/x-www-form-urlencoded" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet that needs to be updated" - required: true - type: "integer" - format: "int64" - - name: "name" - in: "formData" - description: "Updated name of the pet" - required: false - type: "string" - - name: "status" - in: "formData" - description: "Updated status of the pet" - required: false - type: "string" - responses: - "405": - description: "Invalid input" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - delete: - tags: - - "pet" - summary: "Deletes a pet" - description: "" - operationId: "deletePet" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "api_key" - in: "header" - required: false - type: "string" - - name: "petId" - in: "path" - description: "Pet id to delete" - required: true - type: "integer" - format: "int64" - responses: - "400": - description: "Invalid ID supplied" - "404": - description: "Pet not found" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/{petId}/uploadImage: - post: - tags: - - "pet" - summary: "uploads an image" - description: "" - operationId: "uploadFile" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to update" - required: true - type: "integer" - format: "int64" - - name: "additionalMetadata" - in: "formData" - description: "Additional data to pass to server" - required: false - type: "string" - - name: "file" - in: "formData" - description: "file to upload" - required: false - type: "file" - responses: - "200": - description: "successful operation" - schema: - $ref: "#/definitions/ApiResponse" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /store/inventory: - get: - tags: - - "store" - summary: "Returns pet inventories by status" - description: "Returns a map of status codes to quantities" - operationId: "getInventory" - produces: - - "application/json" - parameters: [] - responses: - "200": - description: "successful operation" - schema: - type: "object" - additionalProperties: - type: "integer" - format: "int32" - security: - - api_key: [] - /store/order: - post: - tags: - - "store" - summary: "Place an order for a pet" - description: "" - operationId: "placeOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "order placed for purchasing the pet" - required: true - schema: - $ref: "#/definitions/Order" - responses: - "200": - description: "successful operation" - schema: - $ref: "#/definitions/Order" - "400": - description: "Invalid Order" - /store/order/{orderId}: - get: - tags: - - "store" - summary: "Find purchase order by ID" - description: "For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions" - operationId: "getOrderById" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of pet that needs to be fetched" - required: true - type: "integer" - maximum: 10.0 - minimum: 1.0 - format: "int64" - responses: - "200": - description: "successful operation" - schema: - $ref: "#/definitions/Order" - "400": - description: "Invalid ID supplied" - "404": - description: "Order not found" - delete: - tags: - - "store" - summary: "Delete purchase order by ID" - description: "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors" - operationId: "deleteOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of the order that needs to be deleted" - required: true - type: "integer" - minimum: 1.0 - format: "int64" - responses: - "400": - description: "Invalid ID supplied" - "404": - description: "Order not found" - /user: - post: - tags: - - "user" - summary: "Create user" - description: "This can only be done by the logged in user." - operationId: "createUser" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Created user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/createWithArray: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithArrayInput" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/createWithList: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithListInput" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/login: - get: - tags: - - "user" - summary: "Logs user into the system" - description: "" - operationId: "loginUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "query" - description: "The user name for login" - required: true - type: "string" - - name: "password" - in: "query" - description: "The password for login in clear text" - required: true - type: "string" - responses: - "200": - description: "successful operation" - schema: - type: "string" - headers: - X-Rate-Limit: - type: "integer" - format: "int32" - description: "calls per hour allowed by the user" - X-Expires-After: - type: "string" - format: "date-time" - description: "date in UTC when token expires" - "400": - description: "Invalid username/password supplied" - /user/logout: - get: - tags: - - "user" - summary: "Logs out current logged in user session" - description: "" - operationId: "logoutUser" - produces: - - "application/xml" - - "application/json" - parameters: [] - responses: - default: - description: "successful operation" - /user/{username}: - get: - tags: - - "user" - summary: "Get user by user name" - description: "" - operationId: "getUserByName" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be fetched. Use user1 for testing. " - required: true - type: "string" - responses: - "200": - description: "successful operation" - schema: - $ref: "#/definitions/User" - "400": - description: "Invalid username supplied" - "404": - description: "User not found" - put: - tags: - - "user" - summary: "Updated user" - description: "This can only be done by the logged in user." - operationId: "updateUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "name that need to be updated" - required: true - type: "string" - - in: "body" - name: "body" - description: "Updated user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - "400": - description: "Invalid user supplied" - "404": - description: "User not found" - delete: - tags: - - "user" - summary: "Delete user" - description: "This can only be done by the logged in user." - operationId: "deleteUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be deleted" - required: true - type: "string" - responses: - "400": - description: "Invalid username supplied" - "404": - description: "User not found" -securityDefinitions: - petstore_auth: - type: "oauth2" - authorizationUrl: "http://petstore.swagger.io/oauth/dialog" - flow: "implicit" - scopes: - write:pets: "modify pets in your account" - read:pets: "read your pets" - api_key: - type: "apiKey" - name: "api_key" - in: "header" -definitions: - Control: - type: "object" - properties: - id: - type: "string" - description: "Dom id" - styleClasses: - type: "array" - items: - type: "string" - control_type: - type: "string" - description: "UI5 Control class" - Action: - type: "object" - properties: - action_type: - type: "string" - description: "The action name to perform" - enum: - - "input" - - "press" - control_id: - type: "string" - description: "The id of the control to be used" - Order: - type: "object" - properties: - id: - type: "integer" - format: "int64" - petId: - type: "integer" - format: "int64" - quantity: - type: "integer" - format: "int32" - shipDate: - type: "string" - format: "date-time" - status: - type: "string" - description: "Order Status" - enum: - - "placed" - - "approved" - - "delivered" - complete: - type: "boolean" - default: false - xml: - name: "Order" - Category: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - xml: - name: "Category" - User: - type: "object" - properties: - id: - type: "integer" - format: "int64" - username: - type: "string" - firstName: - type: "string" - lastName: - type: "string" - email: - type: "string" - password: - type: "string" - phone: - type: "string" - userStatus: - type: "integer" - format: "int32" - description: "User Status" - xml: - name: "User" - Tag: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - xml: - name: "Tag" - Pet: - type: "object" - required: - - "name" - - "photoUrls" - properties: - id: - type: "integer" - format: "int64" - category: - $ref: "#/definitions/Category" - name: - type: "string" - example: "doggie" - photoUrls: - type: "array" - xml: - name: "photoUrl" - wrapped: true - items: - type: "string" - tags: - type: "array" - xml: - name: "tag" - wrapped: true - items: - $ref: "#/definitions/Tag" - status: - type: "string" - description: "pet status in the store" - enum: - - "available" - - "pending" - - "sold" - xml: - name: "Pet" - ApiResponse: - type: "object" - properties: - code: - type: "integer" - format: "int32" - type: - type: "string" - message: - type: "string" -externalDocs: - description: "Find out more about Swagger" - url: "http://swagger.io" \ No newline at end of file diff --git a/app2/doc_assets/summary.json b/app2/doc_assets/summary.json deleted file mode 100644 index fe51488c..00000000 --- a/app2/doc_assets/summary.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/app2/karma.conf.js b/app2/karma.conf.js deleted file mode 100644 index f31c0b4c..00000000 --- a/app2/karma.conf.js +++ /dev/null @@ -1,44 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, './coverage/ui5-testrecorder'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/app2/package-lock.json b/app2/package-lock.json deleted file mode 100644 index 327a595b..00000000 --- a/app2/package-lock.json +++ /dev/null @@ -1,16701 +0,0 @@ -{ - "name": "ui5-journey-recorder", - "version": "0.2.3", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ui5-journey-recorder", - "version": "0.2.3", - "dependencies": { - "@angular/animations": "^16.1.6", - "@angular/cdk": "^16.1.5", - "@angular/common": "^16.1.6", - "@angular/compiler": "^16.1.6", - "@angular/core": "^16.1.6", - "@angular/forms": "^16.1.6", - "@angular/material": "^16.1.5", - "@angular/platform-browser": "^16.1.6", - "@angular/platform-browser-dynamic": "^16.1.6", - "@angular/router": "^16.1.6", - "rxjs": "^7.5.4", - "tslib": "^2.3.1", - "uuid": "^8.3.2", - "zone.js": "^0.13.1" - }, - "devDependencies": { - "@angular-builders/custom-webpack": "^16.0.0", - "@angular-devkit/build-angular": "^16.1.5", - "@angular/cli": "^16.1.5", - "@angular/compiler-cli": "^16.1.6", - "@compodoc/compodoc": "^1.1.19", - "@types/chrome": "^0.0.179", - "@types/jasmine": "~3.10.0", - "@types/jszip": "^3.4.1", - "@types/node": "^20.4.2", - "@types/uuid": "^8.3.4", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@typescript-eslint/parser": "^5.60.0", - "eslint": "^8.45.0", - "eslint-html-reporter": "^0.7.4", - "eslint-plugin-sonarjs": "^0.19.0", - "eslint-plugin-unused-imports": "^3.0.0", - "jasmine-core": "^4.0.1", - "jszip": "^3.10.1", - "karma": "^6.3.16", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage": "^2.2.0", - "karma-jasmine": "^4.0.1", - "karma-jasmine-html-reporter": "^1.7.0", - "schematics-scss-migrate": "^1.3.15", - "stylelint": "^15.10.2", - "stylelint-config-standard-scss": "^10.0.0", - "stylelint-scss": "^5.0.1", - "typescript": "^4.9.5", - "uglify-js": "^3.15.2", - "zip-a-folder": "^1.1.5" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@aduh95/viz.js": { - "version": "3.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-builders/custom-webpack": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-16.0.0.tgz", - "integrity": "sha512-CR2529DueVpYhS4hPm0TDm4sDeSzYKn+4IvFmujciy4uSO8W4YrBmRgSM0YKjHRGeIwwlHRy025lLjjT7XAPdQ==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": ">=0.1600.0 < 0.1700.0", - "@angular-devkit/build-angular": "^16.0.0", - "@angular-devkit/core": "^16.0.0", - "lodash": "^4.17.15", - "ts-node": "^10.0.0", - "tsconfig-paths": "^4.1.0", - "webpack-merge": "^5.7.3" - }, - "engines": { - "node": "^14.20.0 || ^16.13.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1601.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.5.tgz", - "integrity": "sha512-f6oOXR+0gXdMl2papEkTt28GJJBsYtuuoHSQYM09UltkXPkj4bc9QEOzRXKQ0hDjNYYj3UT00E3CalBO/5uGTA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.5.tgz", - "integrity": "sha512-F78nvdDgVknqA9MekZ6xnmwKLH+qIQ5gBuP+/JnUiSZs1u1i8qS/GGNUL+T/Zsxk1HMRbG+erQ7N6nn1sBKMMw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.5", - "@angular-devkit/build-webpack": "0.1601.5", - "@angular-devkit/core": "16.1.5", - "@babel/core": "7.22.5", - "@babel/generator": "7.22.7", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.5", - "@babel/plugin-proposal-async-generator-functions": "7.20.7", - "@babel/plugin-transform-async-to-generator": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", - "@babel/runtime": "7.22.5", - "@babel/template": "7.22.5", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.5", - "@vitejs/plugin-basic-ssl": "1.0.1", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.14", - "babel-loader": "9.1.2", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.21.5", - "cacache": "17.1.3", - "chokidar": "3.5.3", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.19", - "css-loader": "6.8.1", - "esbuild-wasm": "0.17.19", - "fast-glob": "3.2.12", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.0", - "mini-css-extract-plugin": "2.7.6", - "mrmime": "1.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", - "piscina": "3.2.0", - "postcss": "8.4.24", - "postcss-loader": "7.3.2", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.63.2", - "sass-loader": "13.3.1", - "semver": "7.5.3", - "source-map-loader": "4.0.1", - "source-map-support": "0.5.21", - "terser": "5.17.7", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.5.3", - "vite": "4.3.9", - "webpack": "5.86.0", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.0", - "webpack-merge": "5.9.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.17.19" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "@angular/localize": "^16.0.0", - "@angular/platform-server": "^16.0.0", - "@angular/service-worker": "^16.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^16.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.9.3 <5.2" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.5.3", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1601.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.5.tgz", - "integrity": "sha512-Mc61mrSFFpplBMl11r8ryUrKRDf9Clugnpe8770JcoDe99xEsBFwUUMRS9xNqmVroCgdLMxFijgLSI1ANkUvMg==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.5.tgz", - "integrity": "sha512-0Mui2Nuib7kzOLWkz18v1OdxK6wd0SWdSFsAXavrRv03495vv+JUqVq0z0vGMtcbURkjOxIwdj3coj+Y0szkPQ==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.5.tgz", - "integrity": "sha512-s6D/I0pfJJ7+XaAYyXh6IsS3Tya4WKeBuVcWWE7IK6TMEd5a1yDQ5O9RO2/G8UcxBwlKZmeuFbJkclpF6q3hYA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.5", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/animations": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.6.tgz", - "integrity": "sha512-LsU3/qXom/tLB76Exvjz+7SkifwJ9QG/+gSjWj+DTVlj1+dO7awb8iWQi+YmTmqN7ijTJi9ye6is3iuJSYuCLw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.6" - } - }, - "node_modules/@angular/cdk": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.1.5.tgz", - "integrity": "sha512-8wjYhLwW9bWicBYSdDXuN71SBP7NbJmXs+XiWiRkaFUkVDeU9z8Qkitogl+qqsSXvsOmi+12MowrbJ3tPizaLw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^7.1.2" - }, - "peerDependencies": { - "@angular/common": "^16.0.0 || ^17.0.0", - "@angular/core": "^16.0.0 || ^17.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cli": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.5.tgz", - "integrity": "sha512-um9hWEU3HUMRnQnaDfw0QSNdDLbdLA9tSzp81kz3Rx2VFsSssCABq6xQ+7w09xCUx0jg88r1lBPc2pwV7Pu7FQ==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1601.5", - "@angular-devkit/core": "16.1.5", - "@angular-devkit/schematics": "16.1.5", - "@schematics/angular": "16.1.5", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.3", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.5.3", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/common": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.6.tgz", - "integrity": "sha512-30Y8DGs+oosA+BcDZd1SuZ4HDT+DVZ6lVT4L+mBUH1BSkNna08FrbmrGQxO82CcxU6ZK0q1YLVkkb5cGx8y9ew==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.6", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.6.tgz", - "integrity": "sha512-BVDfKZLMb7mmLwdek+ZyzI43Zv0WNNNqnYpMeOI6egmkhtjNCxpQAy2YFKgNPse3bBGP8tKutwAtBB+Lqu/Kcw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/core": "16.1.6" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.6.tgz", - "integrity": "sha512-unWmH2CcuCkVuEr1fQuzlJtSGzRirsyg8cGQmRh16orx6N8oa/fCvxYRSOed/5aE9YiRpIFZ2TQWT2myY10/6Q==", - "dev": true, - "dependencies": { - "@babel/core": "7.22.5", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/compiler": "16.1.6", - "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/core": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.6.tgz", - "integrity": "sha512-tUXvVLc+Vbl8Se7hajwyUTNmKD9uPq+SZH6x8sRM2n5azzjBZltOoJfzxK5JKAkiFf/KkQhteHkMBfoDLZ2tmw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.6.tgz", - "integrity": "sha512-6MMQx3qCFrXyX4sSNvQRLRm6smGZshMjuWSCSkyEvvTYpZSA3F7h8ba762PDKYE3vMAON2OczCr8y9MyjBEruA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.6", - "@angular/core": "16.1.6", - "@angular/platform-browser": "16.1.6", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.1.5.tgz", - "integrity": "sha512-l11mH/WWBmfiBhrf4/0hCihhLxK4Ldu7+fP8zucHO3X2TiLlpsgJZpcYwJkZf0Ai0rDqIzqCVnks7L9jiuTGCQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/auto-init": "15.0.0-canary.b994146f6.0", - "@material/banner": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/button": "15.0.0-canary.b994146f6.0", - "@material/card": "15.0.0-canary.b994146f6.0", - "@material/checkbox": "15.0.0-canary.b994146f6.0", - "@material/chips": "15.0.0-canary.b994146f6.0", - "@material/circular-progress": "15.0.0-canary.b994146f6.0", - "@material/data-table": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dialog": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/drawer": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/fab": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/floating-label": "15.0.0-canary.b994146f6.0", - "@material/form-field": "15.0.0-canary.b994146f6.0", - "@material/icon-button": "15.0.0-canary.b994146f6.0", - "@material/image-list": "15.0.0-canary.b994146f6.0", - "@material/layout-grid": "15.0.0-canary.b994146f6.0", - "@material/line-ripple": "15.0.0-canary.b994146f6.0", - "@material/linear-progress": "15.0.0-canary.b994146f6.0", - "@material/list": "15.0.0-canary.b994146f6.0", - "@material/menu": "15.0.0-canary.b994146f6.0", - "@material/menu-surface": "15.0.0-canary.b994146f6.0", - "@material/notched-outline": "15.0.0-canary.b994146f6.0", - "@material/radio": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/segmented-button": "15.0.0-canary.b994146f6.0", - "@material/select": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/slider": "15.0.0-canary.b994146f6.0", - "@material/snackbar": "15.0.0-canary.b994146f6.0", - "@material/switch": "15.0.0-canary.b994146f6.0", - "@material/tab": "15.0.0-canary.b994146f6.0", - "@material/tab-bar": "15.0.0-canary.b994146f6.0", - "@material/tab-indicator": "15.0.0-canary.b994146f6.0", - "@material/tab-scroller": "15.0.0-canary.b994146f6.0", - "@material/textfield": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tooltip": "15.0.0-canary.b994146f6.0", - "@material/top-app-bar": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^16.0.0 || ^17.0.0", - "@angular/cdk": "16.1.5", - "@angular/common": "^16.0.0 || ^17.0.0", - "@angular/core": "^16.0.0 || ^17.0.0", - "@angular/forms": "^16.0.0 || ^17.0.0", - "@angular/platform-browser": "^16.0.0 || ^17.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.6.tgz", - "integrity": "sha512-qHwQpqhcWFAwroWwe7iiSsJrs38lrW82vHEm/sX/fcbUuLtqEDaNMf90KqzeSPIkFEkX5wwUZxdRwEh2bepf6g==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.1.6", - "@angular/common": "16.1.6", - "@angular/core": "16.1.6" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.6.tgz", - "integrity": "sha512-NZ3bcXgWq9k0pJE7EvZsatvY8++5NzAtxCdV9IM+fqgzBzkSR4le0Iud4hdBSNQF1DOwwB8KdU7Xpe9q4YsdqA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.6", - "@angular/compiler": "16.1.6", - "@angular/core": "16.1.6", - "@angular/platform-browser": "16.1.6" - } - }, - "node_modules/@angular/router": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.6.tgz", - "integrity": "sha512-4+MniaDghKurV117URJZzCQBNCdMfiu6lRpTdcKWbHgGZqOQRG9N/gcHah5eLYVB0s6mfQ1OQ9HavNyjujF6Fg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/common": "16.1.6", - "@angular/core": "16.1.6", - "@angular/platform-browser": "16.1.6", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", - "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "regexpu-core": "^5.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", - "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@compodoc/compodoc": { - "version": "1.1.19", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/schematics": "^13.2.4", - "@babel/core": "^7.17.5", - "@babel/preset-env": "^7.16.11", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.0", - "chalk": "4.1.2", - "cheerio": "^1.0.0-rc.10", - "chokidar": "^3.5.3", - "colors": "1.4.0", - "commander": "^9.0.0", - "cosmiconfig": "^7.0.1", - "decache": "^4.6.1", - "fancy-log": "^2.0.0", - "findit2": "^2.2.3", - "fs-extra": "^10.0.1", - "glob": "^7.2.0", - "handlebars": "^4.7.7", - "html-entities": "^2.3.2", - "i18next": "^21.6.11", - "inside": "^1.0.0", - "json5": "^2.2.0", - "lodash": "^4.17.21", - "loglevel": "^1.8.0", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "^4.0.12", - "minimist": "^1.2.5", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "pdfjs-dist": "^2.12.313", - "pdfmake": "^0.2.4", - "semver": "^7.3.5", - "traverse": "^0.6.6", - "ts-morph": "^13.0.3", - "uuid": "^8.3.2" - }, - "bin": { - "compodoc": "bin/index-cli.js" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/core": { - "version": "13.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.9.0", - "ajv-formats": "2.1.1", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/schematics": { - "version": "13.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "13.3.9", - "jsonc-parser": "3.0.0", - "magic-string": "0.25.7", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/ajv": { - "version": "8.9.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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/@compodoc/compodoc/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@compodoc/compodoc/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@compodoc/compodoc/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/jsonc-parser": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@compodoc/compodoc/node_modules/magic-string": { - "version": "0.25.7", - "dev": true, - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/@compodoc/compodoc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@compodoc/compodoc/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@compodoc/live-server": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@compodoc/ngd-core": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "fancy-log": "^1.3.3", - "typescript": "^4.0.3" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-core/node_modules/fancy-log": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/@compodoc/ngd-transformer": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@aduh95/viz.js": "^3.1.0", - "@compodoc/ngd-core": "~2.1.0", - "dot": "^1.1.3", - "fs-extra": "^9.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz", - "integrity": "sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^2.1.1" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz", - "integrity": "sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz", - "integrity": "sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@foliojs-fork/fontkit": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@foliojs-fork/restructure": "^2.0.2", - "brfs": "^2.0.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.1", - "clone": "^1.0.4", - "deep-equal": "^1.0.0", - "dfa": "^1.2.0", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.2.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "1.3.1", - "brfs": "^2.0.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { - "version": "1.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@foliojs-fork/pdfkit": { - "version": "0.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@foliojs-fork/fontkit": "^1.9.1", - "@foliojs-fork/linebreak": "^1.1.1", - "crypto-js": "^4.0.0", - "png-js": "^1.0.0" - } - }, - "node_modules/@foliojs-fork/restructure": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@material/animation": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-kqqzG54tabYJ5VsBur5k1bqCFQCEpaW3hmLRMiSVVxRY7XgTt7qkuOOz48gs+MPqR6P8VIi6gFpuscV1+DWDhw==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/auto-init": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-8nLe/XeueJg5yyYx5e4UxWQXpTDyUhibKfyroGwnRKc8pdpOCOulHSOj/fIVGJAIbxkEJoebwMadWUNCjUhc9A==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/banner": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-gJ4/VdP4dJgHP72Kdjy2f/UjHB45J4CuxoGvI0NIQYUjOSsr4kQiQHsjVgyEPZR/5wa7kBhM7/0mJ+zF7Ghv2A==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/button": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/base": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-rW2upYD5YjRFBL6DzYn3SCRhtvpEDkwplDS810e3vt71uLMRyqXyw4OQJH+Nab/t+32TFDtKNUphXIzwICXGDQ==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/button": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-SMyqtsvJuCqpXBz2JgciuR6wddNJSGpTXUFxmLbGluBy5/hHm06JWlOFcUOxGDv46OdRGGrRfkg6A9JtvtsJsw==", - "dependencies": { - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/card": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-WSggGon91HcDhJyatnYLFkoM9glkkeJjyjFDWrcJkwN1rdrPJU+GH+PNjvmArz5hGv9WkmjDjhOdAuPnL4Mb7g==", - "dependencies": { - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/checkbox": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-pulRiwG9S/dS6WBG+GteODBltddFiL0Sb7HAqdzF2BTKNKv25q1ZIR3ftoEa09TNeWM88AOzTJ4aBHiADfJn2w==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/chips": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-3yJPj7x+eKLA4LMKG7aTWI+itAnKRVGOcniuR6aiXVy0OKr5asNuWNeZc9J0/VErjjxF3tdybDzDSPo01qPy9w==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/checkbox": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "safevalues": "^0.3.4", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/circular-progress": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-6YUvGXdtZKJoE7AuovR4xk1aiWp/EDZ6j2U3TOeynd1assQQCg5XT4abqAoHtpJrRPaCFgUAp836HyiDVVuYug==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/progress-indicator": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/data-table": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-v4hIduIe/wzyibuL/RPM/ErYrt8XpB7fxyQqtV+0JsMpFa8E81QYyvMCS9EJj9m4YdkrQnZgA+vXQlOkhWvmdQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/checkbox": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/icon-button": "15.0.0-canary.b994146f6.0", - "@material/linear-progress": "15.0.0-canary.b994146f6.0", - "@material/list": "15.0.0-canary.b994146f6.0", - "@material/menu": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/select": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/density": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-m8l0vuoWSoAPItBpWp5eZDvitUcB2JWoO8V486hLgdveVcKgXG09xWM43ScH+PLXAWjzr5olDEuJ2tvfkN3SpQ==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/dialog": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-JucU92yh8cfZQpyRBunHr6uohacePLYmhcPaGpkAGQ1b+zCznEsNs55tjhaVQNoj91XA9rrBqtL6Otg+fxFJtQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/button": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/icon-button": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/dom": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-DiUsTezrCi4iytjIn7xXoXZSNFvuTrVVZgc7cR9cW8yu2Hpz8bPf87PacVn4IP9OsNwy/dCDMk1Kcq/DMh7gXQ==", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/drawer": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-Kbuf32V0eX69amvCVbAjNSabNDerZWyG8ip466EfQHRh0OUZwvsbhLp9FZOB7AyR+/bQiHf3mVLcombOdmdkcQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/list": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/elevation": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-l2YDNgBajSI6oA2l6gaeYCTGHRao657syqQ/tv95/Hkcee9900A4RrsxCwSxOqqAs5pZZDEJ33kFJjj27nqZDw==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/fab": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-ExyDVkNWINpns41Ahj4u8I/OhiVkqI0nmcqjFRtgTJMmKEd4NhlvqIxE7gakAlyS68riJu5UleqTSTVmt8mv2Q==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/feature-targeting": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-HR/FjSQmza98B1DF80MRjODyfOI9r7wXkPSts/cLQsYkpwZ5uJmxhvQKjDCeYVpMV0lQuvuvVOQo7uD44TdWEg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/floating-label": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-g64talBNWCS0FUfLWal0uB637gUciSIqYxFzSW//LglTtbZLGK2J4+9gAEswQGnKeO4ux08EN2n1ZcMDYQ58ow==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/focus-ring": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-87qEMuXsCvlQfTiimnzJUZoebnIXWcMtRZevNLymN9Y0t9jGckQxZPmrI0llRkpyiR/Ewhec5SI/JGrFlYHnsA==", - "dependencies": { - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0" - } - }, - "node_modules/@material/form-field": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-Tg1SQQaopvXMyDEYxGTWnhCWQmNcWVIoKMLmle9P/gi2p8ulcj0iOCPYf+3ECqUBVozOmTPKlYOOiRwtKStAeA==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/icon-button": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-X6DvOv4jpymHUjI7ZAbO946nDgGYKDwPZfkRzBE84gv2XEr2qfMuABhojxkYubRbt03oauBdcJVVMFCXkVhArQ==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/image-list": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-kf903XFF1P+V5ZPXCt+7R6c55g4UyQE1ZHkTViCIJfd52gU40bHODMhTQy/ywBkwDeJfNk8uf1V1IM24WQYpxA==", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/layout-grid": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-OALBSGue8g1/mEwLYYi2d950dJFpNYKW87jPS9/KM65JKMyxoU7tU2d4An1BuyqK0r9sopGq6Pn/zhill0iLaw==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/line-ripple": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-evjZxCu4iodiKtW8N0xjY8ACRXm3sY+4rAmq3vV5BmHWAJ3BobjbFYslDMZQ+4mu3HmwMatbJehKxHegahitNg==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/linear-progress": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-jlXh+tIj+/o0Ks7fHdC/24fH6IXCAl2vF52U6NwT39ESrlwmlLhp3gtag5GSBHN5E7Z09nK871Yo1G/b1F+COg==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/progress-indicator": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/list": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-kY/i6VvFBb/W3VvCPvWRMzWvu7mvNFJ+R8ijfawDoAXiv4fj42GO4iFyTcFXaUevEPKp791pN/09BMJQ6jYEvA==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/menu": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-y6smNmLJ+U0DoXWbyqzW+VW/uWDuklhdGHc5MbZrTOhsKkhvoTVNMSOa+NFPU4gTwrplvUjaUvnIsQ0wygwD3g==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/list": "15.0.0-canary.b994146f6.0", - "@material/menu-surface": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/menu-surface": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-StmM3lrRn1iMEZfq532jpMNppqyBBy68FbPurKEsHuP/3q+CscfnwjrS9ym+JcHqXKMHnQXbL/49ymffRGX2AQ==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/notched-outline": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-UZxU8jXM2t/bk/CiO0K+TSPspuJRZIyrYlIS0gd+qq/u8Gi2DpALBlLAh9Jeu46IUg4YGlPsNWYfe8p3QAVyoA==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/floating-label": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/progress-indicator": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-VT+mOQhohaM+pBX1rknbVOI6JCGKg9NiOHBoYljIvnexNeILE+mW9g6mtQ0ZCJPz0oMmiSAMLcuxMIcBXx84Xw==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/radio": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-U/RR2lVNWwEO2+kJtGz9XzvnOF0gAZn1krMY0z/eU9Wnl0OgPZbqQrxXMoVNv1pzKYSEwZQEGado/rv8qp7piA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/ripple": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-WzIbc8wYTzMOczqGXVCBPdNcv/73Ef8FwcQYsscGMaqCzgVsdpoqilTfsx7Ryyz6dQbyfmJqp7s+YpPujcezOA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/rtl": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-H/W6BVn4Ygfkrf/FgSrNhbu1uY7PST2wlsjEYQt06EfAM0CDHEwSL1MwV4FmpQA/r40Q0PqoLN6moDrtCe5S8g==", - "dependencies": { - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/segmented-button": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-jd+f4BTnU0tghxBpAM/XdVmruDXSoQ88TYSFWbrhulS+/c/ooCZURWvVC4mHNej+QR/fODkx4adbqkBiwwCtMw==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/touch-target": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/select": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-5thEQS+B17JSm3I8D+mqQe2G3ArVnXJALTEEE9FmMUKwKYkrsLplm3FYuEXERZGJnYeTRdkdmhYY/YeocfZoyA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/floating-label": "15.0.0-canary.b994146f6.0", - "@material/line-ripple": "15.0.0-canary.b994146f6.0", - "@material/list": "15.0.0-canary.b994146f6.0", - "@material/menu": "15.0.0-canary.b994146f6.0", - "@material/menu-surface": "15.0.0-canary.b994146f6.0", - "@material/notched-outline": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/shape": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-sINM3gr3aLgdvqZVfqfXV5EB77owLLJjy+2NqchJ8ZPqucCJ+F/BsCBfLA2Wu3O4Sc9IpAEn/o1hzYm/CWAFAw==", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/slider": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-dyT72+Kp//AEajJxDUVoMoizUjf2uggVMGXOaQ7FhpGHuf7LC3EyEjrrJ15efFzYgTjdJUU1YQkCwGmdt6CQsA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/snackbar": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-fEhPASJossScNpcrNYrrH8uU+rUf6+kw7/ZMrpUzzz1lVXliL28jTNEmU1nFpcDI4M2GXH+Z64f7vl2hiMDG8g==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/button": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/icon-button": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/switch": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-czCXTUa30ILIf1J3exiuSVIRcodGATHexd3eWDq4sfHo4iMh4rBMaIxcqkmnb2iwE/mMTNyVfoauijx2QiNKrA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "safevalues": "^0.3.4", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-ygswooiNdBNNDnQdbPX0nzDQu7oQlHo8vWZ0/xL4IPVEXabY5zCzsEbGNZw2u/syo56c/NHPyMsUmXDGRSXOvQ==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/focus-ring": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/tab-indicator": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-bar": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-F9NegACnFEWMu1pAAypV4Jd7qROeffkvEgVO28Xxk/CvzZxFz8kAjYJZ+rI6RUhPX3BhXzwsz/AlLwsJMT2tnA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/tab": "15.0.0-canary.b994146f6.0", - "@material/tab-indicator": "15.0.0-canary.b994146f6.0", - "@material/tab-scroller": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-indicator": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-8IH/DmwlZhQlw/2Y3aKrEvjEhZB+qbKUiyaij3BkTAexvyFeDBh5cLNjRpYkUJSGeSPhS6yu4SYzMHPmQEwQmA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-scroller": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-1MeWkr62OICfTv8oqhIZe6jFo0dKeMlUfB+/WcgnpoeMBszCOSlx5tQ4pedxUkuR3I+Z7rsTfSN0LavgF8bATA==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/tab": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/textfield": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-Kxb3DoJ5o8u3Y1gRMHKmWrDl1TirVxuf/UFrxPFiCE3J1SqiE2VQpakiD1emZwp+LSKtbRsQ/iILYLB/h7Wuvw==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/density": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/floating-label": "15.0.0-canary.b994146f6.0", - "@material/line-ripple": "15.0.0-canary.b994146f6.0", - "@material/notched-outline": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/theme": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-5tsZ92dAeUcZ9g9CrIkqX/GYc0M5DIfsydtI1PAidaBzr1Uokuh4rTZVQZBv7gyglF0yDua59lkb0I6wI9vxXg==", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tokens": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-jFqU7PtvGkrP8b8i2soCrYQInTrnZ1/rIPDi+Xm3sa/qSghCNwFrdJEqwcwtv1fPlJIOtzkIuVRYRmAP9rXQIQ==", - "dependencies": { - "@material/elevation": "15.0.0-canary.b994146f6.0" - } - }, - "node_modules/@material/tooltip": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-bVzydXGn3fauHJ8pkh32DsdyRJXleeFQ4t7jZ/rcRik+n4G1BvYiblfuu3Z/OCC0m3TJDyMdJhd+sLqRDqLUUg==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/button": "15.0.0-canary.b994146f6.0", - "@material/dom": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/tokens": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "safevalues": "^0.3.4", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/top-app-bar": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-VHq0wX3OJE1TKvjO8Qtlu+rv5EGoqAhNLBcEjpUUGoqHH/gpd356FEuIqJId4pUh5jaWf8T4ZU9xVbQGMtntzw==", - "dependencies": { - "@material/animation": "15.0.0-canary.b994146f6.0", - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/elevation": "15.0.0-canary.b994146f6.0", - "@material/ripple": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/shape": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "@material/typography": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/touch-target": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-X26Y9OWvIqYOHo+sC2VMvOoeQWlUR3/yb7uPdfq92Y44zlQ4Vexgq7nEUblEiXQ8Fj+d0T9rIhRh1y9PP3Z2dw==", - "dependencies": { - "@material/base": "15.0.0-canary.b994146f6.0", - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/rtl": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/typography": { - "version": "15.0.0-canary.b994146f6.0", - "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.b994146f6.0.tgz", - "integrity": "sha512-sWU5W30WWqdw5P6bsRx9AbvMNcz/QvQg56Syr06V6nfgSztpeuo7TfPk2J+N0ArRALo1mUrkAPk66iWYQ2p/QA==", - "dependencies": { - "@material/feature-targeting": "15.0.0-canary.b994146f6.0", - "@material/theme": "15.0.0-canary.b994146f6.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.5.tgz", - "integrity": "sha512-XQkanGAtB9S2EE14xa/04hPNYSkAzJOeaHJkirfqk/p40p8nA2pNsfLYCMd2N7K4kzqcET8UYAZ+wIpQxp12HA==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^16.0.0", - "typescript": ">=4.9.3 <5.2", - "webpack": "^5.54.0" - } - }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", - "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^6.0.0", - "lru-cache": "^7.4.4", - "npm-pick-manifest": "^8.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@schematics/angular": { - "version": "16.1.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.5.tgz", - "integrity": "sha512-GwSweqKGjMc9oqU6fukqYKlBflCCDA/l2qfA60YIdf4SubaZnIUpkpNXTbWeFRPJh8zQShb8OZE7cVj8MZRruw==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.5", - "@angular-devkit/schematics": "16.1.5", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@sigstore/bundle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz", - "integrity": "sha512-yLvrWDOh6uMOUlFCTJIZEnwOT9Xte7NPXUqVexEKGSF5XtBAuSg5du0kn3dRR0p47a4ah10Y0mNt8+uyeQXrBQ==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz", - "integrity": "sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.12.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.7", - "minimatch": "^3.0.4", - "mkdirp": "^1.0.4", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chrome": { - "version": "0.0.179", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.179.tgz", - "integrity": "sha512-60zloNApIf88RwiG3Q7E+4NBG+znchhWmcaEVAAhUZahQbft5LWBzij4sinsfpAwbTtuWdFfUSpZsFhXTEFPVw==", - "dev": true, - "dependencies": { - "@types/filesystem": "*", - "@types/har-format": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cors": { - "version": "2.8.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.44.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/filesystem": { - "version": "0.0.32", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/filewriter": "*" - } - }, - "node_modules/@types/filewriter": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/har-format": { - "version": "1.2.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "3.10.11", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.11.tgz", - "integrity": "sha512-tAiqDJrwRKyjpCgJE07OXFsXsXQWDhoJhyRwzl+yfEToy72s0LhHAfquMi2s4T4Iq3nanKOfZ8/PZFaL/0pQmA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jszip": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.4.1.tgz", - "integrity": "sha512-TezXjmf3lj+zQ651r6hPqvSScqBLvyPI9FxdXBqpEwBijNGQ2NXpaFW/7joGzveYkKQUil7iiDHLo6LV71Pc0A==", - "deprecated": "This is a stub types definition. jszip provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "jszip": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.4.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", - "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", - "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true, - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "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/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@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.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "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/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abab": { - "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "dev": true, - "license": "BSD-3-Clause OR MIT", - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/apache-crypt": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/apache-md5": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/archiver": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.3", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-from": { - "version": "2.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-transform": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - } - }, - "node_modules/ast-transform/node_modules/esprima": { - "version": "1.0.4", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-types": { - "version": "0.7.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", - "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", - "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", - "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "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" - } - ], - "license": "MIT" - }, - "node_modules/base64id": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "dev": true, - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser/node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brfs": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" - }, - "bin": { - "brfs": "bin/cmd.js" - } - }, - "node_modules/brotli": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/browserify-optional": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "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" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "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" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsite": { - "version": "1.0.0", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001514", - "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" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "dev": true, - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.7.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/code-block-writer": { - "version": "11.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "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/colors": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "9.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/compress-commons": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/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/content-type": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.31.1", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.9" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/critters": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.19.tgz", - "integrity": "sha512-Fm4ZAXsG0VzWy1U30rP4qxbaWGSsqXDgSupJW1OUJGDAs0KWC+j37v7p5a2kZ9BPJvhRzWm3be+Hc9WvQOBUOw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/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/critters/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/critters/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/critters/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/critters/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/critters/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/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/css-functions-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", - "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", - "dev": true, - "engines": { - "node": ">=12.22" - } - }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/d": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dash-ast": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/date-format": { - "version": "4.0.13", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decache": { - "version": "4.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsite": "^1.0.0" - } - }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/dfa": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/di": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dommatrix": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/domutils": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot": { - "version": "1.1.3", - "dev": true, - "engines": [ - "node >=0.2.6" - ], - "license": "MIT", - "bin": { - "dottojs": "bin/dot-packer" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.455", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/entities": { - "version": "4.4.0", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "dev": true, - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-map": { - "version": "0.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-set": { - "version": "0.1.6", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-set/node_modules/type": { - "version": "2.7.2", - "dev": true, - "license": "ISC" - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", - "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.2.0", - "dev": true, - "dependencies": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.4.0" - }, - "optionalDependencies": { - "source-map": "~0.1.30" - } - }, - "node_modules/escodegen/node_modules/esprima": { - "version": "1.0.4", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/escodegen/node_modules/esutils": { - "version": "1.0.0", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.1.43", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-html-reporter": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/eslint-html-reporter/-/eslint-html-reporter-0.7.4.tgz", - "integrity": "sha512-s9+ic4RIUUiahxfTBPR7+kd92x/BtTXk4s7mEvIXtBX54qe9h6+8/IGzt80qMPjQ1husIx+91ZOi4s0DfeNTZg==", - "dev": true, - "dependencies": { - "hairballs": "^0.3.2", - "handlebars": "^4.3.1" - } - }, - "node_modules/eslint-plugin-sonarjs": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.19.0.tgz", - "integrity": "sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-unused-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz", - "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0", - "eslint": "^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/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/eslint/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/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/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/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/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/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/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/eslint/node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/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/eslint/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/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/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "1.5.1", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/estree-is-function": { - "version": "1.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/event-stream": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/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/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "dev": true, - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "dev": true, - "license": "ISC" - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fancy-log": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-support": "^1.1.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "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/fastq": { - "version": "1.13.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findit2": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.22" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from": { - "version": "0.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/hairballs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/hairballs/-/hairballs-0.3.3.tgz", - "integrity": "sha512-zs/yfV9OeMcSRyiO2v/Aop5pRPfBRrZOI5w/BYHw2fb8YAYyB1e8jHNpam5EHvhxKmoa5eEspheVMaXZxvtdKw==", - "dev": true, - "dependencies": { - "handlebars": "^4.5.1" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.7", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "dev": true, - "license": "BSD", - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "dev": true, - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-auth": { - "version": "4.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth-connect": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/i18next": { - "version": "21.9.1", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.17.2" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "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" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/immutable": { - "version": "4.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inside": { - "version": "1.0.0", - "dev": true, - "license": "Public Domain" - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jszip": { - "version": "3.10.1", - "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/karma": { - "version": "6.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/karma-coverage/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/karma-jasmine": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^3.6.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "karma": "*" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": ">=3.8", - "karma": ">=0.9", - "karma-jasmine": ">=1.1" - } - }, - "node_modules/karma-jasmine/node_modules/jasmine-core": { - "version": "3.99.1", - "dev": true, - "license": "MIT" - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/karma/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/karma/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/karma/node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/known-css-properties": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", - "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", - "dev": true - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/less": { - "version": "4.1.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lie": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.6.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.13", - "debug": "^4.3.4", - "flatted": "^3.2.6", - "rfdc": "^1.3.0", - "streamroller": "^3.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/loglevel": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/loglevel-plugin-prefix": { - "version": "0.8.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "dev": true, - "license": "MIT" - }, - "node_modules/macos-release": { - "version": "2.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-stream": { - "version": "0.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/marked": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-source-map": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "dev": true, - "license": "MIT" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/morgan": { - "version": "1.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/morgan/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/morgan/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.3.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/needle": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-gyp/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/node-releases": { - "version": "2.0.13", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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/ora/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-name": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", - "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { - "@npmcli/git": "^4.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/run-script": "^6.0.0", - "cacache": "^17.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^5.0.0", - "npm-package-arg": "^10.0.0", - "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^8.0.0", - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^6.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^1.3.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "dev": true, - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pdfjs-dist": { - "version": "2.16.105", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dommatrix": "^1.0.3", - "web-streams-polyfill": "^3.2.1" - }, - "peerDependencies": { - "worker-loader": "^3.0.8" - }, - "peerDependenciesMeta": { - "worker-loader": { - "optional": true - } - } - }, - "node_modules/pdfmake": { - "version": "0.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@foliojs-fork/linebreak": "^1.1.1", - "@foliojs-fork/pdfkit": "^0.13.0", - "iconv-lite": "^0.6.3", - "xmldoc": "^1.1.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/pdfmake/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/png-js": { - "version": "1.0.0", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", - "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/postcss-loader/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", - "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - } - ], - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.19" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/pump": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "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" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/quote-stream": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - }, - "bin": { - "quote-stream": "bin/cmd.js" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "dev": true, - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.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-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/rollup": { - "version": "3.26.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.3.tgz", - "integrity": "sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/safevalues": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.3.4.tgz", - "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==" - }, - "node_modules/sass": { - "version": "1.63.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", - "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", - "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", - "dev": true, - "dependencies": { - "klona": "^2.0.6", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "dev": true, - "license": "ISC" - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schematics-scss-migrate": { - "version": "1.3.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "^12.0.1", - "@angular-devkit/schematics": "^12.2.8", - "@schematics/angular": "^12.2.8", - "glob": "^7.1.6", - "sass": "^1.29.0", - "typescript": "^4.3.2" - } - }, - "node_modules/schematics-scss-migrate/node_modules/@angular-devkit/core": { - "version": "12.2.18", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.6.2", - "ajv-formats": "2.1.0", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.7", - "source-map": "0.7.3" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/schematics-scss-migrate/node_modules/@angular-devkit/schematics": { - "version": "12.2.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "12.2.18", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/schematics-scss-migrate/node_modules/@schematics/angular": { - "version": "12.2.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "12.2.18", - "@angular-devkit/schematics": "12.2.18", - "jsonc-parser": "3.0.0" - }, - "engines": { - "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/schematics-scss-migrate/node_modules/ajv": { - "version": "8.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schematics-scss-migrate/node_modules/ajv-formats": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/schematics-scss-migrate/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/schematics-scss-migrate/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/schematics-scss-migrate/node_modules/jsonc-parser": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/schematics-scss-migrate/node_modules/magic-string": { - "version": "0.25.7", - "dev": true, - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/schematics-scss-migrate/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/schematics-scss-migrate/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/schematics-scss-migrate/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/schematics-scss-migrate/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/scope-analyzer": { - "version": "2.1.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "array-from": "^2.1.1", - "dash-ast": "^2.0.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallow-copy": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/sigstore": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.8.0.tgz", - "integrity": "sha512-ogU8qtQ3VFBawRJ8wjsBEX/vIFeHuGs1fm4jZtjWQwjo8pfAt7T/rh+udlAN4+QUe0IzA8qRSc/YZ7dHP6kh+w==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^1.0.0", - "@sigstore/protobuf-specs": "^0.2.0", - "@sigstore/tuf": "^1.0.3", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/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/slice-ansi/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/slice-ansi/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/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "dev": true, - "license": "MIT" - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/split": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/static-eval": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escodegen": "^1.11.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-eval/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/static-eval/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-module": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "^1.11.1", - "has": "^1.0.1", - "magic-string": "0.25.1", - "merge-source-map": "1.0.4", - "object-inspect": "^1.6.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.5", - "through2": "~2.0.3" - } - }, - "node_modules/static-module/node_modules/escodegen": { - "version": "1.14.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-module/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/static-module/node_modules/magic-string": { - "version": "0.25.1", - "dev": true, - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.1" - } - }, - "node_modules/static-module/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/static-module/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-module/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/streamroller": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.13", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/streamroller/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/streamroller/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "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" - } - ], - "license": "MIT" - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "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/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true - }, - "node_modules/stylelint": { - "version": "15.10.2", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.2.tgz", - "integrity": "sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg==", - "dev": true, - "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1", - "@csstools/media-query-list-parser": "^2.1.2", - "@csstools/selector-specificity": "^3.0.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.0", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.0", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.27.0", - "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.25", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz", - "integrity": "sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==", - "dev": true, - "peerDependencies": { - "stylelint": "^15.5.0" - } - }, - "node_modules/stylelint-config-recommended-scss": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-12.0.0.tgz", - "integrity": "sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==", - "dev": true, - "dependencies": { - "postcss-scss": "^4.0.6", - "stylelint-config-recommended": "^12.0.0", - "stylelint-scss": "^5.0.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.5.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-config-standard": { - "version": "33.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-33.0.0.tgz", - "integrity": "sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg==", - "dev": true, - "dependencies": { - "stylelint-config-recommended": "^12.0.0" - }, - "peerDependencies": { - "stylelint": "^15.5.0" - } - }, - "node_modules/stylelint-config-standard-scss": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-10.0.0.tgz", - "integrity": "sha512-bChBEo1p3xUVWh/wenJI+josoMk21f2yuLDGzGjmKYcALfl2u3DFltY+n4UHswYiXghqXaA8mRh+bFy/q1hQlg==", - "dev": true, - "dependencies": { - "stylelint-config-recommended-scss": "^12.0.0", - "stylelint-config-standard": "^33.0.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.5.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-scss": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.0.1.tgz", - "integrity": "sha512-n87iCRZrr2J7//I/QFsDXxFLnHKw633U4qvWZ+mOW6KDAp/HLj06H+6+f9zOuTYy+MdGdTuCSDROCpQIhw5fvQ==", - "dev": true, - "dependencies": { - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" - } - }, - "node_modules/stylelint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "node_modules/stylelint/node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/stylelint/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/stylelint/node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/stylelint/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - } - }, - "node_modules/supports-hyperlinks/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/supports-hyperlinks/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/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser": { - "version": "5.17.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", - "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", - "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.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "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/terser-webpack-plugin/node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "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/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "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/terser-webpack-plugin/node_modules/terser": { - "version": "5.18.2", - "dev": true, - "license": "BSD-2-Clause", - "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/node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/traverse": { - "version": "0.6.6", - "dev": true, - "license": "MIT" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ts-morph": { - "version": "13.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@ts-morph/common": "~0.12.3", - "code-block-writer": "^11.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.8.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", - "dev": true, - "dependencies": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/type": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/typedarray": { - "version": "0.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/uglify-js": { - "version": "3.17.0", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "dev": true, - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unix-crypt-td-js": { - "version": "1.1.4", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "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" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", - "dev": true, - "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webpack": { - "version": "5.86.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", - "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.14.1", - "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.9", - "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.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "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-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "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/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "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/websocket-driver": { - "version": "0.7.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/windows-release": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ws": { - "version": "8.11.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xmldoc": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-a-folder": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver": "^5.3.1" - } - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zone.js": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", - "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", - "dependencies": { - "tslib": "^2.3.0" - } - } - } -} diff --git a/app2/package.json b/app2/package.json deleted file mode 100644 index ab2adedd..00000000 --- a/app2/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "ui5-journey-recorder", - "version": "0.2.3", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "lint": "eslint .", - "lint:file": "eslint . -f node_modules/eslint-html-reporter/reporter.js -o doc_assets/eslint-report.html", - "build:dev": "ng build --configuration development", - "build:watch": "ng build --watch", - "//build:codeService": "typescript-only build (no angular/webpack) to test code generation with", - "build:codeService": "tsc -p ./tsconfig-testing-only.json", - "watch": "ng build --watch --configuration development", - "test": "ng test", - "//test:codeService": "run build:codeService first", - "test:codeService": "NODE_PATH=./dist-codeservice node --test test/", - "doc": "npx compodoc", - "doc:serve": "npx compodoc -s", - "docu:coverage": "npx compodoc", - "uglify:assets": "node uglify-assets.js", - "postbuild": "node uglify-assets.js", - "//": "--- ZIP FOR DEPLOYMENT ---", - "prezip": "npm run build", - "zip": "node deployZip.js" - }, - "private": true, - "dependencies": { - "@angular/animations": "^16.1.6", - "@angular/cdk": "^16.1.5", - "@angular/common": "^16.1.6", - "@angular/compiler": "^16.1.6", - "@angular/core": "^16.1.6", - "@angular/forms": "^16.1.6", - "@angular/material": "^16.1.5", - "@angular/platform-browser": "^16.1.6", - "@angular/platform-browser-dynamic": "^16.1.6", - "@angular/router": "^16.1.6", - "rxjs": "^7.5.4", - "tslib": "^2.3.1", - "uuid": "^8.3.2", - "zone.js": "^0.13.1" - }, - "devDependencies": { - "@angular-builders/custom-webpack": "^16.0.0", - "@angular-devkit/build-angular": "^16.1.5", - "@angular/cli": "^16.1.5", - "@angular/compiler-cli": "^16.1.6", - "@compodoc/compodoc": "^1.1.19", - "@types/chrome": "^0.0.179", - "@types/jasmine": "~3.10.0", - "@types/jszip": "^3.4.1", - "@types/node": "^20.4.2", - "@types/uuid": "^8.3.4", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@typescript-eslint/parser": "^5.60.0", - "eslint": "^8.45.0", - "eslint-html-reporter": "^0.7.4", - "eslint-plugin-sonarjs": "^0.19.0", - "eslint-plugin-unused-imports": "^3.0.0", - "jasmine-core": "^4.0.1", - "jszip": "^3.10.1", - "karma": "^6.3.16", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage": "^2.2.0", - "karma-jasmine": "^4.0.1", - "karma-jasmine-html-reporter": "^1.7.0", - "schematics-scss-migrate": "^1.3.15", - "stylelint": "^15.10.2", - "stylelint-config-standard-scss": "^10.0.0", - "stylelint-scss": "^5.0.1", - "typescript": "^4.9.5", - "uglify-js": "^3.15.2", - "zip-a-folder": "^1.1.5" - } -} diff --git a/app2/src/app/app-routing.module.ts b/app2/src/app/app-routing.module.ts deleted file mode 100644 index cfddf562..00000000 --- a/app2/src/app/app-routing.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { MainComponent } from './pages/main/main.component'; - -const routes: Routes = [ - { path: '', component: MainComponent }, - { - path: 'scenario', - loadChildren: () => - import('./scenario/scenario.module').then((m) => m.ScenarioModule), - }, -]; - -@NgModule({ - imports: [RouterModule.forRoot(routes)], - exports: [RouterModule], -}) -export class AppRoutingModule {} diff --git a/app2/src/app/app.component.html b/app2/src/app/app.component.html deleted file mode 100644 index 261967a5..00000000 --- a/app2/src/app/app.component.html +++ /dev/null @@ -1,9 +0,0 @@ - - -
- - -
- - diff --git a/app2/src/app/app.component.scss b/app2/src/app/app.component.scss deleted file mode 100644 index e4ef9c6d..00000000 --- a/app2/src/app/app.component.scss +++ /dev/null @@ -1,4 +0,0 @@ -main { - height: calc(100% - 64px); - overflow-y: auto; -} diff --git a/app2/src/app/app.component.spec.ts b/app2/src/app/app.component.spec.ts deleted file mode 100644 index 69c2cc8a..00000000 --- a/app2/src/app/app.component.spec.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - RouterTestingModule - ], - declarations: [ - AppComponent - ], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it(`should have as title 'ui5-testrecorder'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('ui5-testrecorder'); - }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('ui5-testrecorder app is running!'); - }); -}); diff --git a/app2/src/app/app.component.ts b/app2/src/app/app.component.ts deleted file mode 100644 index 359afb73..00000000 --- a/app2/src/app/app.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; - -export let browserRefresh = false; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], -}) -export class AppComponent implements OnInit { - title = 'UI5 Journey Recorder'; - - constructor() {} - - ngOnInit() { - const fKey = (event: any) => { - const e = event || window.event; - // capture for F5 or ctrl+r or cmd+r - if (e.keyCode === 116 || (e.keyCode == 82 && (e.ctrlKey || e.metaKey))) { - e.preventDefault(); - e.stopPropagation(); - e.stopImmediatePropagation(); - window.location.href = '../index.html'; - } - }; - - document.onkeydown = fKey; - document.onkeyup = fKey; - } -} diff --git a/app2/src/app/app.module.ts b/app2/src/app/app.module.ts deleted file mode 100644 index 209352db..00000000 --- a/app2/src/app/app.module.ts +++ /dev/null @@ -1,104 +0,0 @@ -//#region @angular -import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -//#endregion - -//#region material -import { MatTabsModule } from '@angular/material/tabs'; -import { MatListModule } from '@angular/material/list'; -import { MatInputModule } from '@angular/material/input'; -import { MatIconModule } from '@angular/material/icon'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatRadioModule } from '@angular/material/radio'; -//#endregion material - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; - -//#region components -import { AppHeaderComponent } from './components/app-header/app-header.component'; -import { AppFooterComponent } from './components/app-footer/app-footer.component'; -import { AppFooterService } from './components/app-footer/app-footer.service'; -import { AppHeaderService } from './components/app-header/app-header.service'; -import { ConfirmDialogComponent } from './components/dialogs/confirm-dialog/confirm-dialog.component'; -//#endregion - -//#region services -import { ChromeExtensionService } from './services/chromeExtensionService/chrome_extension_service'; -import { ScenarioService } from './services/scenarioService/scenario.service'; -import { ScenarioStorageService } from './services/localStorageService/scenarioStorageService.service'; -import { MessageService } from './services/messageService/message.service'; -//#endregion - -//#region pages -import { MainComponent } from './pages/main/main.component'; -//#endregion - -//#region directives -import { AppTemplateDirective } from './directives/app-template.directive'; -import { SnackDialogComponent } from './components/dialogs/snack-dialog/snack-dialog.component'; -import { SettingsDialogComponent } from './components/dialogs/settings-dialog/settings-dialog.component'; -import { MatSelectModule as MatSelectModule } from '@angular/material/select'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { SettingsStorageService } from './services/localStorageService/settingsStorageService.service'; -import { LoaderService } from './services/loaderService/loaderService'; -import { GlobalSpinnerComponent } from './components/globalSpinner/globalSpinner.component'; -//#endregion - -@NgModule({ - declarations: [ - AppComponent, - AppHeaderComponent, - AppFooterComponent, - MainComponent, - AppTemplateDirective, - ConfirmDialogComponent, - SnackDialogComponent, - SettingsDialogComponent, - GlobalSpinnerComponent, - ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - AppRoutingModule, - FormsModule, - //#region material - MatTabsModule, - MatButtonModule, - MatListModule, - MatInputModule, - MatIconModule, - MatFormFieldModule, - MatToolbarModule, - MatProgressSpinnerModule, - MatSnackBarModule, - MatDialogModule, - MatCheckboxModule, - MatSelectModule, - MatExpansionModule, - MatRadioModule, - //#endregion - ], - providers: [ - AppFooterService, - AppHeaderService, - ChromeExtensionService, - MessageService, - ScenarioService, - ScenarioStorageService, - SettingsStorageService, - LoaderService, - ], - bootstrap: [AppComponent], -}) -export class AppModule { - constructor(private _: SettingsStorageService) {} -} diff --git a/app2/src/app/classes/Step.ts b/app2/src/app/classes/Step.ts deleted file mode 100644 index 0fd35c77..00000000 --- a/app2/src/app/classes/Step.ts +++ /dev/null @@ -1,442 +0,0 @@ -import { Equals, Stringify } from './interfaces'; -import { v4 as uuidV4 } from 'uuid'; - -export enum StepType { - Click = 'clicked', - Input = 'input', - KeyPress = 'keypress', - Unknown = 'unknown', - Validation = 'validate', -} - -export type IntermediateStep = Step & { - view?: { absoluteViewName: string; relativeViewName: string }; -}; - -export type Control = { - control_id: { id: string; use: boolean }; - control_type: string; - properties?: { - name: string; - value: any; - use: boolean; - hideFromSelection?: boolean; - }[]; - bindings?: { - propertyName: string; - bindingValue: any; - modelPath: string; - propertyPath: string; - modelName: string; - use: boolean; - }[]; - i18nTexts?: { - propertyName: string; - propertyPath: string; - bindingValue: any; - use: boolean; - }[]; -}; - -export abstract class Step implements Stringify, Equals { - private step_id: string; - private action_type: StepType; - private action_location: string; - private control: Control; - private style_classes: string[]; - private record_replay_selector: { [key: string]: any }; - - public static recordEventToStep(event: object): IntermediateStep { - let res: IntermediateStep; - switch (event.type) { - case 'clicked': - if ( - event.control && - event.control.events && - event.control.events.press - ) { - res = new ClickStep(); - } else { - res = new ValidationStep(); - } - break; - case 'keypress': - res = new KeyPressStep(); - (res as KeyPressStep).key = event.key; - (res as KeyPressStep).keyCode = event.keyCode; - break; - default: - res = new UnknownStep(); - } - - const stepControl: Control = { - control_id: { - id: event.control.id, - use: event.control.id.startsWith('__') ? false : true, - }, - control_type: event.control.type, - }; - stepControl.properties = Object.entries(event.control.properties).map( - (entry) => ({ name: entry[0], value: entry[1], use: false }) - ); - - event.control.bindings?.forEach((binding: any) => { - if (binding.i18n) { - if (!stepControl.i18nTexts) { - stepControl.i18nTexts = []; - } - stepControl.i18nTexts.push({ - propertyName: binding.key, - propertyPath: binding.propertyPath, - bindingValue: binding.value, - use: false, - }); - } else { - if (!stepControl.bindings) { - stepControl.bindings = []; - } - stepControl.bindings.push({ - propertyName: binding.key, - bindingValue: binding.value, - modelPath: binding.modelPath, - propertyPath: binding.propertyPath, - modelName: binding.model, - use: false, - }); - } - }); - res.control = stepControl; - res.style_classes = event.control.classes; - res.action_location = event.location; - res.view = event.control.view; - res.record_replay_selector = event.control.recordReplaySelector; - res.applyPreSelection(); - return res; - } - - public static fromJSON(json: string): Step { - const parsedObj = JSON.parse(json); - const stepControl: Control = { - control_id: { - id: parsedObj.control.control_id.id, - use: parsedObj.control.control_id.use, - }, - control_type: parsedObj.control.control_type, - properties: parsedObj.control.properties, - bindings: parsedObj.control.bindings, - i18nTexts: parsedObj.control.i18nTexts, - }; - switch (parsedObj.action_type) { - case StepType.Validation: - const val = new ValidationStep(parsedObj.step_id); - val.styleClasses = parsedObj.style_classes; - val.actionLoc = parsedObj.action_location; - val.recordReplaySelector = parsedObj.record_replay_selector; - val.control = stepControl; - return val; - case StepType.Click: - const cs = new ClickStep(parsedObj.step_id); - cs.styleClasses = parsedObj.style_classes; - cs.actionLoc = parsedObj.action_location; - cs.recordReplaySelector = parsedObj.record_replay_selector; - cs.control = stepControl; - return cs; - case StepType.Input: - const is = new InputStep(parsedObj.step_id); - is.styleClasses = parsedObj.style_classes; - is.actionLoc = parsedObj.action_location; - is.recordReplaySelector = parsedObj.record_replay_selector; - is.control = stepControl; - if (parsedObj.keys) { - parsedObj.keys.forEach((k: any) => { - is.addStep(Step.fromJSON(JSON.stringify(k)) as KeyPressStep); - }); - } - return is; - case StepType.KeyPress: - const kps = new KeyPressStep(parsedObj.step_id); - kps.styleClasses = parsedObj.style_classes; - kps.actionLoc = parsedObj.action_location; - kps.key = parsedObj.key_char; - kps.keyCode = parsedObj.key_code; - kps.recordReplaySelector = parsedObj.record_replay_selector; - kps.control = stepControl; - return kps; - default: - return new UnknownStep(parsedObj.step_id); - } - } - - constructor(type: StepType, step_id?: string) { - if (step_id) { - this.step_id = step_id; - } else { - this.step_id = uuidV4(); - } - this.action_type = type; - this.style_classes = []; - this.action_location = ''; - this.record_replay_selector = {}; - this.control = { - control_id: { id: '', use: false }, - control_type: '', - }; - } - - toString(): string { - return JSON.stringify(this); - } - - equalsTo(other: Step): boolean { - return ( - this.controlId.trim() === other.controlId.trim() && - this.actionLoc.trim() === other.actionLoc.trim() - ); - } - - addStyleClass(cls: string): void { - this.style_classes.push(cls); - } - - applyPreSelection() { - if (this.recordReplaySelector['id']) { - this.control.control_id.use = true; - return; - } - - if (this.recordReplaySelector['properties']) { - const props = this.record_replay_selector['properties']; - Object.keys(props).forEach((k) => { - const p = this.control.properties?.find((att) => att.name === k); - if (p) { - p.use = true; - } - }); - } - - if (this.recordReplaySelector['bindingPath']) { - const path = this.recordReplaySelector['bindingPath']; - this.control.bindings?.forEach((b) => { - if (b.propertyPath === path.propertyPath) { - b.use = true; - } - }); - } - - if (this.recordReplaySelector['i18NText']) { - const propName = this.recordReplaySelector['i18NText'].propertyName; - this.control.i18nTexts?.forEach((it) => { - if (it.propertyName === propName) { - it.use = true; - } - }); - } - } - - public get stepId() { - return '' + this.step_id; - } - - public get useControlId(): boolean { - return this.control.control_id.use; - } - - public set useControlId(value: boolean) { - this.control.control_id.use = value; - } - - get actionType(): StepType { - return this.action_type; - } - - set actionType(type: StepType) { - this.action_type = type; - } - - set controlId(id: string) { - this.control.control_id = { id: id, use: false }; - if (!id.startsWith('__')) { - this.control.control_id.use = true; - } - } - - get controlId(): string { - return this.control.control_id.id; - } - - set styleClasses(classes: string[]) { - this.style_classes = classes; - } - - get styleClasses(): string[] { - return this.style_classes.filter((sc) => sc !== 'injectClass'); - } - - set actionLoc(loc: string) { - this.action_location = loc; - } - - get actionLoc(): string { - return this.action_location; - } - - set controlType(type: string) { - this.control.control_type = type; - } - - get controlType(): string { - return this.control.control_type; - } - - set controlAttributes( - attributes: { name: string; value: any; use: boolean }[] - ) { - this.control.properties = attributes; - } - - get controlAttributes(): { name: string; value: any; use: boolean }[] { - if (this.control.properties) { - return this.control.properties; - } else { - return []; - } - } - - set controlBindings( - bindings: { - propertyName: string; - bindingValue: any; - modelPath: string; - propertyPath: string; - modelName: string; - use: boolean; - }[] - ) { - this.control.bindings = bindings; - } - - get controlBindings(): { - propertyName: string; - bindingValue: any; - modelPath: string; - propertyPath: string; - modelName: string; - use: boolean; - }[] { - if (this.control.bindings) { - return this.control.bindings; - } else { - return []; - } - } - - set controlI18nTexts( - texts: { - propertyName: string; - propertyPath: string; - bindingValue: any; - use: boolean; - }[] - ) { - this.control.i18nTexts = texts; - } - - get controlI18nTexts(): { - propertyName: string; - propertyPath: string; - bindingValue: any; - use: boolean; - }[] { - if (this.control.i18nTexts) { - return this.control.i18nTexts; - } else { - return []; - } - } - - set recordReplaySelector(selector: { [key: string]: any }) { - this.record_replay_selector = selector; - } - - get recordReplaySelector(): { [key: string]: any } { - return this.record_replay_selector; - } -} - -export class ClickStep extends Step { - constructor(step_id?: string) { - super(StepType.Click, step_id); - } -} - -export class ValidationStep extends Step { - constructor(step_id?: string) { - super(StepType.Validation, step_id); - } -} - -export class KeyPressStep extends Step { - private key_char: string; - private key_code: number; - - constructor(k?: string, c?: number, step_id?: string) { - if (k && k.length > 1) { - super(StepType.KeyPress, k); - } else { - super(StepType.KeyPress, step_id); - } - this.key_char = k || ''; - this.key_code = c || -1; - } - - set key(s: string) { - this.key_char = s; - } - - get key(): string { - return this.key_char; - } - - set keyCode(c: number) { - this.key_code = c; - } - - get keyCode(): number { - return this.key_code; - } -} - -export class InputStep extends Step { - private keys: KeyPressStep[]; - - constructor(step_id?: string) { - super(StepType.Input, step_id); - this.keys = []; - } - - get steps(): KeyPressStep[] { - return this.keys; - } - - public addStep(step: KeyPressStep) { - this.keys.push(step); - } - - public getResultText(): string { - const sb: string[] = []; - this.keys.forEach((k) => { - if (k.keyCode !== 20 && k.keyCode !== 8) { - sb.push(k.key || ''); - } else if (k.keyCode === 8) { - sb.pop(); - } - }); - return sb.join(''); - } -} - -export class UnknownStep extends Step { - constructor(step_id?: string) { - super(StepType.Unknown, step_id); - } -} diff --git a/app2/src/app/classes/StringBuilder.ts b/app2/src/app/classes/StringBuilder.ts deleted file mode 100644 index 43cdb0f0..00000000 --- a/app2/src/app/classes/StringBuilder.ts +++ /dev/null @@ -1,128 +0,0 @@ -export default class StringBuilder { - private _parts: string[]; - - constructor(startValue?: string) { - this._parts = []; - if (startValue) { - this._parts.push(startValue); - } - } - - /** - * Adds a string as part of the whole final string build up. - */ - public add(text: string): this { - if (typeof text !== 'undefined' && text !== '') { - //added "" + just to ensure it is a string for further actions - this._parts.push('' + text); - } - return this; - } - - public addBuilder(builder: StringBuilder): this { - this._parts = [...this._parts, ...builder.getTokensCopy()]; - return this; - } - - public remove(times?: number): this { - if (times) { - this._parts = this._parts.splice(0, this._parts.length - times); - } else { - this._parts.pop(); - } - return this; - } - - /** - * Add multiple string parts to the whole final string build. - */ - public addMultiple( - items: string[], - separator?: string, - afterEach?: string | ((t: any) => this) - ): this { - const sep = separator ? separator : ''; - items.forEach((a, i, arr) => { - this.add(a); - if (i < arr.length - 1) { - this.add(sep); - if (afterEach && typeof afterEach === 'string') { - this.add(afterEach); - } - } - }); - return this; - } - - /** - * Add one ore more tabs depending on user purpose - */ - public addTab(times?: number): this { - if (times) { - this._parts.push(Array(times + 1).join('\t')); - } else { - this._parts.push('\t'); - } - return this; - } - - /** - * Add one ore more new line on user purpose - */ - public addNewLine(times?: number): this { - if (times) { - this._parts.push(Array(times + 1).join('\n')); - } else { - this._parts.push('\n'); - } - return this; - } - - /** - * Replace text for a specific text token, identified by index - * - * @param target the target signs to replace - * @param replacement the string added as replacement - * @param [index] the index of the text token to replace the text, if not assigned it uses the last token - * - * @returns {com.ui5.testing.util.StringBuilder} self reference for chaining - */ - public replace( - target: string | RegExp, - replacement: string, - index?: number - ): this { - const repl = replacement ? replacement : ''; - index = index ? index : this._parts.length - 1; - if (index < 0) { - return this; - } - this._parts[index] = this._parts[index].replace(target, repl); - return this; - } - //#endregion - //#region no chaining methods - - /** - * Returns the number of already added text token. - * - * @returns the number of text tokens - */ - public getNumberOfTextToken(): number { - return this._parts.length; - } - - public getTokensCopy(): string[] { - return [...this._parts]; - } - - /** - * Simple to string method to return the string out of all parts - * - * @returns the final string - */ - public toString(): string { - return this._parts.join(''); - } - //#endregion -} diff --git a/app2/src/app/classes/interfaces.ts b/app2/src/app/classes/interfaces.ts deleted file mode 100644 index 0fcd3904..00000000 --- a/app2/src/app/classes/interfaces.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface Stringify { - toString(): string; -} - -export interface Equals { - equalsTo(other: T): boolean; -} diff --git a/app2/src/app/classes/requestBuilder.ts b/app2/src/app/classes/requestBuilder.ts deleted file mode 100644 index 22dc5845..00000000 --- a/app2/src/app/classes/requestBuilder.ts +++ /dev/null @@ -1,81 +0,0 @@ -export enum RequestMethod { - POST = 'POST', - GET = 'GET', -} - -export type Request = { - url: string; - method: RequestMethod; - body?: { [key: string]: any }; - message_id?: number; -}; - -export class RequestBuilder { - private _method?: RequestMethod; - private _url?: string; - private _body?: { [key: string]: any }; - private _searchParams: { [key: string]: string } = {}; - private _pathParams: { [key: string]: string } = {}; - constructor() {} - - public setMethod(type: RequestMethod): this { - this._method = type; - return this; - } - - public setUrl(url: string): this { - this._url = url; - return this; - } - - public setBody(b: { [key: string]: any }): this { - this._body = b; - return this; - } - - public addSearchParam(key: string, value: string): this { - this._searchParams[key] = value; - return this; - } - - public addPathParam(key: string, value: string): this { - this._pathParams[key] = value; - return this; - } - - public build(): Request { - if (!this._url) { - throw Error('no url provided, cannot build request'); - } - - if (!this._method) { - throw Error('no method provided, cannot build request'); - } - - let url = this._url; - Object.keys(this._pathParams).forEach((k: string) => { - url = url.replace(`:${k}`, this._pathParams[k]); - }); - - if (Object.keys(this._searchParams).length !== 0) { - url = url + '?'; - url = - url + - Object.keys(this._searchParams) - .map((k: string) => { - if (this._searchParams[k].trim() !== '') { - return `${k}=${this._searchParams[k]}`; - } else { - return `${k}`; - } - }) - .join('&'); - } - - return { - url: url, - method: this._method, - body: this._body, - }; - } -} diff --git a/app2/src/app/classes/testScenario.ts b/app2/src/app/classes/testScenario.ts deleted file mode 100644 index a3db79c2..00000000 --- a/app2/src/app/classes/testScenario.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { Stringify } from './interfaces'; -import { Step } from './Step'; - -export type Key = { - key: string; - keyCode: number; -}; - -export class TestScenario implements Stringify { - private scenario_id: string; - private created: number; - private edited: number; - private pages: Page[]; - private scenario_name: string; - private ui5_version: string; - - constructor(id: string, timestamp?: number) { - this.created = timestamp || -1; - this.edited = timestamp || -1; - this.pages = []; - this.scenario_id = id; - this.scenario_name = ''; - this.ui5_version = ''; - } - - public addPage(p: Page) { - this.pages.push(p); - } - - public get id(): string { - return this.scenario_id; - } - - public get testPages(): Page[] { - return this.pages; - } - - public get creationDate(): number { - return this.created; - } - - public set latestEdit(le: number) { - this.edited = le; - } - - public get latestEdit(): number { - return this.edited; - } - - public get startUrl(): string { - return this.pages.length === 0 ? '' : this.pages[0].location; - } - - public get name(): string { - return this.scenario_name; - } - - public set name(n: string) { - this.scenario_name = n; - } - - public get version(): string { - return this.ui5_version; - } - - public set version(version: string) { - this.ui5_version = version; - } - - toString(): string { - return JSON.stringify(this); - } - - public static fromJSON(json: string): TestScenario { - const parsedObj = JSON.parse(json); - const testScen = new TestScenario(parsedObj.scenario_id, parsedObj.created); - testScen.latestEdit = parsedObj.edited; - testScen.name = parsedObj.scenario_name; - testScen.version = parsedObj.ui5_version; - - if (parsedObj.pages) { - parsedObj.pages.forEach((p: any) => { - testScen.addPage(Page.fromJSON(JSON.stringify(p))); - }); - } - return testScen; - } -} - -export class Page implements Stringify { - private page_id: string = ''; - private page_location: string = ''; - private page_steps: Step[] = []; - private view_information: { - absoluteViewName: string; - relativeViewName: string; - } = { - absoluteViewName: '', - relativeViewName: '', - }; - - constructor(id: string) { - this.page_id = id; - } - - toString(): string { - return JSON.stringify(this); - } - - get id(): string { - return this.page_id; - } - - set location(loc: string) { - this.page_location = loc; - } - - set view(v: { absoluteViewName: string; relativeViewName: string }) { - this.view_information = v; - } - - get location(): string { - return this.page_location; - } - - get steps(): Step[] { - return this.page_steps; - } - - get view(): { absoluteViewName: string; relativeViewName: string } { - return this.view_information; - } - - public addStep(s: Step) { - this.page_steps.push(s); - } - - public static fromJSON(json: string): Page { - const parsedObj = JSON.parse(json); - const page = new Page(parsedObj.page_id); - page.location = parsedObj.page_location; - page.view = parsedObj.view_information; - - if (parsedObj.page_steps) { - parsedObj.page_steps.forEach((s: any) => { - page.addStep(Step.fromJSON(JSON.stringify(s))); - }); - } - return page; - } -} diff --git a/app2/src/app/components/app-footer/app-footer.component.html b/app2/src/app/components/app-footer/app-footer.component.html deleted file mode 100644 index 107ecf37..00000000 --- a/app2/src/app/components/app-footer/app-footer.component.html +++ /dev/null @@ -1,7 +0,0 @@ -
-
- link - - link_off -
-
diff --git a/app2/src/app/components/app-footer/app-footer.component.scss b/app2/src/app/components/app-footer/app-footer.component.scss deleted file mode 100644 index 77f2020b..00000000 --- a/app2/src/app/components/app-footer/app-footer.component.scss +++ /dev/null @@ -1,44 +0,0 @@ -footer { - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: center; - height: 2rem; - position: absolute; - bottom: 0; - - .connection-indicator { - width: 2rem; - height: 2rem; - border-top-right-radius: 1rem; - - &.loading { - background-color: rgb(255, 217, 0); - } - &.connected { - background-color: rgb(0, 179, 0); - } - &.disconnected, - .null { - background-color: rgb(211, 4, 4); - } - - mat-icon { - margin: 0.2rem; - } - } - - > :host ::ng-deep mat-spinner { - width: 24px; - height: 24px; - - > svg { - width: 24px; - height: 24px; - - > circle { - stroke: black; - } - } - } -} diff --git a/app2/src/app/components/app-footer/app-footer.component.ts b/app2/src/app/components/app-footer/app-footer.component.ts deleted file mode 100644 index 3ef0036f..00000000 --- a/app2/src/app/components/app-footer/app-footer.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component } from '@angular/core'; -import { AppFooterService } from './app-footer.service'; - -@Component({ - selector: 'app-footer', - templateUrl: './app-footer.component.html', - styleUrls: ['./app-footer.component.scss'], -}) -export class AppFooterComponent { - constructor(public footerService: AppFooterService) {} -} diff --git a/app2/src/app/components/app-footer/app-footer.service.ts b/app2/src/app/components/app-footer/app-footer.service.ts deleted file mode 100644 index f0bfaab7..00000000 --- a/app2/src/app/components/app-footer/app-footer.service.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ApplicationRef, Injectable } from '@angular/core'; -import { BehaviorSubject, Subject } from 'rxjs'; - -export enum LoadStatus { - LOADING = 'loading', - DISCONNECTED = 'disconnected', - CONNECTED = 'connected', -} - -@Injectable({ - providedIn: 'root', -}) -export class AppFooterService { - public loadingIndicatorSource = new BehaviorSubject( - LoadStatus.DISCONNECTED - ); - - public connected() { - this.loadingIndicatorSource.next(LoadStatus.CONNECTED); - } - public disconnected() { - this.loadingIndicatorSource.next(LoadStatus.DISCONNECTED); - } - public connecting() { - this.loadingIndicatorSource.next(LoadStatus.LOADING); - } -} diff --git a/app2/src/app/components/app-header/app-header.component.html b/app2/src/app/components/app-header/app-header.component.html deleted file mode 100644 index 7729c1ac..00000000 --- a/app2/src/app/components/app-header/app-header.component.html +++ /dev/null @@ -1,25 +0,0 @@ -
- -
-
- -
-
- icon -

- -
-
- -
- -
-
- -
-
-
diff --git a/app2/src/app/components/app-header/app-header.component.scss b/app2/src/app/components/app-header/app-header.component.scss deleted file mode 100644 index 31b4e3f0..00000000 --- a/app2/src/app/components/app-header/app-header.component.scss +++ /dev/null @@ -1,24 +0,0 @@ -.front-container { - display: flex; - flex-direction: row; - align-items: center; -} - -.action-container { - color: #868282; -} - -.header-title { - display: flex; - height: 100%; - flex-direction: row; - align-items: center; -} - -.header-title > img { - height: 3em; -} - -.header-title > * { - margin-right: 0.3rem; -} diff --git a/app2/src/app/components/app-header/app-header.component.ts b/app2/src/app/components/app-header/app-header.component.ts deleted file mode 100644 index 2f8fbcb0..00000000 --- a/app2/src/app/components/app-header/app-header.component.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - AfterContentInit, - Component, - ContentChildren, - Input, - OnInit, - QueryList, - TemplateRef, -} from '@angular/core'; -import { MatDialog as MatDialog, MatDialogConfig as MatDialogConfig } from '@angular/material/dialog'; -import { AppTemplateDirective } from 'src/app/directives/app-template.directive'; -import { SettingsDialogComponent } from '../dialogs/settings-dialog/settings-dialog.component'; -import { AppHeaderService } from './app-header.service'; -@Component({ - selector: 'app-header', - templateUrl: './app-header.component.html', - styleUrls: ['./app-header.component.scss'], -}) -export class AppHeaderComponent implements AfterContentInit { - actionButtonsTemplate: TemplateRef | null = null; - titleContentTemplate: TemplateRef | null = null; - - @Input('title') title?: string; - @Input('icon') icon?: string; - - @ContentChildren(AppTemplateDirective) - templates?: QueryList; - - constructor( - public appHeaderService: AppHeaderService, - private dialog: MatDialog - ) {} - - ngAfterContentInit() { - this.templates?.forEach((item) => { - switch (item.getType()) { - case 'actionButtons': - this.actionButtonsTemplate = item.template; - break; - case 'titleContent': - this.titleContentTemplate = item.template; - break; - } - }); - } - - navBack() { - this.appHeaderService.navigateBackwards(); - } - - openSettingsDialog() { - this.dialog.open(SettingsDialogComponent, { - disableClose: true, - closeOnNavigation: false, - }); - } -} diff --git a/app2/src/app/components/app-header/app-header.service.ts b/app2/src/app/components/app-header/app-header.service.ts deleted file mode 100644 index ddfac5ce..00000000 --- a/app2/src/app/components/app-header/app-header.service.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Injectable } from '@angular/core'; -import { BehaviorSubject } from 'rxjs'; -import { Location } from '@angular/common'; -import { NavigationEnd, Router } from '@angular/router'; -import { filter } from 'rxjs'; - -@Injectable({ - providedIn: 'root', -}) -export class AppHeaderService { - public showBackButton$ = new BehaviorSubject(false); - - private customTarget: string | null = null; - - constructor(private _location: Location, private router: Router) { - this.router.events - .pipe(filter((e) => e instanceof NavigationEnd)) - .subscribe(() => { - this.customTarget = null; - }); - } - - public showBack() { - this.showBackButton$.next(true); - } - - public hideBack() { - this.showBackButton$.next(false); - } - - public setCustomBackUrl(target: string): void { - this.customTarget = target; - } - - public navigateBackwards(): void { - if (this.customTarget === null) { - this._location.back(); - } else { - this.router.navigate([this.customTarget]); - } - } -} diff --git a/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.html b/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.html deleted file mode 100644 index fa8984e7..00000000 --- a/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.html +++ /dev/null @@ -1,17 +0,0 @@ -
- {{this.icon}} -

{{this.title}}

-
-
-

{{this.description}}

-

- - {{this.confirmText}} - -

-
-
- - -
diff --git a/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.scss b/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.scss deleted file mode 100644 index c9aa9f1c..00000000 --- a/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.scss +++ /dev/null @@ -1,11 +0,0 @@ -.error{ - color: rgb(202, 93, 93); -} - -.warning { - color: rgb(255, 170, 0); -} - -.title { - padding-left: 1rem; -} \ No newline at end of file diff --git a/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.ts b/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.ts deleted file mode 100644 index 7732fe8f..00000000 --- a/app2/src/app/components/dialogs/confirm-dialog/confirm-dialog.component.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Component, Inject } from '@angular/core'; -import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; - -@Component({ - selector: 'app-confirm-dialog', - templateUrl: './confirm-dialog.component.html', - styleUrls: ['./confirm-dialog.component.scss'], -}) -export class ConfirmDialogComponent { - title: string = ''; - description: string = ''; - icon?: string; - severity: string = ''; - withConfirmOption?: boolean; - optionChecked: boolean = false; - confirmText: string = ''; - constructor( - private ref: MatDialogRef, - @Inject(MAT_DIALOG_DATA) - public data: { - summary: string; - detail: string; - icon?: string; - severity?: string; - withConfOption?: boolean; - confText?: string; - defaultConfirmValue?: boolean; - } - ) { - this.title = data.summary; - this.description = data.detail; - this.icon = data.icon; - this.severity = data.severity || ''; - this.withConfirmOption = data.withConfOption || false; - this.confirmText = data.confText || ''; - this.optionChecked = data.defaultConfirmValue || false; - } - - close() { - this.ref.close({ confirmOption: this.optionChecked }); - } -} diff --git a/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.html b/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.html deleted file mode 100644 index d7593238..00000000 --- a/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.html +++ /dev/null @@ -1,47 +0,0 @@ -
- settings -

Settings

-
-
- - - General - - Page reload at - inject - - - - - Replay - -
- Start in - manual mode -
- - - 0.5 sec - 1 sec - 2 sec - -
-
-
- - - Code - - - Framework - - {{lang.name}} - - - -
-
- - -
diff --git a/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.scss b/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.scss deleted file mode 100644 index e236ff75..00000000 --- a/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.scss +++ /dev/null @@ -1,26 +0,0 @@ -.mat-mdc-dialog-content.settings-dialog-content { - padding: 1rem; - - > .mat-expansion-panel:not([class*=mat-elevation-z]) { - box-shadow: none; - - .mat-expansion-panel-header[aria-disabled="true"] { - .mat-expansion-panel-header-title { - color: rgba(0, 0, 0, 0.87); - } - } - } -} -.radioBox { - display: flex; - flex-direction: column; - margin-top: 1rem; - - > mat-radio-group.radioGroup { - display: flex; - flex-direction: column; - > * { - margin: 0.5rem; - } - } -} diff --git a/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.ts b/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.ts deleted file mode 100644 index 74659a52..00000000 --- a/app2/src/app/components/dialogs/settings-dialog/settings-dialog.component.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { MatCheckboxChange as MatCheckboxChange } from '@angular/material/checkbox'; -import { MatDialogRef as MatDialogRef } from '@angular/material/dialog'; -import { MatRadioChange as MatRadioChange } from '@angular/material/radio'; -import { MatSelectChange as MatSelectChange } from '@angular/material/select'; -import { CodeStyles } from 'src/app/scenario/codeService/codeService.service'; -import { - AppSettings, - SettingsStorageService, -} from 'src/app/services/localStorageService/settingsStorageService.service'; - -@Component({ - selector: 'app-settings-dialog', - templateUrl: './settings-dialog.component.html', - styleUrls: ['./settings-dialog.component.scss'], -}) -export class SettingsDialogComponent implements OnInit { - settings?: AppSettings; - - codeLanguages = [ - { name: 'OPA5', value: CodeStyles.OPA5 }, - { name: 'Wdi5', value: CodeStyles.WDI5 }, - ]; - - constructor( - private ref: MatDialogRef, - private settingsService: SettingsStorageService - ) {} - - ngOnInit() { - this.settings = this.settingsService.settings; - } - - close() { - this.settingsService.save(this.settings).then((r: AppSettings) => { - this.settings = r; - this.ref.close(); - }); - } - - languageChanged(event: MatSelectChange): void { - if (!this.settings) { - this.settings = SettingsStorageService.getDefaults(); - } - this.settings.codeStyle = event.value; - } - - reloadChanged(event: MatCheckboxChange): void { - if (!this.settings) { - this.settings = SettingsStorageService.getDefaults(); - } - this.settings.reloadPageDefault = event.checked; - } - - manualReplayChanged(event: MatCheckboxChange): void { - if (!this.settings) { - this.settings = SettingsStorageService.getDefaults(); - } - this.settings.manualReplayMode = event.checked; - } - - replayDelayChanged(event: MatRadioChange): void { - if (!this.settings) { - this.settings = SettingsStorageService.getDefaults(); - } - this.settings.replayDelay = Number(event.value); - } -} diff --git a/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.html b/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.html deleted file mode 100644 index 4fedfd9a..00000000 --- a/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.html +++ /dev/null @@ -1,13 +0,0 @@ -
- {{icon}} -
- {{title}} -
-

{{description}} -

-
- -
diff --git a/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.scss b/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.scss deleted file mode 100644 index bf2818bf..00000000 --- a/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.scss +++ /dev/null @@ -1,91 +0,0 @@ -.mat-mdc-snack-bar-container.app-snack-class { - background: white; - border-radius: 10px; - box-shadow: none; - padding: 0; - .mdc-snackbar__surface { - background-color: white; - border-radius: 10px; - } -} - -.container { - background: transparent; - box-shadow: 0px 3px 5px -1px rgb(0 0 0 / 20%), - 0px 6px 10px 0px rgb(0 0 0 / 14%), 0px 1px 18px 0px rgb(0 0 0 / 12%); - padding: 1rem; - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: center; - color: #0000008f; - border-radius: 10px; - margin: -1rem; - - &.error { - background: rgb(181 71 71 / 63%); - box-shadow: 0px 3px 5px -1px rgb(181 71 71 / 63%), - 0px 6px 10px 0px rgb(181 71 71 / 63%), - 0px 1px 18px 0px rgb(181 71 71 / 63%); - } - - &.success { - background: rgb(78 181 71 / 63%); - box-shadow: 0px 3px 5px -1px rgb(78 181 71 / 63%), - 0px 6px 10px 0px rgb(78 181 71 / 63%), - 0px 1px 18px 0px rgb(78 181 71 / 63%); - } - - &.warning { - background: rgb(181 166 71 / 63%); - box-shadow: 0px 3px 5px -1px rgb(181 166 71 / 63%), - 0px 6px 10px 0px rgb(181 166 71 / 63%), - 0px 1px 18px 0px rgb(181 166 71 / 63%); - } - - mat-icon { - margin: 0.2rem 0.4rem 0.2rem -0.3rem; - height: 36px; - width: 36px; - font-size: 36px; - } - - button { - position: absolute; - top: 0; - right: 0; - width: 30px; - height: 30px; - line-height: 30px; - - mat-icon.close-icon { - height: 24px; - width: 24px; - font-size: 24px; - margin: auto; - } - } - - .text { - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - width: 80%; - - span.title { - font-weight: bold; - font-size: calc(1.2 * 1rem); - } - - hr { - width: 90%; - margin: 0.2rem auto; - border: 1px solid; - } - - p { - font-style: italic; - } - } -} \ No newline at end of file diff --git a/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.ts b/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.ts deleted file mode 100644 index aded1eb4..00000000 --- a/app2/src/app/components/dialogs/snack-dialog/snack-dialog.component.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Component, Inject, ViewEncapsulation } from '@angular/core'; -import { - MatSnackBarRef, - MAT_SNACK_BAR_DATA, -} from '@angular/material/snack-bar'; - -export enum SnackSeverity { - INFO = 'info', - WARNING = 'warning', - ERROR = 'error', - SUCCESS = 'success', -} - -@Component({ - selector: 'app-snack-dialog', - templateUrl: './snack-dialog.component.html', - styleUrls: ['./snack-dialog.component.scss'], - encapsulation: ViewEncapsulation.None, -}) -export class SnackDialogComponent { - title: string = ''; - description: string = ''; - severity: string = ''; - icon: string = ''; - - constructor( - @Inject(MAT_SNACK_BAR_DATA) - data: { - severity?: SnackSeverity; - title: string; - detail?: string; - icon?: string; - }, - public ref: MatSnackBarRef - ) { - this.title = data.title; - this.description = data?.detail ? data.detail : ''; - this.icon = ''; - if (data?.icon || data?.severity) { - if (data?.icon) { - this.icon = data?.icon; - } else if (data?.severity) { - switch (data.severity) { - case SnackSeverity.SUCCESS: { - this.icon = 'check'; - break; - } - case SnackSeverity.WARNING: { - this.icon = 'warning'; - break; - } - case SnackSeverity.ERROR: { - this.icon = 'report'; - break; - } - case SnackSeverity.INFO: { - this.icon = 'info'; - break; - } - default: { - this.icon = ''; - } - } - } - } - this.severity = data?.severity ? data?.severity : ''; - } -} diff --git a/app2/src/app/components/globalSpinner/globalSpinner.component.scss b/app2/src/app/components/globalSpinner/globalSpinner.component.scss deleted file mode 100644 index 00778895..00000000 --- a/app2/src/app/components/globalSpinner/globalSpinner.component.scss +++ /dev/null @@ -1,60 +0,0 @@ -.cssload-container { - position: fixed; - width: 100%; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: rgba(255, 255, 255, 0.7); - z-index: 9999; -} - -.spinner-container { - background: white; - width: 100px; - height: 100px; - position: absolute; - left: 48%; - top: 40%; - display: flex; - border-radius: 50%; - box-shadow: 0 0 33px 13px white; -} - -.spinner { - width: 50px; - height: 50px; - display: grid; - border: 4px solid #0000; - border-radius: 50%; - border-color: #ccc #0000; - animation: spinnerFrame 1s infinite linear; - margin: auto; - - &::before { - border-color: #1973B4 rgba(0, 0, 0, 0); - animation: inherit; - animation-duration: 0.5s; - animation-direction: reverse; - content: ""; - grid-area: 1/1; - margin: 2px; - border-radius: 50%; - border-width: 4px; - border-style: solid; - } - - &::after { - margin: 8px; - content: ""; - grid-area: 1/1; - border: inherit; - border-radius: 50%; - } -} - -@keyframes spinnerFrame { - 100% { - transform: rotate(1turn); - } -} diff --git a/app2/src/app/components/globalSpinner/globalSpinner.component.ts b/app2/src/app/components/globalSpinner/globalSpinner.component.ts deleted file mode 100644 index 921773b6..00000000 --- a/app2/src/app/components/globalSpinner/globalSpinner.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Component } from '@angular/core'; -import { LoaderService } from 'src/app/services/loaderService/loaderService'; - -@Component({ - selector: 'app-spinner', - template: ` -
-
-
-
-
- `, - styleUrls: ['./globalSpinner.component.scss'], -}) -export class GlobalSpinnerComponent { - constructor(public loadService: LoaderService) {} -} diff --git a/app2/src/app/directives/app-template.directive.ts b/app2/src/app/directives/app-template.directive.ts deleted file mode 100644 index e027cb0d..00000000 --- a/app2/src/app/directives/app-template.directive.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Directive, Input, TemplateRef } from '@angular/core'; - -@Directive({ - selector: '[appTemplate]', - host: {}, -}) -export class AppTemplateDirective { - @Input('appTemplate') name?: string; - - constructor(public template: TemplateRef) {} - - getType(): string { - return this.name || ''; - } -} diff --git a/app2/src/app/pages/main/main.component.html b/app2/src/app/pages/main/main.component.html deleted file mode 100644 index 8ecf5188..00000000 --- a/app2/src/app/pages/main/main.component.html +++ /dev/null @@ -1,76 +0,0 @@ - - -
- - Search - - - - -
- - - -
- - -
- - Search - - - - -
- - - - - - -
-
-
\ No newline at end of file diff --git a/app2/src/app/pages/main/main.component.scss b/app2/src/app/pages/main/main.component.scss deleted file mode 100644 index ad5d2494..00000000 --- a/app2/src/app/pages/main/main.component.scss +++ /dev/null @@ -1,32 +0,0 @@ - -.list-header { - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid lightgray; - - .header-search { - width: 80%; - } - - ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled) { - background: transparent; - .mat-mdc-form-field-focus-overlay { - opacity: 0; - background: transparent; - } - } -} - -.list-item { - border: none; - border-bottom: 2px solid lightgray; - - &:hover { - background-color: lightgray; - } - - &:active { - background-color: gray; - } -} diff --git a/app2/src/app/pages/main/main.component.spec.ts b/app2/src/app/pages/main/main.component.spec.ts deleted file mode 100644 index a4eaa377..00000000 --- a/app2/src/app/pages/main/main.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MainComponent } from './main.component'; - -describe('MainComponent', () => { - let component: MainComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ MainComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(MainComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/app2/src/app/pages/main/main.component.ts b/app2/src/app/pages/main/main.component.ts deleted file mode 100644 index aa963080..00000000 --- a/app2/src/app/pages/main/main.component.ts +++ /dev/null @@ -1,237 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { - ChromeExtensionService, - Page, -} from 'src/app/services/chromeExtensionService/chrome_extension_service'; -//#region prime-ng -import { ActivatedRoute, Router } from '@angular/router'; -import { TestScenario } from 'src/app/classes/testScenario'; -import { ScenarioService } from 'src/app/services/scenarioService/scenario.service'; -import { AppHeaderService } from 'src/app/components/app-header/app-header.service'; -import { MessageService } from 'src/app/services/messageService/message.service'; -import { SnackSeverity } from 'src/app/components/dialogs/snack-dialog/snack-dialog.component'; -import { SettingsStorageService } from 'src/app/services/localStorageService/settingsStorageService.service'; -import { LoaderService } from 'src/app/services/loaderService/loaderService'; -//#endregion - -@Component({ - selector: 'app-main', - templateUrl: './main.component.html', - styleUrls: ['./main.component.scss'], -}) -export class MainComponent implements OnInit { - @Input() - public replay: boolean = false; - - raw_elements: Page[] = []; - elements: Page[] = []; - raw_scenarios: TestScenario[] = []; - scenarios: TestScenario[] = []; - - selected_row: Page | undefined; - - searchValueTabs: string = ''; - searchValueScenarios: string = ''; - - private tabIndex: number = 0; - private timerIndex: number = 0; - - constructor( - private chr_ext_srv: ChromeExtensionService, - private messageService: MessageService, - private router: Router, - private activatedRoute: ActivatedRoute, - private appHeaderService: AppHeaderService, - public scenarioService: ScenarioService, - private settingsService: SettingsStorageService, - private loaderService: LoaderService - ) {} - - public async ngOnInit(): Promise { - this.appHeaderService.hideBack(); - await this.loadTabs(); - await this.loadScenarios(); - this.timerIndex = setInterval( - this.loadTabs.bind(this), - 3000 //refresh every 3sec - ) as unknown as number; - } - - connect_to_page(page: Page | undefined) { - if (page) { - this.messageService.confirm({ - icon: 'login', - title: 'Connect to Page', - message: 'Connect to the page and inject analytic scripts?', - withConfOption: true, - confText: 'Reload Page', - defaultConfirmValue: this.settingsService.pageReload, - accept: (values) => { - this.loaderService.startLoading(); - this.chr_ext_srv.setCurrentPage(page); - this.chr_ext_srv - .connectToCurrentPage(values['confirmOption']) - .then(() => { - this.chr_ext_srv.focus_page(page).then(() => { - this.loaderService.endLoading(); - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Injection', - detail: 'Connection established!', - }); - - this.router.navigate(['scenario/recording'], { - relativeTo: this.activatedRoute, - }); - }); - }) - .catch(() => { - this.loaderService.endLoading(); - this.messageService.show({ - severity: SnackSeverity.ERROR, - title: 'Injection', - detail: 'Connection could not established!', - }); - }); - }, - }); - } - } - - refresh_table() { - this.loadTabs(); - } - - checkKeyPress(event: any, page: Page | undefined) { - if (event.code === 'Space' || event.code === 'Enter') { - this.connect_to_page(page); - } - } - - searchChange(searchString: string) { - if (this.tabIndex === 1) { - this.filterScenarios(searchString); - } else if (this.tabIndex === 0) { - this.filterTabs(searchString); - } - } - - removeScenario(scen: TestScenario) { - this.scenarioService.deleteScenario(scen).then(() => { - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Remove', - detail: 'Journey deleted!', - }); - this.loadScenarios(); - }); - } - - openExisting(scenario: TestScenario): void { - this.router.navigate(['scenario/scenarioDetail', scenario.id]); - } - - importScenario() { - this.loaderService.startLoading(); - const input = document.createElement('input'); - input.type = 'file'; - input.accept = '.json'; - input.addEventListener('change', ($event: Event) => { - const files = ($event.currentTarget as HTMLInputElement).files; - const reader = new FileReader(); - reader.onload = (input) => { - const content = input.target?.result as string; - if (content) { - this.importFinished(JSON.parse(content)); - } - }; - if (files) { - reader.readAsText(files[0]); - } - }); - input.click(); - input.remove(); - } - - private loadTabs(): Promise { - return ChromeExtensionService.get_all_tabs().then((tabs: Page[]) => { - this.raw_elements = tabs; - this.filterTabs(''); - return tabs; - }); - } - - private filterScenarios(search: string) { - if (!search) { - this.scenarios = this.raw_scenarios.map((el) => el); - } - const parts = search.split(' '); - let intermediateResult = this.raw_scenarios; - for (let part of parts) { - intermediateResult = this.raw_scenarios.filter((el) => { - return el.startUrl.includes(part) || el.name.includes(part); - }); - } - this.scenarios = intermediateResult; - } - - private filterTabs(search: string) { - if (!search) { - this.elements = this.raw_elements.map((el) => el); - } - const parts = search.split(' '); - let intermediateResult = this.raw_elements; - for (let part of parts) { - intermediateResult = this.raw_elements.filter((el) => { - return el.path.includes(part) || el.title.includes(part); - }); - } - this.elements = intermediateResult; - } - - private loadScenarios(): Promise { - return this.scenarioService.getAllScenarios().then((scenarios: TestScenario[]) => { - this.raw_scenarios = scenarios?.sort( - (sc1: TestScenario, sc2: TestScenario) => - sc2.latestEdit - sc1.latestEdit - ); - this.filterScenarios(''); - }); - } - - private async importFinished(content: { [key: string]: any }): Promise { - const scen_id = content['scenario_id']; - const scen = await this.scenarioService.getScenario(scen_id); - if (scen) { - this.loaderService.endLoading(); - this.messageService.confirm({ - severity: 'error', - icon: 'error', - title: 'Journey already exists!', - message: 'A journey with the same id already exists, override?', - accept: async () => { - await this.scenarioService.saveScenario( - TestScenario.fromJSON(JSON.stringify(content)) - ); - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Import', - detail: 'Journey imported', - }); - this.loadScenarios(); - }, - }); - } else { - await this.scenarioService.saveScenario( - TestScenario.fromJSON(JSON.stringify(content)) - ); - this.loaderService.endLoading(); - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Import', - detail: 'Journey imported', - }); - this.loadScenarios(); - } - } -} diff --git a/app2/src/app/scenario/codeService/codeService.service.ts b/app2/src/app/scenario/codeService/codeService.service.ts deleted file mode 100644 index 8f16d969..00000000 --- a/app2/src/app/scenario/codeService/codeService.service.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Step } from 'src/app/classes/Step'; -import { TestScenario } from 'src/app/classes/testScenario'; -import OPA5CodeStrategy from './strategies/opa5/OPA5CodeStrategy'; -import Wdi5CodeStrategy from './strategies/wdi5/Wdi5CodeStrategy'; -import Wdi5SingleStepStrategy from './strategies/wdi5/Wdi5SingleStepStrategy'; - -export enum CodeStyles { - OPA5 = 'OPA5', - WDI5 = 'wdi5', - UNDEFINDED = 'UNDEFINED', -} - -export type CodeOptions = { - style: CodeStyles; -}; - -export enum PageType { - JOURNEY = 'journey', - PAGE = 'page', -} - -@Injectable({ - providedIn: 'root', -}) -export class CodeService { - public static generateScenarioCode( - scenario: TestScenario, - options?: CodeOptions - ): { title: string; code: string; type: 'journey' | 'page' }[] { - const lang = options?.style || CodeStyles.UNDEFINDED; - switch (lang) { - case CodeStyles.OPA5: - return new OPA5CodeStrategy().generateTestCode(scenario); - case CodeStyles.WDI5: - return new Wdi5CodeStrategy().generateTestCode(scenario); - default: - return []; - } - } - - public static generateStepCode( - testStep: Step, - options?: CodeOptions - ): string { - const lang = options?.style || CodeStyles.UNDEFINDED; - switch (lang) { - case CodeStyles.OPA5: - return new OPA5CodeStrategy().generateStepCode(testStep); - case CodeStyles.WDI5: - return new Wdi5CodeStrategy().generateStepCode(testStep); - default: - return ''; - } - } - - public static generatePagedStepCode( - testStep: Step, - options?: CodeOptions - ): string { - const lang = options?.style || CodeStyles.UNDEFINDED; - switch (lang) { - case CodeStyles.OPA5: - return new OPA5CodeStrategy().generatePagedStepCode(testStep); - case CodeStyles.WDI5: - return new Wdi5CodeStrategy().generatePagedStepCode(testStep); - default: - return ''; - } - } -} diff --git a/app2/src/app/scenario/codeService/strategies/StrategyInterface.ts b/app2/src/app/scenario/codeService/strategies/StrategyInterface.ts deleted file mode 100644 index c9c451d0..00000000 --- a/app2/src/app/scenario/codeService/strategies/StrategyInterface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Step } from 'src/app/classes/Step'; -import { TestScenario } from 'src/app/classes/testScenario'; - -export default interface CodeStrategy { - generateTestCode(scenario: TestScenario): any[]; - generateStepCode(step: Step): string; - generatePagedStepCode(step: Step, viewName?: string): string; -} diff --git a/app2/src/app/scenario/codeService/strategies/opa5/CommonPageBuilder.ts b/app2/src/app/scenario/codeService/strategies/opa5/CommonPageBuilder.ts deleted file mode 100644 index 71129f62..00000000 --- a/app2/src/app/scenario/codeService/strategies/opa5/CommonPageBuilder.ts +++ /dev/null @@ -1,1063 +0,0 @@ -import StringBuilder from 'src/app/classes/StringBuilder'; -import { AdderOptions, PageBuilder } from './PageBuilder'; - -export default class CommonPageBuilder extends PageBuilder { - private _bindMatcher: boolean; - private _i18nMatcher: boolean; - private _attMatcher: boolean; - private _parentMatcher: boolean; - private _aggEmptyMatcher: boolean; - private _aggFilledMatcher: boolean; - private _aggCountMatcher: boolean; - private _pressAction: boolean; - private _enterTextAction: boolean; - - constructor(namespace: string, viewName: string, baseClass: string) { - super(namespace, viewName, baseClass); - this._bindMatcher = false; - this._i18nMatcher = false; - this._attMatcher = false; - this._parentMatcher = false; - this._aggEmptyMatcher = false; - this._aggFilledMatcher = false; - this._aggCountMatcher = false; - this._pressAction = false; - this._enterTextAction = false; - } - - override _adder(type: string, options: AdderOptions): this { - this._bindMatcher = options['binding'] ? true : this._bindMatcher; - this._i18nMatcher = options['i18n'] ? true : this._i18nMatcher; - this._attMatcher = options['attribute'] ? true : this._attMatcher; - this._parentMatcher = - options && options['parent'] ? true : this._parentMatcher; - - this._aggEmptyMatcher = - options && options['aggEmpty'] ? true : this._aggEmptyMatcher; - this._aggFilledMatcher = - options && options['aggFilled'] ? true : this._aggFilledMatcher; - this._aggCountMatcher = - options && options['aggCount'] ? true : this._aggCountMatcher; - this._pressAction = options && options['press'] ? true : this._pressAction; - this._enterTextAction = - options && options['enterText'] ? true : this._enterTextAction; - - return super._adder(type, options); - } - - public generate(): string { - var oCode = new StringBuilder('sap.ui.define([').addNewLine(); - oCode.addBuilder(this._generateDependencies()); - oCode.addTab().add('"use strict";').addNewLine(2); - oCode.addBuilder(this._addWrapParametersFunction()); - - oCode - .addTab() - .add( - 'return Opa5.extend("' + this._namespace + '..CommonPage", {' - ) - .addNewLine(); - oCode - .addTab(2) - .add('iStartTheAppByHash: function(oParameters) {') - .addNewLine(); - oCode - .addTab(3) - .add('MockServer.init(_wrapParameters(oParameters || {}));') - .addNewLine(); - oCode.addTab(3).add('this.iStartMyUIComponent({').addNewLine(); - oCode.addTab(4).add('componentConfig: {').addNewLine(); - oCode - .addTab(5) - .add('name: "' + this._namespace + '",') - .addNewLine(); - oCode.addTab(5).add('async: true').addNewLine(); - oCode.addTab(4).add('},').addNewLine(); - oCode.addTab(4).add('hash: oParameters.hash').addNewLine(); - oCode.addTab(3).add('});').addNewLine(); - oCode.addTab(2).add('},').addNewLine(2); - oCode.addTab(2).add('iTeardownTheApp: function() {').addNewLine(); - oCode.addTab(3).add('this.iTeardownMyUIComponent();').addNewLine(); - oCode.addTab(2).add('}'); - - oCode.addBuilder(this._generateActionFunctions()); - oCode.addBuilder(this._generateAssertionFunctions()); - - if (this._attMatcher) { - oCode.add(',').addNewLine(2); - oCode.addBuilder(this._addAttributeMatcherFunction()); - } - if (this._i18nMatcher) { - oCode.add(',').addNewLine(2); - oCode.addBuilder(this._addI18NMatcherFunction()); - } - if (this._bindMatcher) { - oCode.add(',').addNewLine(2); - oCode.addBuilder(this._addBindingMatcherFunction()); - } - - oCode.addNewLine(); - oCode.addTab().add('});').addNewLine(); - oCode.add('});'); - return oCode.toString(); - } - - //#region matcher adding - private _addBindingMatcherFunction(): StringBuilder { - var oFunctCode = new StringBuilder(); - oFunctCode - .addTab(2) - .add('_addBindingMatcher: function (aMatchers, aBindingInformations) {') - .addNewLine(); - oFunctCode - .addTab(3) - .add('aBindingInformations.forEach(function (oBinding) {') - .addNewLine(); - oFunctCode.addTab(4).add('var oBindObject = {};').addNewLine(); - oFunctCode.addTab(4).add('if (oBinding.model) {').addNewLine(); - oFunctCode - .addTab(5) - .add('oBindObject.modelName = oBinding.model;') - .addNewLine(); - oFunctCode.addTab(4).add('}').addNewLine(); - oFunctCode.addTab(4).add('if (oBinding.path) {').addNewLine(); - oFunctCode.addTab(5).add('oBindObject.path = oBinding.path;').addNewLine(); - oFunctCode.addTab(4).add('}').addNewLine(); - oFunctCode.addTab(4).add('if (oBinding.propertyPath) {').addNewLine(); - oFunctCode - .addTab(5) - .add('oBindObject.propertyPath = oBinding.propertyPath;') - .addNewLine(); - oFunctCode.addTab(4).add('}').addNewLine(); - oFunctCode - .addTab(4) - .add('aMatchers.push(new BindingPath(oBindObject));') - .addNewLine(); - oFunctCode.addTab(3).add('});').addNewLine(); - oFunctCode.addTab(2).add('}'); - return oFunctCode; - } - - private _addI18NMatcherFunction(): StringBuilder { - var oFunctCode = new StringBuilder(); - oFunctCode - .addTab(2) - .add('_addI18NMatcher: function (aMatchers, aI18NInformations) {') - .addNewLine(); - oFunctCode - .addTab(3) - .add('aI18NInformations.forEach(function (oBinding) {') - .addNewLine(); - oFunctCode.addTab(4).add('var oBindObject = {};').addNewLine(); - oFunctCode.addTab(4).add('if (oBinding.key) {').addNewLine(); - oFunctCode - .addTab(5) - .add('oBindObject.modelName = oBinding.key;') - .addNewLine(); - oFunctCode.addTab(4).add('}').addNewLine(); - oFunctCode.addTab(4).add('if (oBinding.propertyName) {').addNewLine(); - oFunctCode - .addTab(5) - .add('oBindObject.path = oBinding.propertyName;') - .addNewLine(); - oFunctCode.addTab(4).add('}').addNewLine(); - oFunctCode.addTab(4).add('if (oBinding.parameters) {').addNewLine(); - oFunctCode - .addTab(5) - .add('oBindObject.propertyPath = oBinding.parameters;') - .addNewLine(); - oFunctCode.addTab(4).add('}').addNewLine(); - oFunctCode - .addTab(4) - .add('aMatchers.push(new I18NText(oBindObject));') - .addNewLine(); - oFunctCode.addTab(3).add('});').addNewLine(); - oFunctCode.addTab(2).add('}'); - return oFunctCode; - } - - private _addAttributeMatcherFunction(): StringBuilder { - var oFunctCode = new StringBuilder(); - oFunctCode - .addTab(2) - .add( - '_addAttributeMatcher: function (aMatchers, aAttributeInformations) {' - ) - .addNewLine(); - oFunctCode - .addTab(3) - .add('aAttributeInformations.forEach(function (el) {') - .addNewLine(); - oFunctCode - .addTab(4) - .add('aMatchers.push(new PropertyStrictEquals({') - .addNewLine(); - oFunctCode.addTab(5).add('name: Object.keys(el)[0],').addNewLine(); - oFunctCode.addTab(5).add('value: Object.values(el)[0]').addNewLine(); - oFunctCode.addTab(4).add('}));').addNewLine(); - oFunctCode.addTab(3).add('});').addNewLine(); - oFunctCode.addTab(2).add('}'); - return oFunctCode; - } - //#endregion - - //#region general - private _generateDependencies(): StringBuilder { - var oDependencies = new StringBuilder(); - - oDependencies.addTab().add('"sap/ui/test/Opa5",').addNewLine(); - oDependencies - .addTab() - .add('"') - .add(this._namespace.replace(/\./g, '/')) - .add('//MockServer"'); - - if (this._bindMatcher) { - oDependencies.add(',').addNewLine(); - oDependencies.addTab().add('"sap/ui/test/matchers/BindingPath"'); - } - if (this._i18nMatcher) { - oDependencies.add(',').addNewLine(); - oDependencies.addTab().add('"sap/ui/test/matchers/I18NText"'); - } - if (this._attMatcher) { - oDependencies.add(',').addNewLine(); - oDependencies.addTab().add('"sap/ui/test/matchers/PropertyStrictEquals"'); - } - if (this._aggEmptyMatcher) { - oDependencies.add(',').addNewLine(); - oDependencies.addTab().add('"sap/ui/test/matchers/AggregationEmpty"'); - } - if (this._aggFilledMatcher) { - oDependencies.add(',').addNewLine(); - oDependencies.addTab().add('"sap/ui/test/matchers/AggregationFilled"'); - } - if (this._aggCountMatcher) { - oDependencies.add(',').addNewLine(); - oDependencies - .addTab() - .add('"sap/ui/test/matchers/AggregationLengthEquals"'); - } - if (this._enterTextAction) { - oDependencies.add(',').addNewLine(); - oDependencies.addTab().add('"sap/ui/test/actions/EnterText"'); - } - if (this._pressAction) { - oDependencies.add(',').addNewLine(); - oDependencies.addTab().add('"sap/ui/test/actions/Press"'); - } - if (this._parentMatcher) { - oDependencies.add(',').addNewLine(); - oDependencies - .addTab() - .add('"') - .add(this._namespace.replace(/\./g, '/')) - .add('//customMatcher/ParentMatcher"'); - } - - oDependencies.addNewLine(); - oDependencies.add('], function(Opa5, MockServer'); - - if (this._bindMatcher) { - oDependencies.add(', BindingPath'); - } - - if (this._i18nMatcher) { - oDependencies.add(', I18NText'); - } - - if (this._attMatcher) { - oDependencies.add(', PropertyStrictEquals'); - } - - if (this._aggEmptyMatcher) { - oDependencies.add(', AggregationEmpty'); - } - - if (this._aggFilledMatcher) { - oDependencies.add(', AggregationFilled'); - } - - if (this._aggCountMatcher) { - oDependencies.add(', AggregationLengthEquals'); - } - - if (this._enterTextAction) { - oDependencies.add(', EnterText'); - } - - if (this._pressAction) { - oDependencies.add(', Press'); - } - - if (this._parentMatcher) { - oDependencies.add(', ParentMatcher'); - } - - oDependencies.add('){').addNewLine(); - return oDependencies; - } - - private _addWrapParametersFunction(): StringBuilder { - var oFunctCode = new StringBuilder(); - oFunctCode - .addTab() - .add('function _wrapParameters(oParameters) {') - .addNewLine(); - oFunctCode.addTab(2).add('return {').addNewLine(); - oFunctCode.addTab(3).add('get: function(name) {').addNewLine(); - oFunctCode - .addTab(4) - .add('return (oParameters[name] || "").toString();') - .addNewLine(); - oFunctCode.addTab(3).add('}').addNewLine(); - oFunctCode.addTab(2).add('};').addNewLine(); - oFunctCode.addTab().add('}').addNewLine(2); - return oFunctCode; - } - //#endregion - - //#region actions - private _generateActionFunctions(): StringBuilder { - var oActions = new StringBuilder(); - if (this._actions['press'].render) { - oActions.add(',').addNewLine(2); - oActions.add(this.__generatePressFunction()); - } - - if (this._actions['enterText'].render) { - oActions.add(',').addNewLine(2); - oActions.add(this.__generateEnterTextFunction()); - } - return oActions; - } - - private __generateEnterTextFunction(): string { - var oEnterText = new StringBuilder(); - oEnterText - .addTab(2) - .add('enterText: function(oActionProperties, oOptions) {') - .addNewLine(); - oEnterText.addTab(3).add('var actionObject = {};').addNewLine(); - oEnterText - .addTab(3) - .add( - 'if (oActionProperties.id) {actionObject.id = oActionProperties.id.isRegex ? oActionProperties.id.value : new RegExp(oActionProperties.id.value);}' - ) - .addNewLine(); - oEnterText - .addTab(3) - .add( - 'if (oActionProperties.controlType) {actionObject.controlType = oActionProperties.controlType;}' - ) - .addNewLine(); - oEnterText.addTab(3).add('actionObject.visible = true;').addNewLine(); - oEnterText - .addTab(3) - .add( - 'actionObject.actions = [new EnterText({text: oActionProperties.actionText})];' - ) - .addNewLine(); - oEnterText.addTab(3).add('if (oOptions.success) {').addNewLine(); - oEnterText - .addTab(4) - .add('actionObject.success = oOptions.success;') - .addNewLine(); - oEnterText.addTab(3).add('}').addNewLine(); - oEnterText.addTab(3).add('if (oOptions.errorMessage) {').addNewLine(); - oEnterText - .addTab(4) - .add('actionObject.errorMessage = oOptions.errorMessage;') - .addNewLine(); - oEnterText.addTab(3).add('}').addNewLine(2); - oEnterText.addTab(3).add('actionObject.matchers = [];').addNewLine(2); - if (this._actions['enterText'].addAttributeMatcher) { - oEnterText - .addTab(3) - .add( - 'if(oActionProperties.attributes && oActionProperties.attributes.length > 0) {' - ) - .addNewLine(); - oEnterText - .addTab(4) - .add( - 'this._addAttributeMatcher(actionObject.matchers, oActionProperties.attributes);' - ) - .addNewLine(); - oEnterText.addTab(3).add('}').addNewLine(); - } - if (this._actions['enterText'].addBindingMatcher) { - oEnterText - .addTab(3) - .add( - 'if (oActionProperties.binding && oActionProperties.binding.length > 0) {' - ) - .addNewLine(); - oEnterText - .addTab(4) - .add( - 'this._addBindingMatcher(actionObject.matchers, oActionProperties.binding);' - ) - .addNewLine(); - oEnterText.addTab(3).add('}').addNewLine(); - } - if (this._actions['enterText'].addI18NMatcher) { - oEnterText - .addTab(3) - .add( - 'if (oActionProperties.i18n && oActionProperties.i18n.length > 0) {' - ) - .addNewLine(); - oEnterText - .addTab(4) - .add( - 'this._addI18NMatcher(actionObject.matchers, oActionProperties.i18n);' - ) - .addNewLine(); - oEnterText.addTab(3).add('}').addNewLine(2); - } - if (this._actions['enterText'].addParentMatcher) { - oEnterText - .addTab(3) - .add( - 'if (oActionProperties.parent && oActionProperties.parent.length > 0) {' - ) - .addNewLine(); - oEnterText - .addTab(4) - .add( - 'this._addI18NMatcher(actionObject.matchers, oActionProperties.parent);' - ) - .addNewLine(); - oEnterText.addTab(3).add('}').addNewLine(2); - } - oEnterText.addTab(3).add('return this.waitFor(actionObject);').addNewLine(); - oEnterText.addTab(2).add('}'); - return oEnterText.toString(); - } - - private __generatePressFunction(): string { - var oPress = new StringBuilder(); - oPress - .addTab(2) - .add('press: function(oActionProperties, oOptions) {') - .addNewLine(); - oPress.addTab(3).add('var actionObject = {};').addNewLine(); - oPress - .addTab(3) - .add( - 'if (oActionProperties.id) {actionObject.id = oActionProperties.id.isRegex ? oActionProperties.id.value : new RegExp(oActionProperties.id.value);}' - ) - .addNewLine(); - oPress - .addTab(3) - .add( - 'if (oActionProperties.controlType) {actionObject.controlType = oActionProperties.controlType;}' - ) - .addNewLine(); - oPress.addTab(3).add('actionObject.visible = true;').addNewLine(); - oPress.addTab(3).add('actionObject.actions = [new Press()];').addNewLine(); - oPress.addTab(3).add('if (oOptions.success) {').addNewLine(); - oPress - .addTab(4) - .add('actionObject.success = oOptions.success;') - .addNewLine(); - oPress.addTab(3).add('}').addNewLine(); - oPress.addTab(3).add('if (oOptions.errorMessage) {').addNewLine(); - oPress - .addTab(4) - .add('actionObject.errorMessage = oOptions.errorMessage;') - .addNewLine(); - oPress.addTab(3).add('}').addNewLine(2); - oPress.addTab(3).add('actionObject.matchers = [];').addNewLine(2); - if (this._actions['press'].addAttributeMatcher) { - oPress - .addTab(3) - .add( - 'if(oActionProperties.attributes && oActionProperties.attributes.length > 0) {' - ) - .addNewLine(); - oPress - .addTab(4) - .add( - 'this._addAttributeMatcher(actionObject.matchers, oActionProperties.attributes);' - ) - .addNewLine(); - oPress.addTab(3).add('}').addNewLine(); - } - if (this._actions['press'].addBindingMatcher) { - oPress - .addTab(3) - .add( - 'if (oActionProperties.binding && oActionProperties.binding.length > 0) {' - ) - .addNewLine(); - oPress - .addTab(4) - .add( - 'this._addBindingMatcher(actionObject.matchers, oActionProperties.binding);' - ) - .addNewLine(); - oPress.addTab(3).add('}').addNewLine(); - } - if (this._actions['press'].addI18NMatcher) { - oPress - .addTab(3) - .add( - 'if (oActionProperties.i18n && oActionProperties.i18n.length > 0) {' - ) - .addNewLine(); - oPress - .addTab(4) - .add( - 'this._addI18NMatcher(actionObject.matchers, oActionProperties.i18n);' - ) - .addNewLine(); - oPress.addTab(3).add('}').addNewLine(2); - } - if (this._actions['press'].addParentMatcher) { - oPress - .addTab(3) - .add( - 'if (oActionProperties.parent && oActionProperties.parent.length > 0) {' - ) - .addNewLine(); - oPress - .addTab(4) - .add( - 'this._addI18NMatcher(actionObject.matchers, oActionProperties.parent);' - ) - .addNewLine(); - oPress.addTab(3).add('}').addNewLine(2); - } - oPress.addTab(3).add('return this.waitFor(actionObject);').addNewLine(); - oPress.addTab(2).add('}'); - return oPress.toString(); - } - //#endregion actions - - //#region assertions - private _generateAssertionFunctions(): StringBuilder { - var oAssertFunctions = new StringBuilder(); - if (this._assertions['exists'].render) { - oAssertFunctions.add(',').addNewLine(2); - oAssertFunctions.add(this._renderExistsFunction()); - } - if (this._assertions['attributes'].render) { - oAssertFunctions.add(',').addNewLine(2); - oAssertFunctions.add(this._renderAttributesFunction()); - } - if (this._assertions['aggregationEmpty'].render) { - oAssertFunctions.add(',').addNewLine(2); - oAssertFunctions.add(this._renderEmptyAggFunction()); - } - if (this._assertions['aggregationFilled'].render) { - oAssertFunctions.add(',').addNewLine(2); - oAssertFunctions.add(this._renderFilledAggFunction()); - } - if (this._assertions['aggregationCount'].render) { - oAssertFunctions.add(',').addNewLine(2); - oAssertFunctions.add(this._renderCountAggFunction()); - } - return oAssertFunctions; - } - - private _renderExistsFunction(): string { - var oExists = new StringBuilder(); - oExists - .addTab(2) - .add('thereShouldBe: function(oMatchProperties, oOptions) {') - .addNewLine(); - oExists.addTab(3).add('var checkObject = {};').addNewLine(); - oExists - .addTab(3) - .add( - 'if (oMatchProperties.id) {checkObject.id = new RegExp(oMatchProperties.id);}' - ) - .addNewLine(); - oExists - .addTab(3) - .add( - 'if (oMatchProperties.controlType) {checkObject.controlType = oMatchProperties.controlType;}' - ) - .addNewLine(2); - oExists.addTab(3).add('checkObject.visible = true;').addNewLine(); - oExists.addTab(3).add('if (oOptions.success) {').addNewLine(); - oExists - .addTab(4) - .add('checkObject.success = oOptions.success;') - .addNewLine(); - oExists.addTab(3).add('}').addNewLine(); - oExists.addTab(3).add('if (oOptions.errorMessage) {').addNewLine(); - oExists - .addTab(4) - .add('checkObject.errorMessage = oOptions.errorMessage;') - .addNewLine(); - oExists.addTab(3).add('}').addNewLine(2); - oExists.addTab(3).add('checkObject.matchers = [];').addNewLine(2); - if (this._assertions['exists'].addAttributeMatcher) { - oExists - .addTab(3) - .add( - 'if(oMatchProperties.attributes && oMatchProperties.attributes.length > 0) {' - ) - .addNewLine(); - oExists - .addTab(4) - .add( - 'this._addAttributeMatcher(checkObject.matchers, oMatchProperties.attributes);' - ) - .addNewLine(); - oExists.addTab(3).add('}').addNewLine(); - } - if (this._assertions['exists'].addBindingMatcher) { - oExists - .addTab(3) - .add( - 'if (oMatchProperties.binding && oMatchProperties.binding.length > 0) {' - ) - .addNewLine(); - oExists - .addTab(4) - .add( - 'this._addBindingMatcher(checkObject.matchers, oMatchProperties.binding);' - ) - .addNewLine(); - oExists.addTab(3).add('}').addNewLine(); - } - if (this._assertions['exists'].addI18NMatcher) { - oExists - .addTab(3) - .add('if (oMatchProperties.i18n && oMatchProperties.i18n.length > 0) {') - .addNewLine(); - oExists - .addTab(4) - .add( - 'this._addI18NMatcher(checkObject.matchers, oMatchProperties.i18n);' - ) - .addNewLine(); - oExists.addTab(3).add('}').addNewLine(2); - } - if (this._assertions['exists'].addParentMatcher) { - oExists - .addTab(3) - .add( - 'if (oMatchProperties.parent && oMatchProperties.parent.length > 0) {' - ) - .addNewLine(); - oExists - .addTab(4) - .add( - 'this._addParentMatcher(checkObject.matchers, oMatchProperties.parent);' - ) - .addNewLine(); - oExists.addTab(3).add('}').addNewLine(2); - } - oExists.addTab(3).add('return this.waitFor(checkObject);').addNewLine(); - oExists.addTab(2).add('}'); - - return oExists.toString(); - } - - private _renderAttributesFunction(): string { - var oAttributes = new StringBuilder(); - oAttributes - .addTab(2) - .add('hasAttributes: function(oMatchProperties, oOptions) {') - .addNewLine(); - oAttributes.addTab(3).add('var checkObject = {};').addNewLine(); - oAttributes - .addTab(3) - .add( - 'if (oMatchProperties.id) {checkObject.id = new RegExp(oMatchProperties.id);}' - ) - .addNewLine(); - oAttributes - .addTab(3) - .add( - 'if (oMatchProperties.controlType) {checkObject.controlType = oMatchProperties.controlType;}' - ) - .addNewLine(2); - oAttributes.addTab(3).add('checkObject.visible = true;').addNewLine(); - oAttributes.addTab(3).add('if (oOptions.success) {').addNewLine(); - oAttributes - .addTab(4) - .add('checkObject.success = oOptions.success;') - .addNewLine(); - oAttributes.addTab(3).add('}').addNewLine(); - oAttributes.addTab(3).add('if (oOptions.errorMessage) {').addNewLine(); - oAttributes - .addTab(4) - .add('checkObject.errorMessage = oOptions.errorMessage;') - .addNewLine(); - oAttributes.addTab(3).add('}').addNewLine(2); - oAttributes.addTab(3).add('checkObject.matchers = [];').addNewLine(2); - if (this._assertions['attributes'].addAttributeMatcher) { - oAttributes - .addTab(3) - .add( - 'if(oMatchProperties.attributes && oMatchProperties.attributes.length > 0) {' - ) - .addNewLine(); - oAttributes - .addTab(4) - .add( - 'this._addAttributeMatcher(checkObject.matchers, oMatchProperties.attributes);' - ) - .addNewLine(); - oAttributes.addTab(3).add('}').addNewLine(); - } - if (this._assertions['attributes'].addBindingMatcher) { - oAttributes - .addTab(3) - .add( - 'if (oMatchProperties.binding && oMatchProperties.binding.length > 0) {' - ) - .addNewLine(); - oAttributes - .addTab(4) - .add( - 'this._addBindingMatcher(checkObject.matchers, oMatchProperties.binding);' - ) - .addNewLine(); - oAttributes.addTab(3).add('}').addNewLine(); - } - if (this._assertions['attributes'].addI18NMatcher) { - oAttributes - .addTab(3) - .add('if (oMatchProperties.i18n && oMatchProperties.i18n.length > 0) {') - .addNewLine(); - oAttributes - .addTab(4) - .add( - 'this._addI18NMatcher(checkObject.matchers, oMatchProperties.i18n);' - ) - .addNewLine(); - oAttributes.addTab(3).add('}').addNewLine(2); - } - if (this._assertions['attributes'].addParentMatcher) { - oAttributes - .addTab(3) - .add( - 'if (oMatchProperties.parent && oMatchProperties.parent.length > 0) {' - ) - .addNewLine(); - oAttributes - .addTab(4) - .add( - 'this._addParentMatcher(checkObject.matchers, oMatchProperties.parent);' - ) - .addNewLine(); - oAttributes.addTab(3).add('}').addNewLine(2); - } - oAttributes.addTab(3).add('return this.waitFor(checkObject);').addNewLine(); - oAttributes.addTab(2).add('}'); - - return oAttributes.toString(); - } - - private _renderEmptyAggFunction(): string { - var oAggEmpty = new StringBuilder(); - oAggEmpty - .addTab(2) - .add('aggregationEmpty: function(oMatchProperties, oOptions) {') - .addNewLine(); - oAggEmpty.addTab(3).add('var checkObject = {};').addNewLine(); - oAggEmpty - .addTab(3) - .add( - 'if (oMatchProperties.id) {checkObject.id = new RegExp(oMatchProperties.id);}' - ) - .addNewLine(); - oAggEmpty - .addTab(3) - .add( - 'if (oMatchProperties.controlType) {checkObject.controlType = oMatchProperties.controlType;}' - ) - .addNewLine(2); - oAggEmpty.addTab(3).add('checkObject.visible = true;').addNewLine(); - oAggEmpty.addTab(3).add('if (oOptions.success) {').addNewLine(); - oAggEmpty - .addTab(4) - .add('checkObject.success = oOptions.success;') - .addNewLine(); - oAggEmpty.addTab(3).add('}').addNewLine(); - oAggEmpty.addTab(3).add('if (oOptions.errorMessage) {').addNewLine(); - oAggEmpty - .addTab(4) - .add('checkObject.errorMessage = oOptions.errorMessage;') - .addNewLine(); - oAggEmpty.addTab(3).add('}').addNewLine(2); - oAggEmpty.addTab(3).add('checkObject.matchers = [];').addNewLine(2); - if (this._assertions['aggregationEmpty'].addAttributeMatcher) { - oAggEmpty - .addTab(3) - .add( - 'if(oMatchProperties.attributes && oMatchProperties.attributes.length > 0) {' - ) - .addNewLine(); - oAggEmpty - .addTab(4) - .add( - 'this._addAttributeMatcher(checkObject.matchers, oMatchProperties.attributes);' - ) - .addNewLine(); - oAggEmpty.addTab(3).add('}').addNewLine(); - } - if (this._assertions['aggregationEmpty'].addBindingMatcher) { - oAggEmpty - .addTab(3) - .add( - 'if (oMatchProperties.binding && oMatchProperties.binding.length > 0) {' - ) - .addNewLine(); - oAggEmpty - .addTab(4) - .add( - 'this._addBindingMatcher(checkObject.matchers, oMatchProperties.binding);' - ) - .addNewLine(); - oAggEmpty.addTab(3).add('}').addNewLine(); - } - if (this._assertions['aggregationEmpty'].addI18NMatcher) { - oAggEmpty - .addTab(3) - .add('if (oMatchProperties.i18n && oMatchProperties.i18n.length > 0) {') - .addNewLine(); - oAggEmpty - .addTab(4) - .add( - 'this._addI18NMatcher(checkObject.matchers, oMatchProperties.i18n);' - ) - .addNewLine(); - oAggEmpty.addTab(3).add('}').addNewLine(2); - } - if (this._assertions['aggregationEmpty'].addParentMatcher) { - oAggEmpty - .addTab(3) - .add( - 'if (oMatchProperties.parent && oMatchProperties.parent.length > 0) {' - ) - .addNewLine(); - oAggEmpty - .addTab(4) - .add( - 'this._addParentMatcher(checkObject.matchers, oMatchProperties.parent);' - ) - .addNewLine(); - oAggEmpty.addTab(3).add('}').addNewLine(2); - } - oAggEmpty.addTab(3).add('checkObject.matchers.push(').addNewLine(); - oAggEmpty.addTab(4).add('new AggregationEmpty({').addNewLine(); - oAggEmpty.addTab(5).add('name: oMatchProperties.aggName').addNewLine(); - oAggEmpty.addTab(4).add('}));').addNewLine(); - oAggEmpty.addTab(3).add('return this.waitFor(checkObject);').addNewLine(); - oAggEmpty.addTab(2).add('}'); - - return oAggEmpty.toString(); - } - - private _renderFilledAggFunction(): string { - var oAggFilled = new StringBuilder(); - oAggFilled - .addTab(2) - .add('aggregationFilled: function(oMatchProperties, oOptions) {') - .addNewLine(); - oAggFilled.addTab(3).add('var checkObject = {};').addNewLine(); - oAggFilled - .addTab(3) - .add( - 'if (oMatchProperties.id) {checkObject.id = new RegExp(oMatchProperties.id);}' - ) - .addNewLine(); - oAggFilled - .addTab(3) - .add( - 'if (oMatchProperties.controlType) {checkObject.controlType = oMatchProperties.controlType;}' - ) - .addNewLine(2); - oAggFilled.addTab(3).add('checkObject.visible = true;').addNewLine(); - oAggFilled.addTab(3).add('if (oOptions.success) {').addNewLine(); - oAggFilled - .addTab(4) - .add('checkObject.success = oOptions.success;') - .addNewLine(); - oAggFilled.addTab(3).add('}').addNewLine(); - oAggFilled.addTab(3).add('if (oOptions.errorMessage) {').addNewLine(); - oAggFilled - .addTab(4) - .add('checkObject.errorMessage = oOptions.errorMessage;') - .addNewLine(); - oAggFilled.addTab(3).add('}').addNewLine(2); - oAggFilled.addTab(3).add('checkObject.matchers = [];').addNewLine(2); - if (this._assertions['aggregationFilled'].addAttributeMatcher) { - oAggFilled - .addTab(3) - .add( - 'if(oMatchProperties.attributes && oMatchProperties.attributes.length > 0) {' - ) - .addNewLine(); - oAggFilled - .addTab(4) - .add( - 'this._addAttributeMatcher(checkObject.matchers, oMatchProperties.attributes);' - ) - .addNewLine(); - oAggFilled.addTab(3).add('}').addNewLine(); - } - if (this._assertions['aggregationFilled'].addBindingMatcher) { - oAggFilled - .addTab(3) - .add( - 'if (oMatchProperties.binding && oMatchProperties.binding.length > 0) {' - ) - .addNewLine(); - oAggFilled - .addTab(4) - .add( - 'this._addBindingMatcher(checkObject.matchers, oMatchProperties.binding);' - ) - .addNewLine(); - oAggFilled.addTab(3).add('}').addNewLine(); - } - if (this._assertions['aggregationFilled'].addI18NMatcher) { - oAggFilled - .addTab(3) - .add('if (oMatchProperties.i18n && oMatchProperties.i18n.length > 0) {') - .addNewLine(); - oAggFilled - .addTab(4) - .add( - 'this._addI18NMatcher(checkObject.matchers, oMatchProperties.i18n);' - ) - .addNewLine(); - oAggFilled.addTab(3).add('}').addNewLine(2); - } - if (this._assertions['aggregationFilled'].addParentMatcher) { - oAggFilled - .addTab(3) - .add( - 'if (oMatchProperties.parent && oMatchProperties.parent.length > 0) {' - ) - .addNewLine(); - oAggFilled - .addTab(4) - .add( - 'this._addParentMatcher(checkObject.matchers, oMatchProperties.parent);' - ) - .addNewLine(); - oAggFilled.addTab(3).add('}').addNewLine(2); - } - oAggFilled.addTab(3).add('checkObject.matchers.push(').addNewLine(); - oAggFilled.addTab(4).add('new AggregationFilled({').addNewLine(); - oAggFilled.addTab(5).add('name: oMatchProperties.aggName').addNewLine(); - oAggFilled.addTab(4).add('}));').addNewLine(); - oAggFilled.addTab(3).add('return this.waitFor(checkObject);').addNewLine(); - oAggFilled.addTab(2).add('}'); - - return oAggFilled.toString(); - } - - private _renderCountAggFunction(): string { - var oAggCount = new StringBuilder(); - oAggCount - .addTab(2) - .add('aggregationCount: function(oMatchProperties, oOptions) {') - .addNewLine(); - oAggCount.addTab(3).add('var checkObject = {};').addNewLine(); - oAggCount - .addTab(3) - .add( - 'if (oMatchProperties.id) {checkObject.id = new RegExp(oMatchProperties.id);}' - ) - .addNewLine(); - oAggCount - .addTab(3) - .add( - 'if (oMatchProperties.controlType) {checkObject.controlType = oMatchProperties.controlType;}' - ) - .addNewLine(2); - oAggCount.addTab(3).add('checkObject.visible = true;').addNewLine(); - oAggCount.addTab(3).add('if (oOptions.success) {').addNewLine(); - oAggCount - .addTab(4) - .add('checkObject.success = oOptions.success;') - .addNewLine(); - oAggCount.addTab(3).add('}').addNewLine(); - oAggCount.addTab(3).add('if (oOptions.errorMessage) {').addNewLine(); - oAggCount - .addTab(4) - .add('checkObject.errorMessage = oOptions.errorMessage;') - .addNewLine(); - oAggCount.addTab(3).add('}').addNewLine(2); - oAggCount.addTab(3).add('checkObject.matchers = [];').addNewLine(2); - if (this._assertions['aggregationCount'].addAttributeMatcher) { - oAggCount - .addTab(3) - .add( - 'if(oMatchProperties.attributes && oMatchProperties.attributes.length > 0) {' - ) - .addNewLine(); - oAggCount - .addTab(4) - .add( - 'this._addAttributeMatcher(checkObject.matchers, oMatchProperties.attributes);' - ) - .addNewLine(); - oAggCount.addTab(3).add('}').addNewLine(); - } - if (this._assertions['aggregationCount'].addBindingMatcher) { - oAggCount - .addTab(3) - .add( - 'if (oMatchProperties.binding && oMatchProperties.binding.length > 0) {' - ) - .addNewLine(); - oAggCount - .addTab(4) - .add( - 'this._addBindingMatcher(checkObject.matchers, oMatchProperties.binding);' - ) - .addNewLine(); - oAggCount.addTab(3).add('}').addNewLine(); - } - if (this._assertions['aggregationCount'].addI18NMatcher) { - oAggCount - .addTab(3) - .add('if (oMatchProperties.i18n && oMatchProperties.i18n.length > 0) {') - .addNewLine(); - oAggCount - .addTab(4) - .add( - 'this._addI18NMatcher(checkObject.matchers, oMatchProperties.i18n);' - ) - .addNewLine(); - oAggCount.addTab(3).add('}').addNewLine(2); - } - if (this._assertions['aggregationCount'].addParentMatcher) { - oAggCount - .addTab(3) - .add( - 'if (oMatchProperties.parent && oMatchProperties.parent.length > 0) {' - ) - .addNewLine(); - oAggCount - .addTab(4) - .add( - 'this._addParentMatcher(checkObject.matchers, oMatchProperties.parent);' - ) - .addNewLine(); - oAggCount.addTab(3).add('}').addNewLine(2); - } - oAggCount.addTab(3).add('checkObject.matchers.push(').addNewLine(); - oAggCount.addTab(4).add('new AggregationLengthEquals({').addNewLine(); - oAggCount.addTab(5).add('name: oMatchProperties.aggName,').addNewLine(); - oAggCount.addTab(5).add('length: oMatchProperties.count').addNewLine(); - oAggCount.addTab(4).add('}));').addNewLine(); - oAggCount.addTab(3).add('return this.waitFor(checkObject);').addNewLine(); - oAggCount.addTab(2).add('}'); - - return oAggCount.toString(); - } - //#endregion -} diff --git a/app2/src/app/scenario/codeService/strategies/opa5/OPA5CodeStrategy.ts b/app2/src/app/scenario/codeService/strategies/opa5/OPA5CodeStrategy.ts deleted file mode 100644 index 75a0a869..00000000 --- a/app2/src/app/scenario/codeService/strategies/opa5/OPA5CodeStrategy.ts +++ /dev/null @@ -1,415 +0,0 @@ -import { match } from 'assert'; -import { InputStep, Step, StepType } from 'src/app/classes/Step'; -import StringBuilder from 'src/app/classes/StringBuilder'; -import { Page, TestScenario } from 'src/app/classes/testScenario'; -import CodeStrategy from '../StrategyInterface'; -import CommonPageBuilder from './CommonPageBuilder'; -import OPA5SingleStepStrategy from './OPA5SingleStepStrategy'; -import ViewPageBuilder from './ViewPageBuilder'; - -export default class OPA5CodeStrategy implements CodeStrategy { - private _pages: { [key: string]: any } = {}; - - public generateTestCode(scenario: TestScenario): any[] { - const codes: any[] = []; - const jurney: { [key: string]: any } = { - title: '', - content: [], - }; - - this._pages['Common'] = new CommonPageBuilder('', '', ''); - - scenario.testPages.forEach((p: Page) => { - this._pages[p.view.relativeViewName] = new ViewPageBuilder(p); - }); - - //(2) execute script - jurney['title'] = scenario.name.replace(/\s/gm, '_'); - - this._setupHeader(jurney); - - /* this._createConstants(scenario.testPages); */ - - jurney['content'].push( - new StringBuilder() - .addNewLine() - .addTab() - .add('QUnit.module("') - .add(scenario.name) - .add('");') - .addNewLine(2) - .toString() - ); - - this._createAppStartStep(jurney, scenario); - - jurney['content'].push(this._createTestSteps(scenario)); - - this._createAppCloseStep(jurney); - - jurney['content'].push('});'); - - jurney['code'] = jurney['content'].reduce( - (a: string, b: string) => `${a}${b}`, - '' - ); - jurney['type'] = 'journey'; - - codes.push(jurney); - const posNamespace = Object.values(this._pages) - .map((p) => p.namespace) - .filter((n) => n !== '')[0]; - if (posNamespace) { - this._pages['Common'].namespace = posNamespace; - } - Object.entries(this._pages).forEach((entry: [string, any]) => { - var oCode = { - title: `${entry[0]}-Page`, - code: entry[1].generate(), - type: 'page', - }; - codes.push(oCode); - }); - - return codes; - } - - public generateStepCode(step: Step): string { - switch (step.actionType) { - case StepType.Click: - return OPA5SingleStepStrategy.generateSinglePressStep(step); - case StepType.Validation: - return OPA5SingleStepStrategy.generateSingleValidateStep(step); - case StepType.Input: - return OPA5SingleStepStrategy.generateSingleEnterTextStep( - step as InputStep - ); - default: - return 'Unknown StepType'; - } - } - - public generatePagedStepCode( - step: Step, - viewName: string = '' - ): string { - switch (step.actionType) { - case StepType.Click: - return this._createClickStep(step, viewName); - case StepType.Validation: - return this._createValidateStep(step, viewName); - case StepType.Input: - return this._createInputStep(step as InputStep, viewName); - default: - return ''; - } - } - - private _createAppCloseStep(jurney: { [key: string]: any }) { - var oCloseStep = new StringBuilder(); - oCloseStep - .addNewLine() - .addTab(2) - .add('Given.iTeardownTheApp();') - .addNewLine() - .addTab() - .add('});') - .addNewLine(); - jurney['content'].push(oCloseStep.toString()); - } - - private _createTestSteps(scenario: TestScenario) { - const pages = scenario.testPages; - const steps = new StringBuilder(); - pages.forEach((page: Page) => { - page.steps.forEach((step: Step) => { - const stepCode = this.generatePagedStepCode( - step, - page.view.relativeViewName - ); - if (stepCode) { - steps.add(stepCode); - steps.addNewLine(); - } - }); - }); - return steps.toString(); - } - - private _createAppStartStep( - jurney: { [key: string]: any }, - scenario: TestScenario - ) { - var startStep = new StringBuilder(); - startStep - .addTab() - .add('opaTest("') - .add(scenario.name) - .add('", function(Given, When, Then) {') - .addNewLine(); - var sNavHash = ''; - if (scenario.startUrl.indexOf('#') > -1) { - sNavHash = scenario.startUrl.substring( - scenario.startUrl.indexOf('#') + 1 - ); - } - startStep - .addTab(2) - .add('Given.iStartTheAppByHash({hash: "') - .add(sNavHash) - .add('"});') - .addNewLine(2); - - jurney['content'].push(startStep.toString()); - } - - private _setupHeader(jurney: { [key: string]: any }) { - var oCode = new StringBuilder('sap.ui.define(['); - oCode.addNewLine().addTab().add('"sap/ui/test/Opa5",'); - oCode.addNewLine().addTab().add('"sap/ui/test/opaQunit"'); - oCode.addNewLine().add('], function (Opa5, opaTest) {'); - oCode.addNewLine().addTab().add('"use strict";'); - oCode.addNewLine(); - jurney['content'].push(oCode.toString()); - } - - private _createClickStep( - step: Step, - viewName: string = '' - ): string { - var sb = new StringBuilder(); - sb.addTab(2).add('When.on').add(viewName).add('.pressOn({'); - - var usedMatchers: { [key: string]: any } = {}; - if (step.useControlId) { - sb.add(`id: {value: "${step.controlId}",isRegex: true}`).add(','); - usedMatchers['press'] = true; - } - - const elementMatcher = this._createObjectMatcherInfos(step, sb); - if (Object.keys(elementMatcher).length === 0) { - sb.remove(); - } - usedMatchers = { - ...usedMatchers, - ...elementMatcher, - }; - - if (step.useControlId || Object.keys(elementMatcher).length > 0) { - this._pages[viewName]?.addPressAction(usedMatchers); - this._pages['Common']?.addPressAction(usedMatchers); - } - - sb.add('});'); - return sb.toString(); - } - - private _createInputStep( - step: InputStep, - viewName: string = '' - ): string { - var sb = new StringBuilder(); - sb.addTab(2).add('When.on').add(viewName).add('.inputTextInto({'); - - var usedMatchers: { [key: string]: any } = {}; - if (step.useControlId) { - sb.add(`id: {value: "${step.controlId}",isRegex: true}`).add(','); - usedMatchers['enterText'] = true; - } - - const elementMatcher = this._createObjectMatcherInfos(step, sb); - if (Object.keys(elementMatcher).length === 0) { - sb.remove(); - } - usedMatchers = { - ...usedMatchers, - ...elementMatcher, - }; - - if (step.useControlId || Object.keys(elementMatcher).length > 0) { - this._pages[viewName]?.addEnterTextAction(usedMatchers); - this._pages['Common']?.addEnterTextAction(usedMatchers); - } - - sb.add('}, '); - sb.add(`"${step.getResultText()}"`); - sb.add(');'); - return sb.toString(); - } - - private _createValidateStep( - step: Step, - viewName: string = '' - ): string { - const validate = new StringBuilder(); - validate.addTab(2).add('Then.on').add(viewName).add('.thereShouldBe({'); - var usedMatchers: { [key: string]: any } = {}; - if (step.useControlId) { - validate.add(`id: {value: "${step.controlId}",isRegex: true}`).add(','); - } - - const elementMatcher = this._createObjectMatcherInfos(step, validate); - if (Object.keys(elementMatcher).length === 0) { - validate.remove(); - } - usedMatchers = { - ...usedMatchers, - ...elementMatcher, - }; - - if (step.useControlId || Object.keys(elementMatcher).length > 0) { - this._pages[viewName]?.addValidationStep(usedMatchers); - this._pages['Common']?.addValidationStep(usedMatchers); - } - - validate.add('});'); - return validate.toString(); - } - - private _createObjectMatcherInfos( - step: Step, - sb: StringBuilder - ): { [key: string]: any } { - const matcherAttributes = step.controlAttributes - .filter((att) => att.use) - .map(this._createAttributeValue.bind(this)); - - const bindingsAttributes = step.controlBindings - .filter((b) => b.use) - .map(this._createBindingValue.bind(this)) - .filter((bs, i, a) => a.indexOf(bs) === i); - - const i18nTexts = step.controlI18nTexts - .filter((b) => b.use) - .map(this._createI18nValue.bind(this)); - - var oReturn: { [key: string]: any } = {}; - if (matcherAttributes.length <= 2 && matcherAttributes.length > 0) { - sb.add('attributes: [').addMultiple(matcherAttributes, ', ').add(']'); - } else if (matcherAttributes.length > 0) { - sb.addNewLine(); - sb.addTab(3); - sb.add('attributes: ['); - sb.addNewLine(); - sb.addTab(4); - matcherAttributes.forEach((p: string) => { - sb.add(p); - sb.add(','); - sb.addNewLine(); - sb.addTab(4); - }); - sb.remove(); - sb.addTab(3); - sb.add(']'); - sb.addNewLine(); - sb.addTab(2); - } - - if (matcherAttributes.length > 0) { - oReturn['attribute'] = true; - } - - if (matcherAttributes.length > 0 && bindingsAttributes.length > 0) { - sb.add(','); - } - - if (bindingsAttributes.length <= 2 && bindingsAttributes.length > 0) { - sb.add('bindings: [').addMultiple(bindingsAttributes, ', ').add(']'); - } else if (bindingsAttributes.length > 0) { - sb.addNewLine(); - sb.addTab(3); - sb.add('bindings: ['); - sb.addNewLine(); - sb.addTab(4); - bindingsAttributes.forEach((p: string) => { - sb.add(p); - sb.add(','); - sb.addNewLine(); - sb.addTab(4); - }); - sb.remove(); - sb.addTab(3); - sb.add(']'); - sb.addNewLine(); - sb.addTab(2); - } - if (bindingsAttributes.length > 0) { - oReturn['binding'] = true; - } - - if ( - (matcherAttributes.length > 0 || bindingsAttributes.length > 0) && - i18nTexts.length > 0 - ) { - sb.add(','); - } - - if (i18nTexts.length <= 2 && i18nTexts.length > 0) { - sb.add('i18n: [').addMultiple(i18nTexts, ', ').add(']'); - } else if (i18nTexts.length > 0) { - sb.addNewLine(); - sb.addTab(3); - sb.add('i18n: ['); - sb.addNewLine(); - sb.addTab(4); - i18nTexts.forEach((p: string) => { - sb.add(p); - sb.add(','); - sb.addNewLine(); - sb.addTab(4); - }); - sb.remove(); - sb.addTab(3); - sb.add(']'); - sb.addNewLine(); - sb.addTab(2); - } - if (i18nTexts.length > 0) { - oReturn['i18n'] = true; - } - - return oReturn; - } - - private _createAttributeValue(e: { - name: string; - value: any; - use: boolean; - }): string { - var value = e.value; - - if (typeof value === 'boolean') { - value = Boolean(value); - } else if (typeof value === 'number') { - value = Number(value); - } else { - value = this._sanatize(e.value); - } - - return '{' + e.name + ': ' + value + '}'; - } - - private _createBindingValue(e: { - propertyName: string; - bindingValue: string | number | boolean; - modelPath: string; - propertyPath: string; - modelName: string; - use: boolean; - }): string { - return `{path: "${e.modelPath}", modelName: ${e.modelName}, propertyPath: "${e.propertyPath}}"`; - } - - private _createI18nValue(e: { - propertyName: string; - propertyPath: string; - bindingValue: any; - use: boolean; - }): string { - return `{key: "${e.propertyPath}", propertyName: "${e.propertyName}"}`; - } - - private _sanatize(s: string): string { - return `"${s}"`.trim(); - } -} diff --git a/app2/src/app/scenario/codeService/strategies/opa5/OPA5SingleStepStrategy.ts b/app2/src/app/scenario/codeService/strategies/opa5/OPA5SingleStepStrategy.ts deleted file mode 100644 index a178a9d6..00000000 --- a/app2/src/app/scenario/codeService/strategies/opa5/OPA5SingleStepStrategy.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { InputStep, Step } from 'src/app/classes/Step'; -import StringBuilder from 'src/app/classes/StringBuilder'; - -export default class OPA5SingleStepStrategy { - public static sanatize(s: any): string { - if (typeof s === 'undefined') { - return ''; - } else if (typeof s === 'string') { - return `"${s}"`.trim(); - } else { - return `${s}`; - } - } - - public static generateSinglePressStep(step: Step): string { - const click = new StringBuilder('oOpa5.waitFor({').addNewLine(); - - if (!step.controlId.startsWith('__')) { - click.addTab(1).add(`id: "${step.controlId}",`).addNewLine(); - } - - click.addTab(1).add(`controlType: "${step.controlType}",`).addNewLine(); - click.addTab(1).add(`visible: true,`).addNewLine(); - if ( - step.controlId.startsWith('__') && - (step.controlAttributes.filter((att) => att.use).length !== 0 || - step.controlBindings.filter((att) => att.use).length !== 0 || - step.controlI18nTexts.filter((att) => att.use).length !== 0) - ) { - click.addTab(1).add('matchers: [').addNewLine(); - step.controlAttributes - .filter((att) => att.use) - .forEach((att) => { - click - .addTab(2) - .add( - `new Properties({ ${att.name}: ${OPA5SingleStepStrategy.sanatize( - att.value - )}})` - ) - .add(',') - .addNewLine(); - }); - step.controlBindings - .filter((b) => b.use) - .forEach((b) => { - click - .addTab(2) - .add( - `new BindingPath({propertyPath: "${b.propertyPath}", path: "${b.modelPath}", model:` - ) - .add(b.modelName ? `"${b.modelName}"` : `${b.modelName}`) - .add('})') - .add(',') - .addNewLine(); - }); - step.controlI18nTexts - .filter((b) => b.use) - .forEach((b) => { - click - .addTab(2) - .add( - `new I18NText({key: "${b.propertyPath}", propertyName: "${b.propertyName}"})` - ) - .add(',') - .addNewLine(); - }); - click.remove(2).addNewLine(); - click.addTab(1).add('],').addNewLine(); - } - - click.addTab(1).add(`actions: new Press(),`).addNewLine(); - click.addTab(1).add(`success: function(oControl) {`).addNewLine(); - click.addTab(2).add('console.log("Yay!");').addNewLine(); - click.addTab(1).add('},').addNewLine(); - click - .addTab(1) - .add(`errorMessage: "Can not select "${step.controlType}".`) - .addNewLine(); - click.add('});'); - return click.toString(); - } - - public static generateSingleEnterTextStep(step: InputStep): string { - const click = new StringBuilder('oOpa5.waitFor({').addNewLine(); - - if (!step.controlId.startsWith('__')) { - click.addTab(1).add(`id: "${step.controlId}",`).addNewLine(); - } - - click.addTab(1).add(`controlType: "${step.controlType}",`).addNewLine(); - click.addTab(1).add(`visible: true,`).addNewLine(); - if ( - step.controlId.startsWith('__') && - (step.controlAttributes.filter((att) => att.use).length !== 0 || - step.controlBindings.filter((att) => att.use).length !== 0 || - step.controlI18nTexts.filter((att) => att.use).length !== 0) - ) { - click.addTab(1).add('matchers: [').addNewLine(); - step.controlAttributes - .filter((att) => att.use) - .forEach((att) => { - click - .addTab(2) - .add( - `new Properties({ ${att.name}: ${OPA5SingleStepStrategy.sanatize( - att.value - )}})` - ) - .add(',') - .addNewLine(); - }); - step.controlBindings - .filter((b) => b.use) - .forEach((b) => { - click - .addTab(2) - .add( - `new BindingPath({propertyPath: "${b.propertyPath}", path: "${b.modelPath}", model:` - ) - .add(b.modelName ? `"${b.modelName}"` : `${b.modelName}`) - .add('})') - .add(',') - .addNewLine(); - }); - step.controlI18nTexts - .filter((b) => b.use) - .forEach((b) => { - click - .addTab(2) - .add( - `new I18NText({key: "${b.propertyPath}", propertyName: "${b.propertyName}"})` - ) - .add(',') - .addNewLine(); - }); - click.remove(2).addNewLine(); - click.addTab(1).add('],').addNewLine(); - } - - click - .addTab(1) - .add(`actions: new EnterText({ text: "${step.getResultText()}" }),`) - .addNewLine(); - click.addTab(1).add(`success: function(oControl) {`).addNewLine(); - click.addTab(2).add('console.log("Yay!");').addNewLine(); - click.addTab(1).add('},').addNewLine(); - click - .addTab(1) - .add(`errorMessage: "Can not enter text into "${step.controlType}".`) - .addNewLine(); - click.add('});'); - return click.toString(); - } - - public static generateSingleValidateStep(step: Step): string { - const click = new StringBuilder('oOpa5.waitFor({').addNewLine(); - - if (!step.controlId.startsWith('__')) { - click.addTab(1).add(`id: "${step.controlId}",`).addNewLine(); - } - - click.addTab(1).add(`controlType: "${step.controlType}",`).addNewLine(); - click.addTab(1).add(`visible: true,`).addNewLine(); - if ( - step.controlId.startsWith('__') && - (step.controlAttributes.filter((att) => att.use).length !== 0 || - step.controlBindings.filter((att) => att.use).length !== 0 || - step.controlI18nTexts.filter((att) => att.use).length !== 0) - ) { - click.addTab(1).add('matchers: [').addNewLine(); - step.controlAttributes - .filter((att) => att.use) - .forEach((att) => { - click - .addTab(2) - .add( - `new Properties({ ${att.name}: ${OPA5SingleStepStrategy.sanatize( - att.value - )}})` - ) - .add(',') - .addNewLine(); - }); - step.controlBindings - .filter((b) => b.use) - .forEach((b) => { - click - .addTab(2) - .add( - `new BindingPath({propertyPath: "${b.propertyPath}", path: "${b.modelPath}", model:` - ) - .add(b.modelName ? `"${b.modelName}"` : `${b.modelName}`) - .add('})') - .add(',') - .addNewLine(); - }); - step.controlI18nTexts - .filter((b) => b.use) - .forEach((b) => { - click - .addTab(2) - .add( - `new I18NText({key: "${b.propertyPath}", propertyName: "${b.propertyName}"})` - ) - .add(',') - .addNewLine(); - }); - click.remove(2).addNewLine(); - click.addTab(1).add('],').addNewLine(); - } - click.addTab(1).add(`success: function() {`).addNewLine(); - click.addTab(2).add('Opa5.assert.ok(true, "Found the control at the view");').addNewLine(); - click.addTab(1).add('},').addNewLine(); - click - .addTab(1) - .add(`errorMessage: "Won't be able to find field at the view with requirements: " + JSON.stringify(oMatchProperties).`) - .addNewLine(); - click.add('});'); - return click.toString(); - } -} diff --git a/app2/src/app/scenario/codeService/strategies/opa5/PageBuilder.ts b/app2/src/app/scenario/codeService/strategies/opa5/PageBuilder.ts deleted file mode 100644 index 7498bbd5..00000000 --- a/app2/src/app/scenario/codeService/strategies/opa5/PageBuilder.ts +++ /dev/null @@ -1,177 +0,0 @@ -export type AdderOptions = { [key: string]: boolean }; - -export abstract class PageBuilder { - _namespace: string; - _viewName: string; - _baseClass: string; - _dependencies: { asyncDep: string; paramDep: string }[]; - _actions: { - [key: string]: { - render: boolean; - addBindingMatcher: boolean; - addI18NMatcher: boolean; - addAttributeMatcher: boolean; - addParentMatcher: boolean; - }; - }; - _assertions: { - [key: string]: { - render: boolean; - addBindingMatcher: boolean; - addI18NMatcher: boolean; - addAttributeMatcher: boolean; - addParentMatcher: boolean; - }; - }; - _customMatchers: { [key: string]: boolean }; - - constructor(namespace: string, viewName: string, baseClass: string) { - this._namespace = namespace ? namespace : ''; - this._viewName = viewName ? viewName : 'view1'; - this._baseClass = baseClass ? baseClass : 'Common'; - this._dependencies = [ - { - asyncDep: 'sap/ui/test/Opa5', - paramDep: 'Opa5', - }, - ]; - - this._actions = { - press: { - render: false, - addBindingMatcher: false, - addI18NMatcher: false, - addAttributeMatcher: false, - addParentMatcher: false, - }, - enterText: { - render: false, - addBindingMatcher: false, - addI18NMatcher: false, - addAttributeMatcher: false, - addParentMatcher: false, - }, - // additional feature later on could be Drag&Drop - }; - - this._assertions = { - exists: { - render: false, - addBindingMatcher: false, - addI18NMatcher: false, - addAttributeMatcher: false, - addParentMatcher: false, - }, - attributes: { - render: false, - addBindingMatcher: false, - addI18NMatcher: false, - addAttributeMatcher: false, - addParentMatcher: false, - }, - aggregationEmpty: { - render: false, - addBindingMatcher: false, - addI18NMatcher: false, - addAttributeMatcher: false, - addParentMatcher: false, - }, - aggregationFilled: { - render: false, - addBindingMatcher: false, - addI18NMatcher: false, - addAttributeMatcher: false, - addParentMatcher: false, - }, - aggregationCount: { - render: false, - addBindingMatcher: false, - addI18NMatcher: false, - addAttributeMatcher: false, - addParentMatcher: false, - }, - }; - this._customMatchers = { - parent: false, - }; - } - - //#region getter/setter - public set namespace(namespace: string) { - this._namespace = namespace; - } - - public get namespace(): string { - return this._namespace; - } - //#endregion getter/setter - - /** - * Generic settings method for the adder - * - * @returns {com.ui5.testing.model.code-generation.opa5.PageBuilder} self reference for chaining - */ - _adder(type: string, options: AdderOptions): this { - if (Object.keys(this._actions).includes(type)) { - this._actions[type].render = true; - this._actions[type].addBindingMatcher = options['binding'] - ? true - : this._actions[type].addBindingMatcher; - this._actions[type].addI18NMatcher = options['i18n'] - ? true - : this._actions[type].addI18NMatcher; - this._actions[type].addAttributeMatcher = options['attribute'] - ? true - : this._actions[type].addAttributeMatcher; - this._actions[type].addParentMatcher = options['parent'] - ? true - : this._actions[type].addParentMatcher; - } - if (Object.keys(this._assertions).includes(type)) { - this._assertions[type].render = true; - this._assertions[type].addBindingMatcher = options['binding'] - ? true - : this._assertions[type].addBindingMatcher; - this._assertions[type].addI18NMatcher = options['i18n'] - ? true - : this._assertions[type].addI18NMatcher; - this._assertions[type].addAttributeMatcher = options['attribute'] - ? true - : this._assertions[type].addAttributeMatcher; - this._assertions[type].addParentMatcher = options['parent'] - ? true - : this._assertions[type].addParentMatcher; - } - return this; - } - - public addPressAction(options: AdderOptions): this { - return this._adder('press', options); - } - - public addEnterTextAction(options: AdderOptions): this { - return this._adder('enterText', options); - } - - public addValidationStep(options: AdderOptions): this { - return this._adder('exists', options); - } - - public addAttributesCheck(options: AdderOptions): this { - return this._adder('attributes', options); - } - - public addAggregationEmptyCheck(options: AdderOptions): this { - return this._adder('aggregationEmpty', options); - } - - public addAggregationFilledCheck(options: AdderOptions): this { - return this._adder('aggregationFilled', options); - } - - public addAggregationCountCheck(options: AdderOptions): this { - return this._adder('aggregationCount', options); - } - - public abstract generate(): string; -} diff --git a/app2/src/app/scenario/codeService/strategies/opa5/ViewPageBuilder.ts b/app2/src/app/scenario/codeService/strategies/opa5/ViewPageBuilder.ts deleted file mode 100644 index 032f30c3..00000000 --- a/app2/src/app/scenario/codeService/strategies/opa5/ViewPageBuilder.ts +++ /dev/null @@ -1,201 +0,0 @@ -import StringBuilder from 'src/app/classes/StringBuilder'; -import { Page } from 'src/app/classes/testScenario'; -import { PageBuilder } from './PageBuilder'; - -export default class ViewPageBuilder extends PageBuilder { - private _page: Page; - - constructor(page: Page) { - super('', '', ''); - this._page = page; - this._namespace = ''; - this._createBaseSetup(); - } - - public generate(): string { - var code = new StringBuilder(); - code.addBuilder(this._generateDependencies()); - - code.addTab().add('"use strict";').addNewLine(2); - - code.addBuilder(this._generatePageOpener()); - - const renderActions = - Object.values(this._actions).filter((a) => a.render).length !== 0; - if (renderActions) { - code.add(',').addNewLine(); - code.addBuilder(this._generateActions()); - } - - const renderAssertions = - Object.values(this._assertions).filter((a) => a.render).length !== 0; - if (renderAssertions) { - code.add(',').addNewLine(); - code.addBuilder(this._generateAssertions()); - } - code.addNewLine(); - code.addBuilder(this._generatePageClose()); - - code.add('});'); - - return code.toString(); - } - - private _createBaseSetup() { - this._viewName = this._page.view.relativeViewName || this._viewName; - const posNamespace = this._page.view.absoluteViewName - .replace(`.${this._page.view.relativeViewName}`, '') - .replace('.view', '') - .trim(); - this._namespace = posNamespace || this._namespace; - - this._dependencies.push({ - asyncDep: `${this._namespace}//CommonPage`, - paramDep: 'CommonPage', - }); - } - - private _generateDependencies(): StringBuilder { - var dependencies = new StringBuilder('sap.ui.define([').addNewLine(); - - this._dependencies.forEach((d) => { - dependencies.addTab().add(`"${d.asyncDep}"`); - dependencies.add(',').addNewLine(); - }); - dependencies.remove(2); - dependencies.addNewLine(); - dependencies.add('], function('); - this._dependencies.forEach((d) => { - dependencies.add(d.paramDep); - dependencies.add(', '); - }); - dependencies.remove(); - dependencies.add('){').addNewLine(); - return dependencies; - } - - private _generatePageOpener(): StringBuilder { - const opener = new StringBuilder(); - opener.addTab().add('Opa5.createPageObjects({').addNewLine(); - opener.addTab(2).add(`on${this._viewName}: {`).addNewLine(); - opener.addTab(3).add(`baseClass: CommonPage,`).addNewLine(); - opener.addTab(3).add(`viewName: "${this._viewName}"`); - return opener; - } - - private _generateActions(): StringBuilder { - const actions = new StringBuilder(); - actions.addTab(3).add('actions: {').addNewLine(); - if (this._actions['press'].render) { - actions.addBuilder(this._generatePressFunction()); - } - if (this._actions['press'].render && this._actions['enterText'].render) { - actions.remove(); - actions.add(',').addNewLine(); - } - if (this._actions['enterText'].render) { - actions.addBuilder(this._generateEnterTextFunction()); - } - actions.addTab(3).add('}'); - return actions; - } - - private _generateAssertions(): StringBuilder { - const assertions = new StringBuilder(); - assertions.addTab(3).add('assertions: {').addNewLine(); - if (this._assertions['exists']?.render) { - assertions.addBuilder(this._generateValidateFunction()); - } - //@TODO: extend to get all the assertions - assertions.addTab(3).add('}'); - return assertions; - } - - private _generatePageClose(): StringBuilder { - const closing = new StringBuilder(); - closing.addTab(2).add('}').addNewLine(); - closing.addTab().add('});').addNewLine(); - return closing; - } - - private _generatePressFunction(): StringBuilder { - var click = new StringBuilder(); - click.addTab(4).add('pressOn: function(oActionProperties) {').addNewLine(); - click.addTab(5).add('return this.press(oActionProperties, {').addNewLine(); - click.addTab(6).add('success: function() {').addNewLine(); - click - .addTab(7) - .add( - `Opa5.assert.ok(true, "Could click the control at view ${this._viewName}");` - ) - .addNewLine(); - click.addTab(6).add('},').addNewLine(); - click - .addTab(6) - .add( - `errorMessage: "Won't be able to click the control at the view '${this._viewName}' with requirements: " + JSON.stringify(oActionProperties)` - ) - .addNewLine(); - click.addTab(5).add('});').addNewLine(); - click.addTab(4).add('}').addNewLine(); - return click; - } - - private _generateEnterTextFunction(): StringBuilder { - var click = new StringBuilder(); - click - .addTab(4) - .add('inputTextInto: function(oActionProperties) {') - .addNewLine(); - click - .addTab(5) - .add('return this.enterText(oActionProperties, {') - .addNewLine(); - click.addTab(6).add('success: function() {').addNewLine(); - click - .addTab(7) - .add( - `Opa5.assert.ok(true, "Could enter text at the control at view ${this._viewName}");` - ) - .addNewLine(); - click.addTab(6).add('},').addNewLine(); - click - .addTab(6) - .add( - `errorMessage: "Won't be able to enter text at the control at the view '${this._viewName}' with requirements: " + JSON.stringify(oActionProperties)` - ) - .addNewLine(); - click.addTab(5).add('});').addNewLine(); - click.addTab(4).add('}').addNewLine(); - return click; - } - - private _generateValidateFunction(): StringBuilder { - var click = new StringBuilder(); - click - .addTab(4) - .add('thereShouldBe: function(oAssertionProperties) {') - .addNewLine(); - click - .addTab(5) - .add('return this.thereShouldBe(oAssertionProperties, {') - .addNewLine(); - click.addTab(6).add('success: function() {').addNewLine(); - click - .addTab(7) - .add( - `Opa5.assert.ok(true, "Found the control at view ${this._viewName}");` - ) - .addNewLine(); - click.addTab(6).add('},').addNewLine(); - click - .addTab(6) - .add( - `errorMessage: "Won't be able to find the control at the view '${this._viewName}' with requirements: " + JSON.stringify(oAssertionProperties)` - ) - .addNewLine(); - click.addTab(5).add('});').addNewLine(); - click.addTab(4).add('}').addNewLine(); - return click; - } -} diff --git a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5CodeStrategy.ts b/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5CodeStrategy.ts deleted file mode 100644 index 01249fec..00000000 --- a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5CodeStrategy.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { InputStep, Step, StepType } from 'src/app/classes/Step'; -import { Page, TestScenario } from 'src/app/classes/testScenario'; -import CodeStrategy from '../StrategyInterface'; -import Wdi5PageBuilder from './Wdi5PageBuilder'; -import Wdi5SingleStepStrategy from './Wdi5SingleStepStrategy'; -import { PageType } from '../../codeService.service'; - -export default class Wdi5CodeStrategy implements CodeStrategy { - // we treat each "page" as part of the entire journey and slice it up accordingly - generateTestCode(scenario: TestScenario): any[] { - const codes: any[] = []; - scenario.testPages.forEach((page: Page) => { - const code = { - title: `part ${page.id} of Journey`, - code: new Wdi5PageBuilder( - page, - page.view.relativeViewName, - `#/${page.view.relativeViewName}` - ).generate(), - type: PageType.JOURNEY - }; - codes.push(code); - }); - return codes; - } - - // no difference in wdi5 btw a step in a page or a standalone step - - generateStepCode(step: Step, indent: number = 0): string { - switch (step.actionType) { - case StepType.Click: - return Wdi5SingleStepStrategy.generateSinglePressStep(step, indent); - case StepType.Validation: - return Wdi5SingleStepStrategy.generateSingleExistsStep(step, indent); - case StepType.Input: - return Wdi5SingleStepStrategy.generateSingleInputStep(step as InputStep, indent); - default: - return 'Unknown StepType'; - } - } - - // no difference in wdi5 btw a step in a page or a standalone step - generatePagedStepCode(step: Step, viewName?: string | undefined): string { - return this.generateStepCode(step); - } -} diff --git a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5IPageBuilder.ts b/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5IPageBuilder.ts deleted file mode 100644 index 8d3d556e..00000000 --- a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5IPageBuilder.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Page } from 'src/app/classes/testScenario'; - -export default abstract class Wdi5IPageBuilder { - protected _page: Page; - constructor(page: Page) { - this._page = page; - } - public abstract generate(): string; -} diff --git a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5PageBuilder.ts b/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5PageBuilder.ts deleted file mode 100644 index 74d133ea..00000000 --- a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5PageBuilder.ts +++ /dev/null @@ -1,51 +0,0 @@ -import StringBuilder from 'src/app/classes/StringBuilder'; -import { Page } from 'src/app/classes/testScenario'; -import Wdi5CodeStrategy from './Wdi5CodeStrategy'; -import Wdi5IPageBuilder from './Wdi5IPageBuilder'; -import Wdi5SingleStepStrategy from './Wdi5SingleStepStrategy'; - -export default class Wdi5PageBuilder extends Wdi5IPageBuilder { - pageName: string; - hashPath: string; - constructor(page: Page, pageName: string, hashPath: string) { - super(page); // -> this._page - this.pageName = pageName; - this.hashPath = hashPath; - } - - generate(): string { - const p = new StringBuilder(); - p.add(`const { wdi5 } = require("wdio-ui5-service");`).addNewLine(); - p.add(`class ${this.pageName} {`).addNewLine(); - - p.add(this._generateOpenMethod()); - - p.addTab().add(`async journey() {`).addNewLine(); - this._generateJourneySteps().forEach((stepCode) => { - p.add(stepCode); - p.addNewLine(); - }); - p.addTab().add(`}`).addNewLine(); - - p.add(`};`).addNewLine(); - // for easier usage at dev time: - // require $pageobject -> use as $pageobject.method() immediately - p.add(`module.exports = new ${this.pageName}();`); - return p.toString(); - } - - _generateJourneySteps(): string[] { - const stepCodes = this._page.steps.map((step) => { - return new Wdi5CodeStrategy().generateStepCode(step, 2); - }); - return stepCodes; - } - - _generateOpenMethod(): string { - const p = new StringBuilder(); - p.addTab().add(`async open() {`).addNewLine(); - p.addTab(2).add(`wdi5.goTo("${this.hashPath}")`).addNewLine(); - p.addTab().add(`}`).addNewLine(); - return p.toString(); - } -} diff --git a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5SingleStepStrategy.ts b/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5SingleStepStrategy.ts deleted file mode 100644 index e255282b..00000000 --- a/app2/src/app/scenario/codeService/strategies/wdi5/Wdi5SingleStepStrategy.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { InputStep, Step } from 'src/app/classes/Step'; -import StringBuilder from 'src/app/classes/StringBuilder'; - -export default class Wdi5SingleStepStrategy { - public static generateSinglePressStep( - step: Step, - indent: number = 0 - ): string { - const pressStep = new StringBuilder(); - pressStep.add( - Wdi5SingleStepStrategy.generateSingleExistsStep(step, indent) - ); - pressStep.add('.press();'); - return pressStep.toString(); - } - - public static generateSingleInputStep( - step: InputStep, - indent: number = 0 - ): string { - const pressStep = new StringBuilder(); - pressStep.add( - Wdi5SingleStepStrategy.generateSingleExistsStep(step, indent) - ); - pressStep.add(`.enterText("${step.getResultText()}");`); // FIXME: add actual step input value - return pressStep.toString(); - } - - public static generateSingleExistsStep( - step: Step, - indent: number = 0 - ): string { - const exists = new StringBuilder(); - - indent > 0 ? exists.addTab(indent) : null; - exists.add('await browser.asControl({').addNewLine(); - - exists - .addTab(indent + 1) - .add('selector: {') - .addNewLine(); - - exists.addBuilder( - Wdi5SingleStepStrategy.generateSelector(step, indent + 2) - ); - - exists - .addTab(indent + 1) - .add('}') - .addNewLine(); - - indent > 0 ? exists.addTab(indent) : null; - exists.add('})'); - - return exists.toString(); - } - - private static generateSelector( - step: Step, - indent: number = 0 - ): StringBuilder { - const selectorBuilder = new StringBuilder(); - - //Take the preformatted JSON string and apply the code-generator style to it - let array = JSON.stringify(step.recordReplaySelector, null, 4).split('\n'); - array.pop(); // remove the last brace - array.shift(); // remove the first brace - - const content = array.map(item => { - const sb = new StringBuilder(); - sb.addTab(indent-1); - sb.add(item); - sb.addNewLine(); - return sb.toString(); - }).reduce((a,b) => a + b, ''); - selectorBuilder.add(content); - - return selectorBuilder; - } -} diff --git a/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.html b/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.html deleted file mode 100644 index 8bab1d79..00000000 --- a/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.html +++ /dev/null @@ -1,5 +0,0 @@ -
- -
diff --git a/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.scss b/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.scss deleted file mode 100644 index 9df33847..00000000 --- a/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.scss +++ /dev/null @@ -1,16 +0,0 @@ -.stop-button { - background: #fa4141; - width: 10rem; - height: 10rem; - - .stop-square { - width: 4rem; - height: 4rem; - background: white; - margin: auto; - } -} - -.stop-surrounding { - padding: 1rem; -} \ No newline at end of file diff --git a/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.ts b/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.ts deleted file mode 100644 index 85a853e9..00000000 --- a/app2/src/app/scenario/dialogs/RecordStopDialog/RecordStopDialog.component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { MatDialogRef as MatDialogRef } from '@angular/material/dialog'; -import { pipe, Subject, Subscription, takeUntil } from 'rxjs'; -import { ChromeExtensionService } from 'src/app/services/chromeExtensionService/chrome_extension_service'; - -@Component({ - templateUrl: './RecordStopDialog.component.html', - styleUrls: ['./RecordStopDialog.component.scss'], -}) -export class RecordStopDialogComponent implements OnInit, OnDestroy { - private unsubscribe$?: Subject; - private steps: any[] = []; - - constructor( - private ref: MatDialogRef, - private chr_ext_srv: ChromeExtensionService - ) {} - - ngOnInit(): void { - this.unsubscribe$ = new Subject(); - this.chr_ext_srv - .register_recording_websocket() - .pipe(takeUntil(this.unsubscribe$)) - .subscribe(this.onRecordStep.bind(this)); - } - - ngOnDestroy(): void { - if (this.unsubscribe$) { - this.unsubscribe$.next(); - this.unsubscribe$.complete(); - } - } - - stopRecording(): void { - this.ref.close([...this.steps]); - } - - private onRecordStep(step: any): void { - this.steps.push(step); - } -} diff --git a/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.html b/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.html deleted file mode 100644 index 098a7d9c..00000000 --- a/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.html +++ /dev/null @@ -1,24 +0,0 @@ -
-

Replay Setup

-
-
- Start in manual mode -
- - - 0.5 sec - 1 sec - 2 sec - -
-
-
-
- - -
-
\ No newline at end of file diff --git a/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.scss b/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.scss deleted file mode 100644 index 4e6c1381..00000000 --- a/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.scss +++ /dev/null @@ -1,27 +0,0 @@ -.radioBox { - display: flex; - flex-direction: column; - margin-top: 1rem; - - > mat-radio-group.radioGroup { - display: flex; - flex-direction: column; - > * { - margin: 0.5rem; - } - } -} - -.content-container { - padding: 1rem; - display: flex; - flex-direction: column; - justify-content: flex-start; -} - -.actions { - display: flex; - flex-direction: row; - justify-content: flex-end; - margin-top: auto; -} \ No newline at end of file diff --git a/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.ts b/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.ts deleted file mode 100644 index a0d92bd4..00000000 --- a/app2/src/app/scenario/dialogs/ReplaySetupDialog/ReplaySetupDialog.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { FormControl, FormGroup } from '@angular/forms'; -import { MatDialogRef as MatDialogRef } from '@angular/material/dialog'; -import { FloatLabelType } from '@angular/material/form-field'; - -@Component({ - templateUrl: './ReplaySetupDialog.component.html', - styleUrls: ['./ReplaySetupDialog.component.scss'], -}) -export class ReplaySetupDialogComponent implements OnInit { - manualModeControl = new FormControl(true); - delayControl = new FormControl('0.5' as FloatLabelType); - replayOptions = new FormGroup({ - manualMode: this.manualModeControl, - delay: this.delayControl, - }); - - constructor(private ref: MatDialogRef) {} - - ngOnInit() { - if (this.manualModeControl.value === true) { - this.delayControl.disable(); - } else { - this.delayControl.enable(); - } - - this.manualModeControl.valueChanges.subscribe((val) => { - if (val) { - this.delayControl.disable(); - } else { - this.delayControl.enable(); - } - }); - } - - abort(): void { - this.ref.close(); - } - - replayStart(): void { - this.ref.close(this.replayOptions.value); - } -} diff --git a/app2/src/app/scenario/pages/code-page/code-page.component.html b/app2/src/app/scenario/pages/code-page/code-page.component.html deleted file mode 100644 index 2b19093f..00000000 --- a/app2/src/app/scenario/pages/code-page/code-page.component.html +++ /dev/null @@ -1,90 +0,0 @@ - -

Journey Code: 

-

- -
- - - - - {{style}} - - - -
-
- - - - - - - - - - -
- - - - {{node.name}} -
- -
- -
-
-
-
- -
- - -
-        {{this.currContent}}
-      
-
-
-
- - -

Not able to generate Code!

-
diff --git a/app2/src/app/scenario/pages/code-page/code-page.component.scss b/app2/src/app/scenario/pages/code-page/code-page.component.scss deleted file mode 100644 index 531a7cbf..00000000 --- a/app2/src/app/scenario/pages/code-page/code-page.component.scss +++ /dev/null @@ -1,93 +0,0 @@ -.float-button { - position: fixed; - margin: 1rem; -} - -.float-top { - top: 0; -} -.float-right { - right: 0; -} -:host ::ng-deep .mat-tab-header { - top: 0; - z-index: 1000; - position: sticky; - position: -webkit-sticky; /* macOS/iOS Safari */ -} - -.getAll { - margin-left: 0.5rem; - margin-top: 1.5rem; - border-radius: 10%; -} - -.example-tree { - .example-tree-invisible { - display: none; - } - - ul, - li { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; - } - /* - * Padding for leaf nodes. - * Leaf nodes need to have padding so as to align with other non-leaf nodes - * under the same parent. - */ - div[role="group"] > .mat-tree-node { - padding-left: 0.5rem; - } - - /* - * This padding sets alignment of the nested nodes. - */ - .mat-nested-tree-node div[role="group"] { - padding-left: 1rem; - } -} - -.mat-drawer-container { - min-height: 60%; - max-height: 89%; - - .splitter { - display: flex; - flex-direction: row; - max-width: 100%; - height: 84vh; - position: relative; - - button.copyButton { - position: fixed; - right: 2rem; - bottom: 5rem; - } - - pre { - padding: 0.2rem 1rem; - overflow: auto; - min-width: 88%; - } - - .left-sidebar { - border-right: 2px solid lightgray; - margin-right: 1em; - } - } -} - -.file-node { - width: 100%; - height: 100%; - text-align: left; - - &.active { - background-color: lightgray; - border-radius: 5px; - text-decoration: underline; - } -} diff --git a/app2/src/app/scenario/pages/code-page/code-page.component.spec.ts b/app2/src/app/scenario/pages/code-page/code-page.component.spec.ts deleted file mode 100644 index 5a203449..00000000 --- a/app2/src/app/scenario/pages/code-page/code-page.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { CodePageComponent } from './code-page.component'; - -describe('CodePageComponent', () => { - let component: CodePageComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ CodePageComponent ] - }) - .compileComponents(); - - fixture = TestBed.createComponent(CodePageComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/app2/src/app/scenario/pages/code-page/code-page.component.ts b/app2/src/app/scenario/pages/code-page/code-page.component.ts deleted file mode 100644 index 38f50a6e..00000000 --- a/app2/src/app/scenario/pages/code-page/code-page.component.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Location } from '@angular/common'; -import { ActivatedRoute, Params } from '@angular/router'; -import { TestScenario } from 'src/app/classes/testScenario'; -import { AppHeaderService } from 'src/app/components/app-header/app-header.service'; -import { ScenarioService } from 'src/app/services/scenarioService/scenario.service'; -import { - CodeService, - CodeStyles, - PageType, -} from '../../codeService/codeService.service'; -import { MatOptionSelectionChange as MatOptionSelectionChange } from '@angular/material/core'; -import { SettingsStorageService } from 'src/app/services/localStorageService/settingsStorageService.service'; -import * as JSZip from 'jszip'; -import { NestedTreeControl } from '@angular/cdk/tree'; -import { MessageService } from 'src/app/services/messageService/message.service'; -import { SnackSeverity } from 'src/app/components/dialogs/snack-dialog/snack-dialog.component'; - -interface FileNode { - name: string; - isRoot?: boolean; - active?: boolean; - content?: string; - children?: FileNode[]; -} - -const SEPARATOR_REPLACEMENT = '_'; - -@Component({ - selector: 'app-code-page', - templateUrl: './code-page.component.html', - styleUrls: ['./code-page.component.scss'], -}) -export class CodePageComponent implements OnInit { - codePages: { title: string; code: string; type: 'journey' | 'page' }[] = []; - scenario: TestScenario = new TestScenario('0'); - selected: CodeStyles = CodeStyles.OPA5; - codeStyles: CodeStyles[] = [CodeStyles.OPA5, CodeStyles.WDI5]; - - drawerOpen: boolean = true; - testData: FileNode[] = []; - treeControl = new NestedTreeControl((node) => node.children); - currContent: string = ''; - - private scenario_id: string = ''; - constructor( - private location: Location, - private scenarioService: ScenarioService, - private app_header_service: AppHeaderService, - private incommingRoute: ActivatedRoute, - private settingsService: SettingsStorageService, - private messageService: MessageService - ) {} - - ngOnInit(): void { - this.drawerOpen = false; - this.app_header_service.showBack(); - this.selected = this.settingsService.settings.codeStyle; - this.incommingRoute.params.subscribe((params: Params) => { - this.scenario_id = params['scenarioId']; - this.scenarioService - .getScenario(this.scenario_id) - .then((scen: TestScenario | undefined) => { - if (!scen) { - this.navBack(); - } else { - this.scenario = scen; - this.generate(); - } - }) - .catch(() => this.navBack.bind(this)); - }); - } - - navBack(): void { - this.location.back(); - } - - selectionChanged(event: MatOptionSelectionChange) { - this.selected = event.source.value; - this.generate(); - } - - generate() { - this.codePages = CodeService.generateScenarioCode(this.scenario, { - style: this.selected, - }); - - const rootNode: FileNode = { - isRoot: true, - name: this.scenario.name, - children: [], - }; - - const integrationFolder: FileNode = { - name: this.selected === CodeStyles.WDI5 ? 'e2e' : 'integration', - children: [], - }; - - const pagesFolder: FileNode = { - name: 'pages', - children: [], - }; - - if (this.selected === CodeStyles.OPA5) { - integrationFolder.children?.push(pagesFolder); - } - - this.codePages.forEach((cp) => { - if (cp.type === PageType.PAGE) { - if (!pagesFolder.children) { - pagesFolder.children = []; - } - pagesFolder.children.push({ - name: cp.title.replace(/\s/gm, SEPARATOR_REPLACEMENT) + '.js', - content: cp.code, - }); - } - if (cp.type === PageType.JOURNEY) { - if (!integrationFolder.children) { - integrationFolder.children = []; - } - integrationFolder.children.push({ - name: - (cp.title.replace(/\s/gm, SEPARATOR_REPLACEMENT) || - this.scenario.name.replace(/\s/gm, SEPARATOR_REPLACEMENT)) + - '.js', - content: cp.code, - active: true, - }); - this.currContent = cp.code; - } - }); - - rootNode.children?.push(integrationFolder); - this.testData = [rootNode]; - //so we can used the programatically expand of nodes - //https://github.com/angular/components/issues/12170 - this.treeControl.dataNodes = this.testData; - this.treeControl.expand(rootNode); - this.treeControl.expand(integrationFolder); - } - - downloadPage(p: { title: string; code: string }): void { - const el = document.createElement('a'); - el.setAttribute( - 'href', - `data:text/javascript;charset=utf-8,${encodeURIComponent(p.code)}` - ); - const fileName = `${this.replaceUnsupportedFileSigns(p.title, '_')}.js`; - el.setAttribute('download', fileName); - el.style.display = 'none'; - el.click(); - } - - copyCode() { - navigator.clipboard.writeText(this.currContent); - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Copied', - detail: 'Code copied to the clipboard', - icon: 'content_copy', - }); - } - - downloadAll(): void { - const zip = new JSZip(); - if (this.selected === CodeStyles.OPA5) { - const jurney = this.codePages.find((p) => p.type === 'journey'); - const pages = this.codePages.filter((p) => p.type === 'page'); - - const integrationFolder = zip.folder('integration'); - const pagesFolder = integrationFolder?.folder('pages'); - integrationFolder?.file( - `${this.replaceUnsupportedFileSigns(jurney?.title || '', '_')}.js`, - jurney?.code || '' - ); - - pages.forEach((p) => { - pagesFolder?.file( - `${this.replaceUnsupportedFileSigns(p.title, '_')}.js`, - p.code - ); - }); - } else { - const wdi5Folder = zip.folder('wdi5_test'); - this.codePages.forEach((p) => { - wdi5Folder?.file( - `${this.replaceUnsupportedFileSigns(p.title, '_')}.js`, - p.code - ); - }); - } - - zip.generateAsync({ type: 'blob' }).then((content) => { - const el = document.createElement('a'); - el.setAttribute('href', URL.createObjectURL(content)); - const fileName = `${this.replaceUnsupportedFileSigns( - this.scenario.name, - '_' - )}.zip`; - el.setAttribute('download', fileName); - el.style.display = 'none'; - el.click(); - }); - } - - onFileClicked(node: FileNode): void { - this.currContent = node.content || ''; - this._resetActiveState(this.testData[0]); - node.active = true; - } - - hasChild(_: number, node: FileNode): boolean { - return !!node.children && node.children.length > 0; - } - - private _resetActiveState(node: FileNode) { - node.active = false; - node.children?.forEach(this._resetActiveState.bind(this)); - } - - private replaceUnsupportedFileSigns(s: string, replacement: string): string { - return s.replace(/[\s\/\\\:\*\?\"\<\>\|\-]+/gm, replacement); - } -} diff --git a/app2/src/app/scenario/pages/object/object_page.component.html b/app2/src/app/scenario/pages/object/object_page.component.html deleted file mode 100644 index 9edc23a2..00000000 --- a/app2/src/app/scenario/pages/object/object_page.component.html +++ /dev/null @@ -1,155 +0,0 @@ - -

Journey

- -

- -
- - - -
-
-
-

Header Details

-

- - Journey Name - - - - UI5 Version - - -

-

- - Site-UrL - - -

- -
-
- - -
-
- - -
-
-
-
-
-

Steps

-
- - - - -
-
- - - -
- - -
- - {{(step.actionType | actionImage)}} - -
- {{step.controlId}} - {{step.actionLoc}} -
-
-
-
\ No newline at end of file diff --git a/app2/src/app/scenario/pages/object/object_page.component.scss b/app2/src/app/scenario/pages/object/object_page.component.scss deleted file mode 100644 index a754217f..00000000 --- a/app2/src/app/scenario/pages/object/object_page.component.scss +++ /dev/null @@ -1,68 +0,0 @@ -header.object-header { - display: flex; - flex-direction: row; - box-shadow: 0px 2px 4px 0px darkgrey; - max-height: 2rem; - align-items: center; -} - -header.object-header > * { - margin-right: 0.5rem; - max-height: 1rem; -} - -.mat-list-base .mat-list-item .list-content-with-action-left { - display: flex; - flex-direction: row; - justify-content: flex-start; - > action-block { - margin-right: 1em; - } -} - - -.mat-mdc-list.mat-mdc-list-base { - .mat-mdc-list-item{ - cursor: pointer; - - .mdc-list-item.mdc-list-item--with-leading-avatar { - mat-icon.mat-mdc-list-item-avatar { - border-radius: 0; - text-align: center; - line-height: var(--mdc-list-list-item-leading-avatar-size); - } - } - } -} - -.list-header { - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid lightgray; -} - -.section { - padding: 1rem; -} - -.succeededTest { - color: green; -} - -.errorTest { - color: red; -} - -.warningTest { - color: orange; -} - -.line-item { - display: flex; - flex-direction: column; - - &::before { - content: none; - } -} \ No newline at end of file diff --git a/app2/src/app/scenario/pages/object/object_page.component.ts b/app2/src/app/scenario/pages/object/object_page.component.ts deleted file mode 100644 index 7cf5330a..00000000 --- a/app2/src/app/scenario/pages/object/object_page.component.ts +++ /dev/null @@ -1,277 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { ActivatedRoute, Params, Router } from '@angular/router'; -import { ChromeExtensionService } from 'src/app/services/chromeExtensionService/chrome_extension_service'; -import { Observable } from 'rxjs'; -import { TestScenario } from 'src/app/classes/testScenario'; -import { ScenarioService } from 'src/app/services/scenarioService/scenario.service'; -import { ReplayService } from 'src/app/services/replayService/replay.service'; -import { - AppFooterService, - LoadStatus, -} from 'src/app/components/app-footer/app-footer.service'; -import { AppHeaderService } from 'src/app/components/app-header/app-header.service'; -import { MessageService } from 'src/app/services/messageService/message.service'; -import { SnackSeverity } from 'src/app/components/dialogs/snack-dialog/snack-dialog.component'; -import { Step } from 'src/app/classes/Step'; -import { LoaderService } from 'src/app/services/loaderService/loaderService'; -import { ReplaySetupDialogComponent } from '../../dialogs/ReplaySetupDialog/ReplaySetupDialog.component'; -import { MatDialog as MatDialog } from '@angular/material/dialog'; -import { SettingsStorageService } from 'src/app/services/localStorageService/settingsStorageService.service'; - -type ReplayStep = Step & { - testResult?: 'success' | 'error' | 'warning'; -}; - -@Component({ - selector: 'app-object-page', - templateUrl: './object_page.component.html', - styleUrls: ['./object_page.component.scss'], -}) -export class ObjectPageComponent implements OnInit, OnDestroy { - navigatedPage: string = 'Test'; - tab: chrome.tabs.Tab | undefined; - - steps: any[] = []; - scenario: TestScenario = new TestScenario('0'); - scenarioSteps: ReplayStep[] = []; - - replay: boolean = false; - automatedRun: boolean = false; - replayDelay: number = 0.0; - - private scenario_id: string = ''; - - constructor( - private incommingRoute: ActivatedRoute, - private chr_ext_srv: ChromeExtensionService, - private router: Router, - private active_route: ActivatedRoute, - private scenarioService: ScenarioService, - private replayService: ReplayService, - public app_footer_service: AppFooterService, - private app_header_service: AppHeaderService, - private messageService: MessageService, - private loaderService: LoaderService, - private dialog: MatDialog, - private settingsService: SettingsStorageService - ) {} - - ngOnInit(): void { - this.app_header_service.showBack(); - this.app_header_service.setCustomBackUrl(''); - this.incommingRoute.params.subscribe((params: Params) => { - this.scenario_id = params['scenarioId']; - this.scenarioService - .getScenario(this.scenario_id) - .then((scen: TestScenario | undefined) => { - if (!scen) { - this.navBack(); - } else { - this.scenario = scen; - this.scenarioSteps = scen.testPages.reduce( - (a, b) => [...a, ...b.steps], - [] as ReplayStep[] - ); - } - }) - .catch(() => this.navBack.bind(this)); - }); - } - - ngOnDestroy(): void { - this.chr_ext_srv.disconnect().catch(() => {}); - } - - navBack(): void { - this.router.navigate(['']); - } - - saveCurrentScenario(): void { - if (this.scenario) { - this.scenarioService.saveScenario(this.scenario).then(() => { - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Save', - detail: 'Current scenario saved!', - }); - }); - } - } - - replayMode() { - const ref = this.dialog.open(ReplaySetupDialogComponent, { - disableClose: true, - height: '37vh', - width: '30vw' - }); - - ref.afterClosed().subscribe((result) => { - this.loaderService.startLoading(); - if (result) { - this.automatedRun = !result.manualMode; - this.replayDelay = Number(result.delay); - if (this.scenario) { - this.app_footer_service.loadingIndicatorSource.subscribe( - (status: LoadStatus) => { - if (status !== LoadStatus.CONNECTED) { - this.replay = false; - } - if (status === LoadStatus.CONNECTED) { - this.loaderService.endLoading(); - } - } - ); - this.replayService.startReplay(this.scenario.startUrl).then(() => { - this.scenarioSteps.forEach((sSt) => (sSt.testResult = undefined)); - this.replay = true; - if (this.automatedRun) { - this.runAutomatedTesting(); - } - }); - } - } else { - this.loaderService.endLoading(); - } - }); - } - - stopReplay() { - if (this.scenario) { - this.replayService.stopReplay().then(() => { - this.replay = false; - this.automatedRun = false; - }); - } - } - - disconnect() { - this.replayService.stopReplay(); - } - - connectToPage() { - if (this.scenario) { - this.replayService.startReplay(this.scenario?.startUrl); - } - } - - editViewStep(s: Step) { - this.router.navigate(['step', encodeURIComponent(s.stepId)], { - relativeTo: this.active_route, - }); - } - - performAction(date: ReplayStep): Promise { - if (date.testResult !== undefined) { - return Promise.resolve(); - } - if (date) { - const sttngs = this.settingsService.settings; - return this.replayService - .performAction(date, sttngs.codeStyle) - .then(() => { - date.testResult = 'success'; - }) - .catch((e) => { - date.testResult = 'error'; - if (this.automatedRun) { - throw new Error(e); - } else { - this.scenarioSteps - .filter((scS) => scS.testResult === undefined) - .forEach((scS) => (scS.testResult = 'warning')); - } - }); - } else { - return Promise.reject(); - } - } - - export() { - this.loaderService.startLoading(); - const link = document.createElement('a'); - const blob = new Blob([this.scenario?.toString() || ''], { - type: 'octet/stream', - }); - const name = - this.replaceUnsupportedFileSigns(this.scenario?.name || 'blub', '_') + - '.json'; - - link.setAttribute('href', window.URL.createObjectURL(blob)); - link.setAttribute('download', name); - link.click(); - this.loaderService.endLoading(); - } - - showCodePage(): void { - this.router.navigate(['code'], { - relativeTo: this.active_route, - }); - } - - private replaceUnsupportedFileSigns( - text: string, - replacement_sign: string - ): string { - return text.replace(/[\s\/\\\:\*\?\"\<\>\|\-]+/gm, replacement_sign); - } - - private async runAutomatedTesting(): Promise { - let index = -1; - let remaining = this.scenarioSteps.filter( - (s) => s.testResult === undefined - ).length; - while (remaining !== 0) { - await this.timeout(1000 * this.replayDelay) - .then(() => { - index += 1; - return this.performAction(this.scenarioSteps[index]); - }) - .then(() => { - remaining = this.scenarioSteps.filter( - (s) => s.testResult === undefined - ).length; - if (remaining === 0) { - const success = this.scenarioSteps.reduce( - (a, s) => a && s.testResult === 'success', - true - ); - - if (success) { - this.messageService.show({ - title: 'Test Result', - detail: 'All test steps executed successfully', - severity: SnackSeverity.SUCCESS, - icon: 'check_circle', - }); - } else { - this.messageService.show({ - title: 'Test Result', - detail: 'One test failed while testing', - severity: SnackSeverity.ERROR, - icon: 'error', - }); - } - - this.stopReplay(); - } - }) - .catch(() => { - remaining = 0; - for (let i = index + 1; i < this.scenarioSteps.length; i++) { - this.scenarioSteps[i].testResult = 'warning'; - } - - this.messageService.show({ - title: 'Test Result', - detail: 'One test failed while testing', - severity: SnackSeverity.ERROR, - icon: 'error', - }); - }); - } - } - - private timeout(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); - } -} diff --git a/app2/src/app/scenario/pages/recording/recording_page.component.html b/app2/src/app/scenario/pages/recording/recording_page.component.html deleted file mode 100644 index e69de29b..00000000 diff --git a/app2/src/app/scenario/pages/recording/recording_page.component.scss b/app2/src/app/scenario/pages/recording/recording_page.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app2/src/app/scenario/pages/recording/recording_page.component.ts b/app2/src/app/scenario/pages/recording/recording_page.component.ts deleted file mode 100644 index 3dbb0bd4..00000000 --- a/app2/src/app/scenario/pages/recording/recording_page.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; -import { MatDialog as MatDialog } from '@angular/material/dialog'; -import { ActivatedRoute, Params, Router } from '@angular/router'; -import { RequestBuilder, RequestMethod } from 'src/app/classes/requestBuilder'; - -import { ChromeExtensionService } from 'src/app/services/chromeExtensionService/chrome_extension_service'; -import { ScenarioService } from 'src/app/services/scenarioService/scenario.service'; -import { RecordStopDialogComponent } from '../../dialogs/RecordStopDialog/RecordStopDialog.component'; - -@Component({ - selector: 'app-recording-page', - templateUrl: './recording_page.component.html', - styleUrls: ['./recording_page.component.scss'], -}) -export class RecordingPageComponent implements OnInit { - tab: chrome.tabs.Tab | undefined; - - constructor( - private incommingRoute: ActivatedRoute, - private chr_ext_srv: ChromeExtensionService, - private dialog: MatDialog, - private router: Router, - private scenarioService: ScenarioService - ) {} - - ngOnInit(): void { - this.incommingRoute.params.subscribe((params: Params) => { - this.chr_ext_srv - .getTabInfoForCurrentConnection() - .then((tab: chrome.tabs.Tab) => { - this.tab = tab; - this.openStopDialog(); - }) - .catch(() => { - this.chr_ext_srv.disconnect(); - this.router.navigate(['']); - }); - }); - } - - private openStopDialog(): void { - const ref = this.dialog.open(RecordStopDialogComponent, { - disableClose: true, - panelClass: 'stopDialog', - }); - - ref.afterClosed().subscribe((steps) => { - this.postRecordActions(steps); - }); - } - - private async postRecordActions(events: Event[]): Promise { - const req = new RequestBuilder() - .setMethod(RequestMethod.GET) - .setUrl('/pageInfo/version') - .build(); - const version = await this.chr_ext_srv.sendSyncMessage(req); - const { id } = await this.scenarioService.createScenarioFromRecording( - events, - version.message - ); - - this.router.navigate(['scenario/scenarioDetail', id]); - } -} diff --git a/app2/src/app/scenario/pages/step/step_page.component.html b/app2/src/app/scenario/pages/step/step_page.component.html deleted file mode 100644 index 7f899917..00000000 --- a/app2/src/app/scenario/pages/step/step_page.component.html +++ /dev/null @@ -1,236 +0,0 @@ - - -

Step

- - - -
-
- - - - - {{currentStep.actionType | actionImage}} - Control Informations - - - -
-
- - - Control ID - - -
-
- - Control Type - - -
-
- - -
- - - - - - -
-
-
- - - - - Control - - - - - - - - - - - - - - - - - - - -
Name{{element.name}}Value{{element.value}}Use
-
- - - - - - - - - - - - - - - - - - - - - - - - -
Name{{element.propertyName}}Value{{element.bindingValue}}Value{{element.modelName}}Value{{element.modelPath}}/{{element.propertyPath}}Use
-
- - - - - - - - - - - - - - - - - - - - -
Name{{element.propertyName}}Value{{element.bindingValue}}Value{{element.propertyPath}}Use
-
-
-
- - - - - Code Preview - - - - -
-

Steps

-
- - Page attached - - - {{style}} - - -
-
- -
-
-
\ No newline at end of file diff --git a/app2/src/app/scenario/pages/step/step_page.component.scss b/app2/src/app/scenario/pages/step/step_page.component.scss deleted file mode 100644 index 75f96009..00000000 --- a/app2/src/app/scenario/pages/step/step_page.component.scss +++ /dev/null @@ -1,29 +0,0 @@ -.panel-title { - display: flex; - flex-direction: row; - align-items: center; - - > * { - margin-right: 0.5rem; - } -} - -pre { - background: #383838; - color: white; - min-height: 3rem; -} - -.list-header { - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid lightgray; -} - -.copy-button { - color: white; - position: fixed; - right: 0; - margin: 1rem 1.5rem; -} \ No newline at end of file diff --git a/app2/src/app/scenario/pages/step/step_page.component.ts b/app2/src/app/scenario/pages/step/step_page.component.ts deleted file mode 100644 index 8c4e7ffc..00000000 --- a/app2/src/app/scenario/pages/step/step_page.component.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { Clipboard } from '@angular/cdk/clipboard'; -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Params } from '@angular/router'; -import { Step, StepType, UnknownStep } from 'src/app/classes/Step'; -import { AppHeaderService } from 'src/app/components/app-header/app-header.service'; -import { SnackSeverity } from 'src/app/components/dialogs/snack-dialog/snack-dialog.component'; -import { SettingsStorageService } from 'src/app/services/localStorageService/settingsStorageService.service'; -import { MessageService } from 'src/app/services/messageService/message.service'; -import { ScenarioService } from 'src/app/services/scenarioService/scenario.service'; -import { CodeService, CodeStyles } from '../../codeService/codeService.service'; - -interface Attribute { - name: string; - value: string | number | boolean; - use: boolean; -} - -interface Binding { - propertyName: string; - bindingValue: string | number | boolean; - modelPath: string; - propertyPath: string; - modelName: string; - use: boolean; -} - -interface I18nText { - propertyName: string; - propertyPath: string; - bindingValue: any; - use: boolean; -} - -@Component({ - selector: 'app-step-page', - templateUrl: './step_page.component.html', - styleUrls: ['./step_page.component.scss'], -}) -export class StepPageComponent implements OnInit { - private scenario_id: string | undefined; - private step_id: string | undefined; - - pagedCode = false; - currentStep: Step = new UnknownStep(); - attributesTableData: Attribute[] = []; - bindingsTableData: Binding[] = []; - i18nTableData: I18nText[] = []; - - displayedColumns: string[] = ['name', 'value', 'use']; - displayColsBinding: string[] = [ - 'property', - 'value', - 'model', - 'bindingPath', - 'use', - ]; - displayColsI18n: string[] = ['property', 'value', 'bindingPath', 'use']; - - steps = [ - { text: 'Click', step: StepType.Click }, - { text: 'Input', step: StepType.Input }, - { text: 'KeyPress', step: StepType.KeyPress }, - { text: 'Validate', step: StepType.Validation }, - ]; - - codeData = { - language: 'javascript', - value: '', - }; - selected: CodeStyles = CodeStyles.OPA5; - codeStyles: CodeStyles[] = [CodeStyles.OPA5, CodeStyles.WDI5]; - - constructor( - private active_route: ActivatedRoute, - private scenario_service: ScenarioService, - private app_header_service: AppHeaderService, - private messageService: MessageService, - private settingsService: SettingsStorageService, - private clipboard: Clipboard - ) {} - - ngOnInit(): void { - this.app_header_service.showBack(); - this.active_route.params.subscribe((parameters: Params) => { - this.scenario_id = parameters['scenarioId']; - this.step_id = parameters['stepId']; - this.scenario_service - .getStep(this.scenario_id || '', this.step_id || '') - .then((step: Step) => { - this.currentStep = step; - this.attributesTableData = this.currentStep.controlAttributes; - this.bindingsTableData = this.currentStep.controlBindings; - this.i18nTableData = this.currentStep.controlI18nTexts; - }) - .catch(() => { - this.app_header_service.navigateBackwards(); - }); - }); - - this.selected = this.settingsService.codeStyle; - } - - setType(type: StepType): void { - this.currentStep.actionType = type; - } - - useIdChanged(val: boolean) { - this.currentStep.useControlId = val; - } - - generateStepCode() { - if (this.currentStep) { - if (this.pagedCode) { - this.codeData.value = CodeService.generatePagedStepCode( - this.currentStep, - { - style: this.selected, - } - ).trim(); - } else { - this.codeData.value = CodeService.generateStepCode(this.currentStep, { - style: this.selected, - }).trim(); - } - } - } - - useControlId(event: any): void { - if (this.currentStep) { - this.currentStep.useControlId = event.checked; - } - } - - checkUniqueness(): void { - if (this.currentStep) { - this.scenario_service - .validateStepUniqueness(this.currentStep) - .then((result) => { - if (result.data === 1) { - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Valid', - detail: 'Only one item found!', - icon: 'verified', - }); - } else { - this.messageService.show({ - severity: SnackSeverity.WARNING, - title: 'Insufficient', - detail: 'More than one item matches!', - icon: 'report', - }); - } - }); - } - } - - copyCode(code: string = '') { - this.clipboard.copy(code); - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Copy Successfull', - }); - } -} diff --git a/app2/src/app/scenario/pipes/actionImage.pipe.ts b/app2/src/app/scenario/pipes/actionImage.pipe.ts deleted file mode 100644 index d1d222b9..00000000 --- a/app2/src/app/scenario/pipes/actionImage.pipe.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core'; -import { StepType } from 'src/app/classes/Step'; - -@Pipe({ - name: 'actionImage', -}) -export class ActionImagePipe implements PipeTransform { - transform(type?: StepType): string { - switch (type) { - case StepType.Click: - return 'mouse'; - case StepType.KeyPress: - return 'keyboard'; - case StepType.Input: - return 'text_fields'; - case StepType.Validation: - return 'verified'; - default: - return 'question_mark'; - } - } -} diff --git a/app2/src/app/scenario/scenario-routing.module.ts b/app2/src/app/scenario/scenario-routing.module.ts deleted file mode 100644 index 3d1af487..00000000 --- a/app2/src/app/scenario/scenario-routing.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { CodePageComponent } from './pages/code-page/code-page.component'; -import { ObjectPageComponent } from './pages/object/object_page.component'; -import { RecordingPageComponent } from './pages/recording/recording_page.component'; -import { StepPageComponent } from './pages/step/step_page.component'; -import { ScenarioComponent } from './scenario.component'; - -const routes: Routes = [ - { - path: '', - component: ScenarioComponent, - children: [ - { - path: 'recording', - component: RecordingPageComponent, - }, - { - path: 'scenarioDetail/:scenarioId', - children: [ - { path: '', component: ObjectPageComponent }, - { - path: 'step/:stepId', - component: StepPageComponent, - }, - { - path: 'code', - component: CodePageComponent, - }, - ], - }, - ], - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class ScenarioRoutingModule {} diff --git a/app2/src/app/scenario/scenario.component.ts b/app2/src/app/scenario/scenario.component.ts deleted file mode 100644 index 7b5e752d..00000000 --- a/app2/src/app/scenario/scenario.component.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-scenario', - template: ``, -}) -export class ScenarioComponent {} diff --git a/app2/src/app/scenario/scenario.module.ts b/app2/src/app/scenario/scenario.module.ts deleted file mode 100644 index ce8118c4..00000000 --- a/app2/src/app/scenario/scenario.module.ts +++ /dev/null @@ -1,85 +0,0 @@ -//#region angular -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -//#endregion - -import { ScenarioRoutingModule } from './scenario-routing.module'; -import { ScenarioComponent } from './scenario.component'; - -//#region components -import { RecordStopDialogComponent } from './dialogs/RecordStopDialog/RecordStopDialog.component'; -//#endregion - -//#region pages -import { RecordingPageComponent } from './pages/recording/recording_page.component'; -import { StepPageComponent } from './pages/step/step_page.component'; -import { ObjectPageComponent } from './pages/object/object_page.component'; -import { CodePageComponent } from './pages/code-page/code-page.component'; -//#endregion - -//#region pipes/services -import { ActionImagePipe } from './pipes/actionImage.pipe'; -import { CodeService } from './codeService/codeService.service'; -//#endregion - -//#region material -import { MatListModule as MatListModule } from '@angular/material/list'; -import { MatFormFieldModule as MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatButtonModule as MatButtonModule } from '@angular/material/button'; -import { MatInputModule as MatInputModule } from '@angular/material/input'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { MatTooltipModule as MatTooltipModule } from '@angular/material/tooltip'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { MatTabsModule as MatTabsModule } from '@angular/material/tabs'; -import { MatSelectModule as MatSelectModule } from '@angular/material/select'; -import { MatTableModule as MatTableModule } from '@angular/material/table'; -import { MatCheckboxModule as MatCheckboxModule } from '@angular/material/checkbox'; -import { MatMenuModule as MatMenuModule } from '@angular/material/menu'; -import { ClipboardModule } from '@angular/cdk/clipboard'; -import { MatRadioModule as MatRadioModule } from '@angular/material/radio'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatTreeModule } from '@angular/material/tree'; -import { ReplaySetupDialogComponent } from './dialogs/ReplaySetupDialog/ReplaySetupDialog.component'; -//#endregion material - -@NgModule({ - declarations: [ - ObjectPageComponent, - RecordingPageComponent, - RecordStopDialogComponent, - ReplaySetupDialogComponent, - ScenarioComponent, - StepPageComponent, - ActionImagePipe, - CodePageComponent, - ], - imports: [ - CommonModule, - ScenarioRoutingModule, - FormsModule, - ReactiveFormsModule, - ClipboardModule, - //#region material - MatListModule, - MatFormFieldModule, - MatIconModule, - MatButtonModule, - MatInputModule, - MatToolbarModule, - MatTooltipModule, - MatExpansionModule, - MatTabsModule, - MatSelectModule, - MatTableModule, - MatCheckboxModule, - MatMenuModule, - MatRadioModule, - MatSidenavModule, - MatTreeModule, - //#endregion matieral - ], - providers: [CodeService], -}) -export class ScenarioModule {} diff --git a/app2/src/app/services/chromeExtensionService/chrome_extension_service.spec.ts b/app2/src/app/services/chromeExtensionService/chrome_extension_service.spec.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/app2/src/app/services/chromeExtensionService/chrome_extension_service.ts b/app2/src/app/services/chromeExtensionService/chrome_extension_service.ts deleted file mode 100644 index 7cdf3c9f..00000000 --- a/app2/src/app/services/chromeExtensionService/chrome_extension_service.ts +++ /dev/null @@ -1,370 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Observable, Subject } from 'rxjs'; -import { AppFooterService } from 'src/app/components/app-footer/app-footer.service'; -import { SnackSeverity } from 'src/app/components/dialogs/snack-dialog/snack-dialog.component'; -import { - Request, - RequestBuilder, - RequestMethod, -} from '../../classes/requestBuilder'; -import { MessageService } from '../messageService/message.service'; - -export interface Page { - title: string; - path: string; - id: number; - icon: string; -} - -export type Synchronizer = { - success: (value: any) => void; - error: (error: any) => void; -}; - -@Injectable({ - providedIn: 'root', -}) -export class ChromeExtensionService { - private _recordingSource = new Subject(); - - private internal_port: chrome.runtime.Port | null = null; - private bInjectAttempted: boolean = false; - private _interval_id: number = 0; - - private currentPage: Page | undefined; - - private _message_id: number = 0; - private _message_map: { [key: number]: Synchronizer } = {}; - - constructor( - private messageService: MessageService, - private appFooterService: AppFooterService - ) { } - - public static get_all_tabs(only_ui5: boolean = false): Promise { - return new Promise((resolve, _) => { - chrome.tabs.query({ currentWindow: false }, (tabs: chrome.tabs.Tab[]) => { - resolve(tabs.map((t, i) => { - return { - title: t.title || '', - path: t.url || '', - id: t.id || i, - icon: t.favIconUrl || '', - }; - }).filter((t) => { - return t.path !== ''; - }) - ); - }); - }); - } - - public setCurrentPage(page?: Page) { - this.currentPage = page; - } - - public getTabInfoForCurrentConnection(): Promise { - if (!this.currentPage) { - return Promise.reject(); - } else { - return this._getTabInfoById(this.currentPage.id); - } - } - - public connectToCurrentPage(withReload: boolean = false): Promise { - if (this.internal_port !== null) { - return Promise.reject(); - } - this.appFooterService.connecting(); - return new Promise((resolve, reject) => { - const inject_after_reload = ( - iTabId: number, - oChangeInfo: chrome.tabs.TabChangeInfo, - _: chrome.tabs.Tab - ) => { - if ( - !this.bInjectAttempted && - this.currentPage?.id === iTabId && - oChangeInfo.status === 'complete' - ) { - this.bInjectAttempted = true; - } else { - return; - } - - setTimeout(() => { - chrome.scripting.executeScript( - { - target: { tabId: iTabId }, - files: ['/assets/scripts/content_inject.js'], - }, - () => { - chrome.tabs.onUpdated.removeListener(inject_after_reload); - const conRequest = new RequestBuilder(); - conRequest.setMethod(RequestMethod.GET); - conRequest.setUrl('pageInfo/connected'); - this.sendSyncMessage(conRequest.build()).then((answer) => { - if (answer.status === 200) { - this.appFooterService.connected(); - this._interval_id = setInterval( - this._checkConnection.bind(this), - 450 - ) as unknown as number; - resolve(); - } else { - reject(); - } - }); - } - ); - }, 2500); - }; - - const setupPort = (port: chrome.runtime.Port) => { - // ignore if a connection is already active - if (port && port.name === 'ui5_tr') { - this.internal_port = port; - this.internal_port.onDisconnect.addListener( - this._onDisconnectListener.bind(this) - ); - this.internal_port.onMessage.addListener( - this._onMessageListener.bind(this) - ); - chrome.runtime.onMessage.addListener( - this._onInstantMessage.bind(this) - ); - chrome.runtime.onConnect.removeListener(setupPort); - resolve(); - } else { - return; - } - }; - - chrome.runtime.onConnect.addListener(setupPort); - - if (this.currentPage) { - this._requestPermission({ - id: this.currentPage.id, - url: this.currentPage.path, - }) - .then(() => { - if (withReload) { - chrome.tabs.onUpdated.addListener(inject_after_reload); - if (this.currentPage) { - chrome.tabs.reload(this.currentPage.id, { - bypassCache: false, - }); - } else { - reject(); - } - } else { - if (this.currentPage) { - chrome.scripting.executeScript( - { - target: { tabId: this.currentPage.id }, - files: ['/assets/scripts/content_inject.js'], - }, - () => { - this.messageService.show({ - severity: SnackSeverity.SUCCESS, - title: 'Injection', - detail: 'Connection established!', - }); - this.appFooterService.connected(); - this._interval_id = setInterval( - this._checkConnection.bind(this), - 450 - ) as unknown as number; - resolve(); - } - ); - } else { - reject(); - } - } - }) - .catch(() => { - reject(); - }); - } else { - reject(); - } - }); - } - - public isConnectedToPage(): boolean { - if (!this.currentPage) { - return false; - } - if (this.internal_port === null) { - return false; - } - return true; - } - - private async _checkConnection(): Promise { - try { - if (this.internal_port === null) { - return; - } - if (!this.currentPage?.id) { - return; - } - await chrome.tabs.get(this.currentPage.id); - } catch (error) { - this._resetConnection(); - } - } - - public focus_page(page: Page): Promise { - return new Promise((resolve, reject) => { - chrome.tabs.update(page.id, { active: true }, (tab) => { - if (tab) { - chrome.windows.update(tab.windowId, { focused: true }).then(() => { - resolve(); - }); - } else { - reject(); - } - }); - }); - } - - public register_recording_websocket(): Observable { - return this._recordingSource.asObservable(); - } - - public disconnect(): Promise { - if (this.internal_port && this.currentPage) { - this._resetConnection(); - return chrome.tabs.reload(this.currentPage.id, { - bypassCache: false, - }); - } else { - return Promise.resolve(); - } - } - - public createTabByUrl(url: string): Promise { - return chrome.tabs.create({ url: url, active: true }); - } - - public sendSyncMessage(msg: Request): Promise { - msg.message_id = ++this._message_id; - return new Promise((resolve, reject) => { - const syncObject: Synchronizer = { success: resolve, error: reject }; - this._message_map[this._message_id] = syncObject; - this._sendMessage(msg); - }); - } - - private _getTabInfoById(page_id: number): Promise { - return new Promise((resolve, _) => { - chrome.tabs.get(parseInt('' + page_id, 10), (tab: chrome.tabs.Tab) => { - resolve(tab); - }); - }); - } - - private _onDisconnectListener(): void { - this._resetConnection(); - this.messageService.show({ - severity: SnackSeverity.ERROR, - title: 'Connection', - detail: 'Connection to page lost!', - }); - } - - private _resetConnection(): void { - if (this.internal_port !== null) { - this.internal_port.onDisconnect.removeListener( - this._onDisconnectListener.bind(this) - ); - this.internal_port.onMessage.removeListener( - this._onMessageListener.bind(this) - ); - chrome.runtime.onMessage.removeListener( - this._onInstantMessage.bind(this) - ); - this.internal_port.disconnect(); - this.internal_port = null; - this.bInjectAttempted = false; - clearInterval(this._interval_id); - this._interval_id = 0; - this.appFooterService.disconnected(); - } - } - - private _onMessageListener(message: any, port: chrome.runtime.Port) { - if ( - message && - message.data && - message.data.message_id && - this._message_map[message.data.message_id] - ) { - const { success, error } = this._message_map[message.data.message_id]; - delete message.data.message_id; - if (message.data.status >= 200 && message.data.status <= 299) { - success(message.data); - } else { - error(message.data); - } - } else { - switch (message?.data?.instantType) { - case 'record-token': - this._recordingSource.next(message?.data?.content); - break; - } - } - } - - private _requestPermission(oPermissionInfo: { - id?: number; - url: string; - }): Promise { - return new Promise((resolve, reject) => { - chrome.permissions.contains( - { - permissions: ['tabs'], - origins: [oPermissionInfo.url], - }, - (result) => { - if (result) { - resolve(); - } else { - chrome.permissions.request( - { - permissions: ['tabs'], - origins: [oPermissionInfo.url], - }, - (granted) => { - // The callback argument will be true if the user granted the permissions. - if (granted) { - resolve(); - } else { - reject(); - } - } - ); - } - } - ); - }); - } - - private _sendMessage(oInfo: any) { - this.internal_port?.postMessage(oInfo); - } - - private _onInstantMessage(msg: any): void { - if (msg && msg.message_id && this._message_map[msg.message_id]) { - if (msg.code >= 200 && msg.code <= 299) { - this._message_map[msg.message_id].success(msg.data); - } else { - this._message_map[msg.message_id].error(msg.data); - } - } else { - console.log(msg); - } - } -} diff --git a/app2/src/app/services/loaderService/loaderService.ts b/app2/src/app/services/loaderService/loaderService.ts deleted file mode 100644 index cd8db877..00000000 --- a/app2/src/app/services/loaderService/loaderService.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Injectable } from '@angular/core'; -import { BehaviorSubject } from 'rxjs'; - -@Injectable({ - providedIn: 'root', -}) -export class LoaderService { - public loading: BehaviorSubject = new BehaviorSubject(false); - - constructor() {} - - startLoading(): void { - this.loading.next(true); - } - endLoading(): void { - this.loading.next(false); - } -} diff --git a/app2/src/app/services/localStorageService/scenarioStorageService.service.ts b/app2/src/app/services/localStorageService/scenarioStorageService.service.ts deleted file mode 100644 index 7952d49e..00000000 --- a/app2/src/app/services/localStorageService/scenarioStorageService.service.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { TestScenario } from '../../classes/testScenario'; - -export class ScenarioStorageService { - private _path: string; - constructor() { - this._path = 'scenarios'; - } - - public getById(id: string): Promise { - return chrome.storage.local - .get(id) - .then((data: { [key: string]: string }) => { - if (Object.keys(data).length === 0) { - throw Error(); - } - return TestScenario.fromJSON(data[Object.keys(data)[0]]); - }); - } - - public save(entity: TestScenario): Promise { - return this.getIdList() - .then((ids: string[]) => { - if ( - !ids.find((id) => { - return id === entity.id; - }) - ) { - //create scenario - ids.push(entity.id); - return this.storeIdList(ids).then(() => { - return this.storeEntity(entity); - }); - } else { - //update scenario - return this.storeEntity(entity); - } - }) - .catch(() => { - return this.storeIdList([entity.id]).then(() => { - return this.storeEntity(entity); - }); - }); - } - - public getAll(): Promise { - return this.getIdList() - .then((ids: string[]) => { - return chrome.storage.local - .get(ids) - .then((data: { [key: string]: string }) => { - if (data) { - return Object.values(data).map((d) => TestScenario.fromJSON(d)); - } else { - return []; - } - }); - }) - .catch(() => { - return []; - }); - } - - public async removeScenario(entity: TestScenario): Promise { - const scenarioId = entity.id; - let ids = await this.getIdList(); - ids = ids.filter((id) => id !== scenarioId); - await this.removeEntity(scenarioId); - return this.storeIdList(ids); - } - - private getIdList(): Promise { - return chrome.storage.local - .get([this._path]) - .then((items: { [key: string]: string[] }) => { - const itemIds = items['scenarios']; - if (itemIds) { - return itemIds; - } else { - throw Error(); - } - }); - } - - private storeIdList(ids: string[]): Promise { - const scenList: { [key: string]: string[] } = {}; - scenList[this._path] = ids; - return chrome.storage.local.set(scenList); - } - - private storeEntity(entity: TestScenario): Promise { - const storage: { [key: string]: string } = {}; - storage[entity.id] = entity.toString(); - return chrome.storage.local.set(storage); - } - - private removeEntity(entityId: string): Promise { - return chrome.storage.local.remove(entityId); - } -} diff --git a/app2/src/app/services/localStorageService/settingsStorageService.service.ts b/app2/src/app/services/localStorageService/settingsStorageService.service.ts deleted file mode 100644 index ef908610..00000000 --- a/app2/src/app/services/localStorageService/settingsStorageService.service.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Inject } from '@angular/core'; -import { CodeStyles } from 'src/app/scenario/codeService/codeService.service'; - -export type AppSettings = { - codeStyle: CodeStyles; - reloadPageDefault: boolean; - manualReplayMode: boolean; - replayDelay: number; -}; - -@Inject({ - providedIn: 'root', -}) -export class SettingsStorageService { - private _settings!: AppSettings; - constructor() { - this._settings = SettingsStorageService.getDefaults(); - this.initService(); - } - - public static getDefaults(): AppSettings { - return { - codeStyle: CodeStyles.OPA5, - reloadPageDefault: true, - manualReplayMode: true, - replayDelay: 0.5, - }; - } - - private async initService(): Promise { - const values = await chrome.storage.local.get('settings'); - if (values['settings']) { - this._settings = JSON.parse(values['settings']); - } - } - - public get settings(): AppSettings { - return this._settings; - } - - public get codeStyle(): CodeStyles { - return this._settings.codeStyle; - } - - public set codeStyle(style: CodeStyles) { - this._settings.codeStyle = style; - - const storage: { [key: string]: string } = {}; - storage['settings'] = JSON.stringify(this._settings); - chrome.storage.local.set(storage); - } - - public get pageReload(): boolean { - return this._settings.reloadPageDefault; - } - - public set pageReload(reload: boolean) { - this._settings.reloadPageDefault = reload; - - const storage: { [key: string]: string } = {}; - storage['settings'] = JSON.stringify(this._settings); - chrome.storage.local.set(storage); - } - - public save(settings?: AppSettings): Promise { - if (settings) { - const storage: { [key: string]: string } = {}; - storage['settings'] = JSON.stringify(settings); - return chrome.storage.local.set(storage).then(() => { - this._settings = settings; - return { ...this._settings }; - }); - } else { - return Promise.resolve({ ...this._settings }); - } - } -} diff --git a/app2/src/app/services/messageService/message.service.ts b/app2/src/app/services/messageService/message.service.ts deleted file mode 100644 index 7c722f26..00000000 --- a/app2/src/app/services/messageService/message.service.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Injectable } from '@angular/core'; -import { MatDialog as MatDialog } from '@angular/material/dialog'; -import { MatSnackBar as MatSnackBar } from '@angular/material/snack-bar'; -import { ConfirmDialogComponent } from 'src/app/components/dialogs/confirm-dialog/confirm-dialog.component'; -import { - SnackDialogComponent, - SnackSeverity, -} from 'src/app/components/dialogs/snack-dialog/snack-dialog.component'; - -@Injectable({ - providedIn: 'root', -}) -export class MessageService { - constructor(private _snackBar: MatSnackBar, private dialog: MatDialog) {} - - public show(config: { - severity?: SnackSeverity; - title: string; - detail?: string; - icon?: string; - }) { - this._snackBar.openFromComponent(SnackDialogComponent, { - horizontalPosition: 'right', - verticalPosition: 'top', - duration: 2000, - panelClass: 'app-snack-class', - data: config, - }); - } - - public confirm(params: { - icon: string; - title: string; - message: string; - severity?: string; - withConfOption?: boolean; - confText?: string; - defaultConfirmValue?: boolean; - accept?: (val: any) => void; - dismiss?: () => void; - }): void { - const dialogRef = this.dialog.open(ConfirmDialogComponent, { - disableClose: true, - data: { - icon: params.icon || '', - summary: params.title, - detail: params.message, - severity: params.severity || '', - withConfOption: params.withConfOption, - confText: params.confText, - defaultConfirmValue: params.defaultConfirmValue, - }, - }); - dialogRef.afterClosed().subscribe((confOption: any) => { - if (confOption) { - if (params.accept) { - params.accept(confOption); - } - } else { - if (params.dismiss) { - params.dismiss(); - } - } - }); - } -} diff --git a/app2/src/app/services/replayService/replay.service.ts b/app2/src/app/services/replayService/replay.service.ts deleted file mode 100644 index d97011e6..00000000 --- a/app2/src/app/services/replayService/replay.service.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ChromeExtensionService } from '../chromeExtensionService/chrome_extension_service'; -import { RequestBuilder, RequestMethod } from '../../classes/requestBuilder'; -import { Step } from 'src/app/classes/Step'; -import { CodeStyles } from 'src/app/scenario/codeService/codeService.service'; - -@Injectable({ providedIn: 'root' }) -export class ReplayService { - constructor(private chr_ext_srv: ChromeExtensionService) {} - - public startReplay(startUrl: string): Promise { - return this.chr_ext_srv - .createTabByUrl(startUrl) - .then((tab: chrome.tabs.Tab) => { - const p = { - title: tab.title || '', - path: tab.url || tab.pendingUrl || '', - id: tab.id || 0, - icon: tab.favIconUrl || '', - }; - this.chr_ext_srv.setCurrentPage(p); - return this.chr_ext_srv.focus_page(p).then(() => { - return this.chr_ext_srv.connectToCurrentPage(); - }); - }); - } - - public stopReplay(): Promise { - return this.chr_ext_srv.disconnect(); - } - - public performAction(step: Step, codeStyle: CodeStyles): Promise { - const rb = new RequestBuilder(); - rb.setMethod(RequestMethod.POST); - rb.setUrl('/controls/action'); - rb.setBody({ - step: step, - useManualSelection: codeStyle === CodeStyles.OPA5, - }); - return this.chr_ext_srv.sendSyncMessage(rb.build()).then((msg) => { - if (msg.status !== 200) { - throw new Error(); - } - return; - }); - } -} diff --git a/app2/src/app/services/scenarioService/scenario.service.ts b/app2/src/app/services/scenarioService/scenario.service.ts deleted file mode 100644 index b99be713..00000000 --- a/app2/src/app/services/scenarioService/scenario.service.ts +++ /dev/null @@ -1,260 +0,0 @@ -import { Injectable } from '@angular/core'; - -import { v4 as uuidV4 } from 'uuid'; -import { ChromeExtensionService } from '../chromeExtensionService/chrome_extension_service'; -import { RequestBuilder, RequestMethod } from '../../classes/requestBuilder'; - -import { Page, TestScenario } from '../../classes/testScenario'; -import { ScenarioStorageService } from '../localStorageService/scenarioStorageService.service'; -import { - ClickStep, - Control, - InputStep, - IntermediateStep, - KeyPressStep, - Step, - StepType, - UnknownStep, - ValidationStep, -} from 'src/app/classes/Step'; - -@Injectable({ - providedIn: 'root', -}) -export class ScenarioService { - constructor( - private local_storage_service: ScenarioStorageService, - private chr_ext_srv: ChromeExtensionService - ) {} - - private cachedScenarios: TestScenario[] = []; - - public getAllScenarios(): Promise { - return this.local_storage_service.getAll(); - } - - public createScenarioFromRecording( - recording: any[], - ui5Version: string - ): TestScenario { - const ts = new TestScenario(this.createUUID(), Date.now()); - ts.version = ui5Version; - const stepTree = this.transformToAst( - this.reduceSteps(recording.map(Step.recordEventToStep)) - ); - const pages = this.createPages(stepTree); - pages.forEach((p) => p.steps.forEach((s) => s.applyPreSelection())); - pages.forEach((p) => ts.addPage(p)); - this.cachedScenarios.push(ts); - return ts; - } - - public getScenario(id: string): Promise { - const s = this.cachedScenarios.find((cs) => cs.id === id); - if (s) { - return Promise.resolve(s); - } else { - return this.local_storage_service - .getById(id) - .then((scen: TestScenario) => { - this.cachedScenarios.push(scen); - return scen; - }) - .catch(() => { - return undefined; - }); - } - } - - public saveScenario(scenario: TestScenario): Promise { - scenario.latestEdit = Date.now(); - return this.local_storage_service.save(scenario).then(() => { - this.cachedScenarios = this.cachedScenarios.filter( - (ts) => ts.id !== scenario.id - ); - this.cachedScenarios.push(scenario); - }); - } - - public deleteScenario(scenario: TestScenario): Promise { - return this.local_storage_service.removeScenario(scenario).then(() => { - this.cachedScenarios = this.cachedScenarios.filter( - (ts) => ts.id !== scenario.id - ); - }); - } - - public getAttributeFromControl( - controlID: string, - attributes: string[] - ): Promise<{ [key: string]: any }> { - const rb = new RequestBuilder(); - rb.setUrl('/controls(:id)'); - rb.setMethod(RequestMethod.GET); - rb.addPathParam('id', controlID); - rb.addSearchParam('attributes', '(' + attributes.join(' and ') + ')'); - return this.chr_ext_srv.sendSyncMessage(rb.build()); - } - - public validateStepUniqueness(step: Step): Promise { - const rb = new RequestBuilder(); - rb.setMethod(RequestMethod.GET); - if (step.useControlId) { - rb.setUrl('/controls(:id)'); - rb.addPathParam('id', `'${step.controlId}'`); - } else { - rb.setUrl('/controls'); - } - - rb.addSearchParam( - 'attributes', - JSON.stringify(step.controlAttributes.filter((att) => att.use)) - ); - - if (!step.useControlId) { - rb.addSearchParam('control_type', step.controlType); - } - - rb.addSearchParam('count', ''); - - if (this.chr_ext_srv.isConnectedToPage()) { - return this.chr_ext_srv - .sendSyncMessage(rb.build()) - .then((result: any) => { - return { data: result.message }; - }); - } else { - return this.chr_ext_srv - .createTabByUrl(step.actionLoc) - .then((tab: chrome.tabs.Tab) => { - const p = { - title: tab.title || '', - path: tab.url || tab.pendingUrl || '', - id: tab.id || 0, - icon: tab.favIconUrl || '', - }; - this.chr_ext_srv.setCurrentPage(p); - return this.chr_ext_srv.focus_page(p).then(() => { - return this.chr_ext_srv.connectToCurrentPage().then(() => { - return this.chr_ext_srv - .sendSyncMessage(rb.build()) - .then((result: any) => { - return { data: result.message }; - }); - }); - }); - }); - } - } - - public async getStep(scenario_id: string, step_id: string): Promise { - let scen = this.cachedScenarios.find((s) => s.id === scenario_id); - if (!scen) { - scen = await this.local_storage_service.getById(scenario_id); - this.cachedScenarios.push(scen); - } - const step = scen.testPages - .map((tp) => tp.steps) - .reduce((a, b) => [...a, ...b], []) - .find((s: Step) => s.stepId === step_id); - if (!step) { - return Promise.reject(); - } - return step; - } - - private reduceSteps(steps: IntermediateStep[]): IntermediateStep[][] { - return steps.reduce( - (a: IntermediateStep[][], b: IntermediateStep): any[] => { - const el = a.pop(); - if (!el) { - a.push([b]); - } else { - if (el[0].equalsTo(b) && b.actionType === StepType.KeyPress) { - el.push(b); - a.push(el); - } else { - a.push(el); - a.push([b]); - } - } - return a; - }, - [] - ); - } - - private transformToAst(steps: IntermediateStep[][]): IntermediateStep[] { - return steps.map((el) => { - let res: IntermediateStep = new UnknownStep(); - if (el.length === 1) { - res = el[0]; - } else { - if (el.length !== 0) { - res = this.transformToTypings(el); - } - } - return res; - }); - } - - private transformToTypings(parts: IntermediateStep[]): IntermediateStep { - const inputStep = parts.reduce((a: InputStep, b: IntermediateStep) => { - if (b instanceof KeyPressStep) { - a.addStep(b); - } else if (b instanceof ClickStep || b instanceof ValidationStep) { - a.actionLoc = b.actionLoc; - a.styleClasses = b.styleClasses; - a.recordReplaySelector = b.recordReplaySelector; - a.controlId = b.controlId; - a.controlType = b.controlType; - a.controlAttributes = b.controlAttributes; - a.controlBindings = b.controlBindings; - a.controlI18nTexts = b.controlI18nTexts; - } - return a; - }, new InputStep()); - inputStep.applyPreSelection(); - const temp = inputStep as IntermediateStep; - temp.view = parts[0] - ? parts[0].view - : { absoluteViewName: '', relativeViewName: '' }; - return temp; - } - - private createPages(stepTree: IntermediateStep[]): Page[] { - const pages: Page[] = []; - - stepTree.forEach((s) => { - const lastPage = pages.pop(); - if (!lastPage) { - const p = new Page('' + pages.length); - p.location = s.actionLoc; - p.view = s.view || { absoluteViewName: '', relativeViewName: '' }; - delete s.view; - p.addStep(s); - pages.push(p); - } else { - if (lastPage.location === s.actionLoc) { - delete s.view; - lastPage.addStep(s); - pages.push(lastPage); - } else { - pages.push(lastPage); - const p = new Page('' + pages.length); - p.location = s.actionLoc; - p.view = s.view || { absoluteViewName: '', relativeViewName: '' }; - delete s.view; - p.addStep(s); - pages.push(p); - } - } - }); - - return pages; - } - - private createUUID(): string { - return uuidV4(); - } -} diff --git a/app2/src/assets/scripts/communication_inject.js b/app2/src/assets/scripts/communication_inject.js deleted file mode 100644 index f6d3615c..00000000 --- a/app2/src/assets/scripts/communication_inject.js +++ /dev/null @@ -1,311 +0,0 @@ -(() => { - class API { - static own_id = "ui5_tr_handler"; - static key_ident = `(\\(\\S+\\))?`; - static nav_prop = `(\\/\\S+)?`; - - #root = ""; - #getter_expr = []; - #post_expr = []; - #getter_routes = []; - #post_routes = []; - - webSocket; - - /** - * Constructor of the API - * - * @param {string} [sRoot] optional root path, used as prefix bevor every route - */ - contructor(sRoot) { - this.#root = sRoot || ""; - } - - //#region public - /** - * Set a getter route for the api - * - * @param {string} sRoute which should be handled - * @param {function(req,res)=>void} callback function handling calls to the route - */ - get(sRoute, callback) { - const map_id = this.#getter_expr.length; - const { route, pars } = this.#prepareRoute(sRoute); - - const prefix = this.#root + route; - const regexp = new RegExp(`((${prefix})((\\?\\S+)$)?)$`, 'gm'); - - this.#getter_expr.push({ regex: regexp, id: map_id, paramList: pars }); - this.#getter_routes[map_id] = callback; - } - - /** - * Set a post route for the api - * - * @param {string} sRoute - * @param {function(req,res)=>void} callback function handling calls to the route - */ - post(sRoute, callback) { - const prefix = this.#root + sRoute; - const regexp = new RegExp(`(${prefix})${API.key_ident}${API.nav_prop}`, 'gm'); - const map_id = this.#post_expr.length; - this.#post_expr.push({ regex: regexp, id: map_id }); - this.#post_routes[map_id] = callback; - } - - /** - * Start the api and use the listener id as filter for all message events - * - * @param {string} sListenerId for the "message" events to listen on {event.data.origin} - */ - listen(sListenerId) { - const page_origin = new URL(location.href).origin; - - window.addEventListener("message", (oEvent) => { - if (oEvent.origin === page_origin && oEvent.data.origin === sListenerId) { - this.#handleEvent(oEvent, sListenerId); - } - }); - - this.webSocket = { - send_record_step: (step) => { - window.postMessage({ - origin: `${sListenerId}_${API.own_id}`, message: { - instantType: 'record-token', - content: step - } - }); - }, - send_instant_message: (sMsg) => { - window.postMessage({ - origin: `${sListenerId}_${API.own_id}`, message: { - instantType: 'instant', - content: sMsg - } - }) - } - } - } - //#endregion public - //#region private - #prepareRoute(sRoute) { - const pathParamIdentifier = /\<([a-zA-Z0-9])+\>/gm; - const pathParams = []; - const matches = sRoute.match(pathParamIdentifier); - let enclosingEnd = ''; - let enclosingFront = ''; - if (matches) { - matches.forEach((par, i) => { - const paramName = par.replace('<', '').replace('>', ''); - sRoute = sRoute.replace(par, '%*'); - const front = sRoute.indexOf('%'); - const end = sRoute.indexOf('*'); - const len = sRoute.length; - if (end - 1 === len) { - sRoute += "$"; - } else { - enclosingEnd = sRoute[end + 1]; - sRoute = sRoute.substring(0, end + 1) + '\\' + sRoute.substring(end + 1); - } - if (front === 0) { - sRoute = '^' + sRoute; - } else { - enclosingFront = sRoute[front - 1]; - sRoute = sRoute.substring(0, front - 1) + '\\' + sRoute.substring(front - 1) - } - - pathParams.push({ index: i, name: paramName, encFront: enclosingFront, encEnd: enclosingEnd }); - - sRoute = sRoute.replaceAll('%*', "([a-zA-Z0-9'-])+"); - }); - return { route: sRoute, pars: pathParams }; - } else { - return { route: sRoute, pars: pathParams }; - } - } - - #handleEvent(oEvent, sExt_id) { - const answer_origin = `${sExt_id}_${API.own_id}`; - const event_id = oEvent?.data?.message_id; - const req_type = oEvent?.data?.method; - - switch (req_type) { - case 'GET': - this.#handleGet(oEvent?.data, this.#provideResponseCallback(event_id, answer_origin)); - break; - case 'POST': - this.#handlePost(oEvent?.data, this.#provideResponseCallback(event_id, answer_origin)) - break; - default: - this.#provideResponseCallback(event_id, answer_origin)({ status: 501, error: `Request type (${req_type}) not provided` }); - } - } - - #provideResponseCallback(event_id, answer_origin) { - return (oResponseData) => { - window.postMessage({ origin: answer_origin, response: { message_id: event_id, ...oResponseData } }); - }; - } - - #handleGet(oEventData, res) { - const url = oEventData.url; - if (!url) { - res({ status: 400, error: `Bad Request no url provided!` }); - return; - } - const url_obj = new URL(`http://${API.own_id}/${url}`); - - const handler = this.#getter_expr.find(r => r.regex.test(decodeURIComponent(url_obj.pathname))); - if (!handler) { - res({ status: 404, error: `The requested ressource does not exist!` }); - return; - } - //reset the regex because of the global 'g' modifier - this.#getter_expr.forEach(r => r.regex.lastIndex = 0); - const req = {} - req.pathParams = this.#retrievePathParameters(url, handler); - - req.searchParams = {}; - for (var spkey of url_obj.searchParams.keys()) { - req.searchParams[spkey] = url_obj.searchParams.get(spkey); - } - - req.url = url; - - this.#getter_routes[handler.id](req, res); - } - - #handlePost(oEventData, res) { - const url = oEventData.url; - if (!url) { - res({ status: 400, error: `Bad Request no url provided!` }); - return; - } - const url_obj = new URL(`http://${API.own_id}/${url}`); - - const handler = this.#post_expr.find(r => r.regex.test(decodeURIComponent(url_obj.pathname))); - if (!handler) { - res({ status: 404, error: `The requested ressource does not exist!` }); - return; - } - //reset the regex because of the global 'g' modifier - this.#post_expr.forEach(r => r.regex.lastIndex = 0); - const req = {} - var parts = [decodeURIComponent(url.pathname).matchAll(handler.regex)][0]; - const key = parts[2]; - const navigation = parts[3]; - - req.pathParam = {}; - req.pathParam['key'] = key; - req.pathParam['navigation'] = navigation; - - req.searchParams = {}; - for (var spkey of url_obj.searchParams.keys()) { - req.searchParams[spkey] = url_obj.searchParams.get(spkey); - } - - req.url = url; - req.body = oEventData.body; - - this.#post_routes[handler.id](req, res); - } - - #retrievePathParameters(sUrl, handler) { - const paramMap = {}; - handler.paramList.forEach(param => { - const parRegex = new RegExp('\\' + param.encFront + "([a-zA-Z0-9'-])+" + "\\" + param.encEnd); - const res = sUrl.match(parRegex); - if (res) { - paramMap[param.name] = res[0].replace(param.encFront, '').replace(param.encEnd, ''); - } else { - paramMap[param.name] = undefined; - } - sUrl = sUrl.replace(parRegex, '[done]'); - }) - return paramMap; - - //#endregion private - } - } - - //#region setup com - const communicationService = new API(location.href.origin + '/page'); - const ext_id = document.getElementById('UI5TR-communication-js').getAttribute('data-id'); - - communicationService.get('/controls', (req, res) => { - if (req.searchParams.count === '') { - const controlType = req.searchParams.control_type; - const attributes = decodeURIComponent(req.searchParams.attributes); - const recorderInstance = window.ui5TestRecorder?.recorder; - if (recorderInstance) { - let elements = recorderInstance.getElementsByAttributes(controlType, JSON.parse(attributes)); - res({ status: 200, message: elements.length }); - } else { - res({ status: 500, message: 'No recorder inject found!' }); - } - } - }); - - communicationService.get("/controls()", (req, res) => { - const recorderInstance = window.ui5TestRecorder?.recorder; - if (recorderInstance) { - if (req.searchParams.count === '') { - let elements = []; - if (req.pathParams.id.indexOf("'") > -1) { - elements = recorderInstance.getElementsForId(req.pathParams.id.replaceAll("'", '')) - } else { - elements = recorderInstance.getElementsForId(req.pathParams.id); - } - res({ status: 200, message: elements.length }); - } - } else { - res({ status: 500, message: 'No recorder inject found!' }); - } - }); - - communicationService.post('/controls/action', (req, res) => { - const recorderInstance = window.ui5TestRecorder?.recorder; - if (recorderInstance) { - const body = req.body; - recorderInstance.executeAction({ step: body.step, useSelectors: body.useManualSelection }).then(() => { - res({ status: 200, message: 'executed' }); - }).catch((e) => { - res({ status: 500, message: e }); - }); - } else { - res({ status: 500, message: 'No recorder inject found!' }); - } - }); - - communicationService.post('/pageInfo/disconnected', (req, res) => { - if (ui5TestRecorder.recorder) { - ui5TestRecorder.recorder.showToast('UI5 Journey Recorder disconnected', { - duration: 2000, - autoClose: true - }) - } - }); - - communicationService.get('/pageInfo/connected', (req, res) => { - res({ status: 200, message: 'Connected' }); - }); - - communicationService.get('/pageInfo/version', (req, res) => { - const version = ui5TestRecorder?.recorder?.getUI5Version(); - if (version) { - res({ status: 200, message: version }); - } else { - res({ status: 400, message: '' }); - } - }); - - communicationService.listen(ext_id); - - window.ui5TestRecorder = { - ...window.ui5TestRecorder, - ... { - communication: communicationService - } - } - //#endregion setup com -})(); diff --git a/app2/src/assets/scripts/content_inject.js b/app2/src/assets/scripts/content_inject.js deleted file mode 100644 index 410c8c30..00000000 --- a/app2/src/assets/scripts/content_inject.js +++ /dev/null @@ -1,81 +0,0 @@ -(function () { - "use strict"; - - //DOM-node tags - const TAG_ID_PREFIX = "UI5TR-" - const EXT_ID = chrome.runtime.id; - const page_origin = new URL(location.href).origin; - let port; - - console.log('injected'); - - function injectJS() { - console.log('--- Inject UI5 Journey Recorder JS ---'); - let script = document.createElement('script'); - script.id = `${TAG_ID_PREFIX}-js`; - script.src = chrome.runtime.getURL('/assets/scripts/page_inject.js'); - script.defer = "defer"; - document.head.prepend(script); - } - - function commJS() { - console.log('--- Inject Communication JS ---'); - let script = document.createElement('script'); - script.id = `${TAG_ID_PREFIX}communication-js`; - script.src = chrome.runtime.getURL('/assets/scripts/communication_inject.js'); - script.setAttribute('data-id', EXT_ID); - script.defer = "defer"; - document.head.prepend(script); - } - - function setupInjectCSS() { - let css = '.injectClass { box-shadow: 0 0 2px 2px red, inset 0 0 2px 2px red; }'; - let head = document.head || document.getElementsByTagName('head')[0]; - let style = document.createElement('style'); - - style.id = "UI5TR--css"; - style.appendChild(document.createTextNode(css)); - - head.prepend(style); - } - - function setup_port_passthrough() { - port = chrome.runtime.connect({ name: "ui5_tr" }); - port.onMessage.addListener((msg) => { - window.postMessage({ - origin: EXT_ID, - ...msg - }) - }); - - port.onDisconnect.addListener(() => { - window.postMessage({ - origin: EXT_ID, - ...{ - url: '/pageInfo/disconnected', - method: 'POST', - message_id: -1 - } - }); - document.getElementById(`${TAG_ID_PREFIX}communication-js`).remove(); - document.getElementById(`${TAG_ID_PREFIX}-js`).remove(); - document.getElementById(`${TAG_ID_PREFIX}-css`).remove(); - }); - - const page_id = EXT_ID + '_ui5_tr_handler'; - window.addEventListener("message", (event) => { - if (event.data.origin === page_id && event.origin === page_origin) { - port.postMessage({ data: event.data.message || event.data.response }); - } - }) - - window.addEventListener("beforeunload", () => { - port.disconnect(); - }) - } - - injectJS(); - commJS(); - setupInjectCSS(); - setup_port_passthrough(); -}()); diff --git a/app2/src/assets/scripts/page_inject.js b/app2/src/assets/scripts/page_inject.js deleted file mode 100644 index ec62bf04..00000000 --- a/app2/src/assets/scripts/page_inject.js +++ /dev/null @@ -1,501 +0,0 @@ -(() => { - class RecorderInject { - #lastDetectedElement; - #rr; - #toast; - - constructor() { - try { - this.#rr = sap.ui.requireSync('sap/ui/test/RecordReplay'); - } catch (e) { - this.#rr = null; - } - try { - this.#toast = sap.ui.requireSync('sap/m/MessageToast'); - } catch (e) { - this.#toast = null; - } - } - - //#region public access points - setupHoverSelectEffect() {//append style class - //append style adding and removement - document.onmouseover = e => { - var e = e || window.event; - var el = e.target || e.srcElement; - var ui5El = this.#getUI5Element(el); - - if (ui5El && ui5El.addStyleClass) { - ui5El.addStyleClass('injectClass'); - } - - if (this.#lastDetectedElement && this.#lastDetectedElement.removeStyleClass && ui5El && this.#lastDetectedElement.getId() !== ui5El.getId()) { - this.#lastDetectedElement.removeStyleClass('injectClass'); - } - this.#lastDetectedElement = ui5El; - } - - document.onmouseout = e => { - var e = e || window.event; - var el = e.target || e.srcElement; - var ui5El = this.#getUI5Element(el); - - if (ui5El && ui5El.removeStyleClass) { - ui5El.removeStyleClass('injectClass'); - } - }; - } - - setupClickListener() { - document.onclick = (e) => { - let event = e || window.event; - let el = event.target || event.srcElement; - let ui5El = this.#getUI5Element(el); - - const webSocket = window?.ui5TestRecorder?.communication?.webSocket; - if (webSocket) { - const message = { - type: 'clicked', - control: { - id: ui5El.sId, - type: ui5El.getMetadata().getElementName(), - classes: ui5El.aCustomStyleClasses, - properties: this.#getUI5ElementProperties(ui5El), - bindings: this.#getUI5ElementBindings(ui5El), - view: this.#getViewProperties(ui5El), - events: { - press: ui5El.getMetadata().getEvent('press') !== undefined || ui5El.getMetadata().getEvent('click') !== undefined - } - }, - location: window.location.href - } - this.#rr.findControlSelectorByDOMElement({ domElement: ui5El.getDomRef() }).then((c) => { - message.control.recordReplaySelector = c; - webSocket.send_record_step(message); - }).catch(err => { console.log(err.message) }); - - if (ui5El && ui5El.focus) { - ui5El.focus(); - let childs = ui5El.getDomRef().querySelectorAll('input, select, textarea'); - if (childs.length === 0 && ui5El.getDomRef().shadowRoot) { - childs = ui5El.getDomRef().shadowRoot.querySelectorAll('input, select, textarea'); - } - for (let child of childs) { - child.onkeypress = (e) => { - const key_message = { - type: 'keypress', - key: e.key, - keyCode: e.keyCode, - control: { - id: ui5El.sId, - type: ui5El.getMetadata().getElementName(), - classes: ui5El.aCustomStyleClasses, - properties: this.#getUI5ElementProperties(ui5El), - bindings: this.#getUI5ElementBindings(ui5El), - view: this.#getViewProperties(ui5El), - events: { - press: ui5El.getMetadata().getEvent('press') !== undefined - } - }, - location: window.location.href - } - this.#rr.findControlSelectorByDOMElement({ domElement: ui5El.getDomRef() }).then((c) => { - key_message.control.recordReplaySelector = c; - webSocket.send_record_step(key_message); - }).catch(err => { console.log(err.message) }); - } - } - } - } else { - console.error('UI5-Testrecorder: ', 'No communication websocket found!'); - } - } - } - - getElementsForId(id) { - return Object.values(this.#getUI5Elements()).filter(el => el.getId() === id); - } - - getElementsBySelectors(controlSelectors) { - let elements = this.#getUI5Elements(); - // filter by control_type - elements = Object.values(elements).filter(el => el.getMetadata().getElementName() === controlSelectors.control_type); - // filter by control.properties - elements = elements.filter(el => { - const byProperties = controlSelectors.properties - // only take the properties which should be used for identification - .filter(p => p.use) - // create getter function names and expected values from control.properties - .map(attribute => ({ key: 'get' + Utils.upperCaseFirstLetter(attribute.name), value: attribute.value })) - // create list of expection-results - .map(executeMatcher => el[executeMatcher.key]() === executeMatcher.value) - // check if all selected attributes really match - .reduce((a, b) => a && b, true); - - const byBindings = controlSelectors.bindings.filter(b => b.use) - .map(b => { - const info = el.mBindingInfos[b.propertyName]; - if (!info) { - return false; - } - if (info.parts.length === 1) { - if (info.parts[0].path !== b.propertyPath) { - return false; - } - if (!info.binding || !info.binding.oContext || !(info.binding.oContext.sPath !== b.modelPath)) { - return false; - } - if (!info.binding || !info.binding.oValue !== b.bindingValue) { - return false; - } - } else if (info.parts.length > 1) { - const contains = info.parts.find(p => b.propertyPath === p.path); - if (!contains) { - return false; - } - const parting = info.binding.aBindings.find(ab => ab.sPath === b.propertyPath); - if (!parting) { - return false; - } - if (parting.oValue !== b.bindingValue) { - return false; - } - } - return true; - }) - .reduce((a, b) => a && b, true); - - const byI18ns = controlSelectors.i18nTexts.filter(i18nT => i18nT.use) - .map(i18n => { - const info = el.mBindingInfos[i18n.propertyName]; - if (!info) { - return false; - } - - if (info.parts.length === 1) { - if (info.parts[0].path !== b.propertyPath && info.parts[0].model !== 'i18n') { - return false; - } - if (!info.binding || !info.binding.oContext || !(info.binding.oContext.sPath !== b.modelPath)) { - return false; - } - if (!info.binding || !info.binding.oValue !== b.bindingValue) { - return false; - } - } else if (info.parts.length > 1) { - //adding an additional filter to find only 'i18n' bindings - const contains = info.parts.filter(p => p.model && p.model === 'i18n').find(p => b.propertyPath === p.path); - - if (!contains) { - return false; - } - const parting = info.binding.aBindings.find(ab => ab.sPath === b.propertyPath); - if (!parting) { - return false; - } - if (parting.oValue !== b.bindingValue) { - return false; - } - } - return true; - }) - .reduce((a, b) => a && b, true); - return byProperties && byBindings && byI18ns; - }); - return elements; - } - - executeAction(oEvent) { - if (this.#rr) { - //only for RecordReplay possible to select to use selectors or not - return this.#executeByRecordReplay(oEvent.step, oEvent.useSelectors); - } else { - return this.#executeByPure(oEvent.step); - } - } - - #executeByRecordReplay(oItem, bUseSelectors) { - const oSelector = bUseSelectors ? this.#createSelectorFromItem(oItem) : oItem.record_replay_selector; - - switch (oItem.action_type) { - case "clicked": - return this.#rr.interactWithControl({ - selector: oSelector, - interactionType: this.#rr.InteractionType.Press - }) - case 'validate': - return this.#rr.findAllDOMElementsByControlSelector({ - selector: oSelector - }).then(result => { - if (result.length > 1) { - throw new Error(); - } - return; - }); - case 'input': - return this.#rr.interactWithControl({ - selector: oSelector, - interactionType: this.#rr.InteractionType.EnterText, - enterText: oItem.keys.reduce((a, b) => a + b.key_char, '') - }) - default: - return Promise.reject('ActionType not defined'); - } - } - - #createSelectorFromItem(oItem) { - const oSelector = {}; - if (oItem.control.control_id.use) { - oSelector['id'] = oItem.control.control_id.id; - return oSelector; - } - oSelector['controlType'] = oItem.control.control_type; - if (oItem.control.bindings) { - const bindings = oItem.control.bindings.filter(b => b.use); - if (bindings.length === 1) { - oSelector['bindingPath'] = { path: bindings[0].modelPath, propertyPath: bindings[0].propertyPath } - } - } - if (oItem.control.i18nTexts) { - const i18ns = oItem.control.i18nTexts.filter(b => b.use); - if (i18ns.length === 1) { - oSelector['i18NText'] = { key: i18ns[0].propertyPath, propertyName: i18ns[0].propertyName } - } - } - //just a current workaround - if (oItem.record_replay_selector.viewId) { - oSelector['viewId'] = oItem.record_replay_selector.viewId; - } - return oSelector; - } - - #executeByPure(oItem) { - let elements = this.#getUI5Elements(); - if (oItem.control.control_id.use) { - elements = elements.filter(el => el.getId() === oItem.control.control_id); - } else { - elements = this.getElementsBySelectors(oItem.control); - } - - if (elements.length !== 1) { - return Promise.reject(); - } - - switch (oItem.action_type) { - case "clicked": - this.#executeClick(elements[0].getDomRef()); - return Promise.resolve(); - case "validate": - return Promise.resolve(); - case "input": - this.#executeTextInput(elements[0], oItem); - return Promise.resolve(); - default: - return Promise.reject(`Action Type (${oItem.action_type}) not defined`); - } - } - - showToast(sMessage, props) { - this.#toast.show(sMessage, props); - } - - getUI5Version() { - return sap.ui.version; - } - //#endregion public access points - - //#region private - #getUI5Element(el) { - let UIElements = this.#getUI5Elements(); - var ui5El = UIElements[el.id]; - //check if we found an ui5 element and if this contains a parent. - //otherwise it is a nested property and not usable for testing - if (!ui5El || (ui5El && !ui5El.getParent())) { - let parent = el; - let found = false; - while (!found) { - if (parent && UIElements[parent.id] && UIElements[parent.id].getParent() && UIElements[parent.id].addStyleClass) { - found = true; - ui5El = UIElements[parent.id]; - } - parent = parent.parentNode; - if (!parent) { - break; - } - } - /* if (ui5El) { - console.log('UI5El found: ' + ui5El.getId()); - } */ - } - return ui5El - } - - #getUI5Elements() { - //>= 1.67 - if (sap.ui.core.Element && sap.ui.core.Element.registry) { - return this.#getElements_1_67_and_post(); - } else { - return this.#getElements_pre_1_67(); - } - } - - #getElements_pre_1_67() { - let core; - const fakePlugin = { - startPlugin: realCore => core = realCore, - stopPlugin: _ => { } - }; - - sap.ui.getCore().registerPlugin(fakePlugin); - sap.ui.getCore().unregisterPlugin(fakePlugin); - return core.mElements; - } - - #getElements_1_67_and_post() { - return sap.ui.core.Element.registry.all(); - } - - #getUI5ElementProperties(el) { - // retrieve the direct public available methods - return el.getMetadata()._aPublicMethods - // reduce them to the "getter" only - .filter(m => m.startsWith("get")) - // create the properties object by collect and execute all getter - .reduce((a, b) => { - const key = Utils.lowerCaseFirstLetter(b.replace('get', '')); - const value = el[b](); - if (typeof value !== 'object') { - a[key] = value; - } else { - try { - JSON.stringify(value); - a[key] = value; - } catch (e) { } - } - return a; - }, {}) - } - - #getUI5ElementBindings(el) { - return Object.keys(el.mBindingInfos) - .map(k => { - let first = el.mBindingInfos[k].parts.map(b => { - const c = {}; - c.key = k; - c.i18n = b.model === 'i18n'; - c.propertyPath = b.path; - c.model = b.model; - return c; - }); - if (first.length > 1) { - first = first.map(f => { - const binding = el.mBindingInfos[f.key].binding.aBindings.find(ab => ab.sPath === f.propertyPath); - if (binding) { - f.modelPath = binding.oContext?.sPath; - f.value = binding.oValue; - } - return f; - }) - } else if (first.length === 1) { - const binding = el.mBindingInfos[first[0].key].binding; - if (binding) { - first[0].modelPath = binding.oContext?.sPath; - first[0].value = binding.oValue; - } - } - - return first; - }) - .reduce((b, a) => [...a, ...b], []); - } - - #getViewProperties(ui5El) { - let curEl = ui5El; - while (curEl && !curEl.getViewName) { - curEl = curEl.getParent(); - } - if (!curEl) { - //assume we have ui5 element and can go upwards by substracting the last part of the id to get the information - const newId = ui5El.getId().substring(0, ui5El.getId().lastIndexOf('-')); - curEl = this.#getUI5Elements()[newId]; - while (curEl && !curEl.getViewName) { - curEl = curEl.getParent(); - } - } - - return { - absoluteViewName: curEl?.getViewName() || '', - relativeViewName: curEl?.getViewName().split(".").pop() || '' - }; - } - - #executeClick(el) { - const mouseDownEvent = new MouseEvent('mousedown', { - view: window, - bubbles: true, - cancelable: true - }); - mouseDownEvent.originalEvent = mouseDownEvent; //self refer - - var mouseUpEvent = new MouseEvent('mouseup', { - view: window, - bubbles: true, - cancelable: true - }); - mouseUpEvent.originalEvent = mouseUpEvent; //self refer - - var clickEvent = new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true - }); - clickEvent.originalEvent = clickEvent; - - el.dispatchEvent(mouseDownEvent); - el.dispatchEvent(mouseUpEvent); - el.dispatchEvent(clickEvent); - } - - #executeTextInput(ui5El, oItem) { - const domNode = ui5El.getDomRef(); - const sText = oItem.keys.reduce((a, b) => a + b.key_char, ''); - domNode.val(sText); - - var event = new KeyboardEvent('input', { - view: window, - data: sText, - bubbles: true, - cancelable: true, - }); - event.originalEvent = event; - domNode.dispatchEvent(event); - } - //#endregion - } - - class Utils { - static lowerCaseFirstLetter([first, ...rest], locale = navigator.language) { - return first === undefined ? '' : first.toLocaleLowerCase(locale) + rest.join(''); - } - - static upperCaseFirstLetter = ([first, ...rest], locale = navigator.language) => { - return first === undefined ? '' : first.toLocaleUpperCase(locale) + rest.join(''); - } - } - - const recorderInstance = new RecorderInject(document, window); - recorderInstance.setupHoverSelectEffect(); - recorderInstance.setupClickListener(); - recorderInstance.showToast("UI5 Journey Recorder successfully injected", { - duration: 2000, - autoClose: true - }) - - window.ui5TestRecorder = { - ...window.ui5TestRecorder, - ... { - recorder: recorderInstance, - utils: new Utils() - } - } -})(); diff --git a/app2/src/environments/environment.prod.ts b/app2/src/environments/environment.prod.ts deleted file mode 100644 index 3612073b..00000000 --- a/app2/src/environments/environment.prod.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const environment = { - production: true -}; diff --git a/app2/src/environments/environment.ts b/app2/src/environments/environment.ts deleted file mode 100644 index f56ff470..00000000 --- a/app2/src/environments/environment.ts +++ /dev/null @@ -1,16 +0,0 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -export const environment = { - production: false -}; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/app2/src/index.html b/app2/src/index.html deleted file mode 100644 index f954038e..00000000 --- a/app2/src/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - UI5 Journey Recorder - - - - - - - - - - - - - diff --git a/app2/src/main.ts b/app2/src/main.ts deleted file mode 100644 index c7b673cf..00000000 --- a/app2/src/main.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); diff --git a/app2/src/manifest.json b/app2/src/manifest.json deleted file mode 100644 index 421d726c..00000000 --- a/app2/src/manifest.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "manifest_version": 3, - "name": "UI5 Journey Recorder", - "short_name": "UI5 Journey Rec", - "description": "A point-and-click adventure for your UI5 tests", - "version": "0.2.3", - "minimum_chrome_version": "88", - "background": { - "service_worker": "/assets/scripts/starter.js" - }, - "web_accessible_resources": [ - { - "resources": [ - "/assets/scripts/page_inject.js", - "/assets/scripts/communication_inject.js" - ], - "matches": [ - "" - ], - "use_dynamic_url": true - } - ], - "host_permissions": [ - "https://*/", - "http://*/" - ], - "permissions": [ - "storage", - "scripting" - ], - "optional_permissions": [ - "tabs" - ], - "action": {}, - "icons": { - "16": "/assets/icons/icon/16.png", - "32": "/assets/icons/icon/32.png", - "48": "/assets/icons/icon/48.png", - "64": "/assets/icons/icon/64.png", - "80": "/assets/icons/icon/80.png", - "96": "/assets/icons/icon/96.png", - "128": "/assets/icons/icon/128.png" - } -} diff --git a/app2/src/polyfills.ts b/app2/src/polyfills.ts deleted file mode 100644 index 429bb9ef..00000000 --- a/app2/src/polyfills.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/app2/src/styles.scss b/app2/src/styles.scss deleted file mode 100644 index 165559d1..00000000 --- a/app2/src/styles.scss +++ /dev/null @@ -1,70 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ -@import "~@angular/material/prebuilt-themes/indigo-pink.css"; - -:root { - --primary-color: #a01441 !important; -} - -html, -body { - height: 100%; - overflow: hidden; -} -body { - margin: 0; - font-family: Roboto, "Helvetica Neue", sans-serif; - font-size: 16px; - margin: 0; - padding: 0; -} - -.spacer { - flex: 1 1 auto; -} - -.flex { - display: flex; -} - -.horizontal { - flex-direction: row; -} - -.vertical { - flex-direction: column; -} - -.space-even { - justify-content: space-evenly; -} - -.space-between { - justify-content: space-between; -} - -.flex-end { - justify-content: flex-end; -} - -.center-cross { - align-items: center; -} - -.distance-left-05 { - margin-left: 0.5rem; -} - -.distance-right-05 { - margin-right: 0.5rem; -} - -.distance-right-1 { - margin-right: 1rem; -} -.distance-left-1 { - margin-left: 1rem; -} - -.no-margin { - margin: 0; -} diff --git a/app2/src/test.ts b/app2/src/test.ts deleted file mode 100644 index 51bb0206..00000000 --- a/app2/src/test.ts +++ /dev/null @@ -1,14 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); diff --git a/app2/test/Journey_220922_22_22.json b/app2/test/Journey_220922_22_22.json deleted file mode 100644 index 3a32dd31..00000000 --- a/app2/test/Journey_220922_22_22.json +++ /dev/null @@ -1,820 +0,0 @@ -{ - "created": 1663878301647, - "edited": 1663878326558, - "pages": [ - { - "page_id": "0", - "page_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3", - "page_steps": [ - { - "action_type": "clicked", - "style_classes": [ - "injectClass" - ], - "action_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3", - "record_replay_selector": { - "controlType": "sap.m.StandardListItem", - "viewId": "container-cart---homeView", - "bindingPath": { - "path": "/ProductCategories('AC')", - "propertyPath": "CategoryName" - } - }, - "control": { - "control_id": { - "id": "__item1-container-cart---homeView--categoryList-0", - "use": false - }, - "control_type": "sap.m.StandardListItem", - "properties": [ - { - "name": "title", - "value": "Accessories", - "use": false - }, - { - "name": "description", - "value": "", - "use": false - }, - { - "name": "icon", - "value": "", - "use": false - }, - { - "name": "iconInset", - "value": true, - "use": false - }, - { - "name": "iconDensityAware", - "value": true, - "use": false - }, - { - "name": "activeIcon", - "value": "", - "use": false - }, - { - "name": "info", - "value": "", - "use": false - }, - { - "name": "infoState", - "value": "None", - "use": false - }, - { - "name": "adaptTitleSize", - "value": true, - "use": false - }, - { - "name": "titleTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "infoTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "wrapping", - "value": false, - "use": false - }, - { - "name": "infoStateInverted", - "value": false, - "use": false - }, - { - "name": "wrapCharLimit", - "value": 0, - "use": false - }, - { - "name": "avatar", - "value": null, - "use": false - } - ], - "i18nTexts": [ - { - "propertyName": "tooltip", - "propertyPath": "openCategoryProducts", - "bindingValue": "Open category" - } - ], - "bindings": [ - { - "propertyName": "tooltip", - "bindingValue": "Accessories", - "modelPath": "/ProductCategories('AC')", - "propertyPath": "CategoryName" - }, - { - "propertyName": "counter", - "bindingValue": 34, - "modelPath": "/ProductCategories('AC')", - "propertyPath": "NumberOfProducts" - }, - { - "propertyName": "title", - "bindingValue": "Accessories", - "modelPath": "/ProductCategories('AC')", - "propertyPath": "CategoryName" - } - ] - } - } - ], - "view_information": { - "absoluteViewName": "sap.ui.demo.cart.view.Home", - "relativeViewName": "Home" - } - }, - { - "page_id": "1", - "page_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/category/AC", - "page_steps": [ - { - "action_type": "clicked", - "style_classes": [ - "injectClass" - ], - "action_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/category/AC", - "record_replay_selector": { - "controlType": "sap.m.ObjectListItem", - "viewId": "container-cart---category", - "bindingPath": { - "path": "/Products('HT-2001')", - "propertyPath": "PictureUrl" - } - }, - "control": { - "control_id": { - "id": "__item7-container-cart---category--productList-0", - "use": false - }, - "control_type": "sap.m.ObjectListItem", - "properties": [ - { - "name": "title", - "value": "10\" Portable DVD player", - "use": false - }, - { - "name": "number", - "value": "449,99", - "use": false - }, - { - "name": "numberUnit", - "value": "EUR", - "use": false - }, - { - "name": "intro", - "value": "", - "use": false - }, - { - "name": "icon", - "value": "./localService/mockdata/images/HT-2001.jpg", - "use": false - }, - { - "name": "activeIcon", - "value": "", - "use": false - }, - { - "name": "iconDensityAware", - "value": false, - "use": false - }, - { - "name": "markFavorite", - "value": false, - "use": false - }, - { - "name": "markFlagged", - "value": false, - "use": false - }, - { - "name": "showMarkers", - "value": false, - "use": false - }, - { - "name": "numberState", - "value": "None", - "use": false - }, - { - "name": "titleTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "introTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "numberTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "markLocked", - "value": false, - "use": false - }, - { - "name": "secondStatus", - "value": null, - "use": false - }, - { - "name": "markers", - "value": [], - "use": false - } - ], - "i18nTexts": [ - { - "propertyName": "tooltip", - "propertyPath": "openProductDetails", - "bindingValue": "Open details for" - } - ], - "bindings": [ - { - "propertyName": "tooltip", - "bindingValue": "10\" Portable DVD player", - "modelPath": "/Products('HT-2001')", - "propertyPath": "Name" - }, - { - "propertyName": "numberUnit", - "bindingValue": "EUR", - "modelPath": "/Products('HT-2001')", - "propertyPath": "CurrencyCode" - }, - { - "propertyName": "number", - "bindingValue": "449.99", - "modelPath": "/Products('HT-2001')", - "propertyPath": "Price" - }, - { - "propertyName": "title", - "bindingValue": "10\" Portable DVD player", - "modelPath": "/Products('HT-2001')", - "propertyPath": "Name" - }, - { - "propertyName": "icon", - "bindingValue": "sap/ui/demo/mock/images/HT-2001.jpg", - "modelPath": "/Products('HT-2001')", - "propertyPath": "PictureUrl" - }, - { - "propertyName": "type", - "propertyPath": "/system/phone", - "modelName": "device" - } - ] - } - } - ], - "view_information": { - "absoluteViewName": "sap.ui.demo.cart.view.Category", - "relativeViewName": "Category" - } - }, - { - "page_id": "2", - "page_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/category/AC/product/HT-2001", - "page_steps": [ - { - "action_type": "validate", - "style_classes": [ - "injectClass" - ], - "action_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/category/AC/product/HT-2001", - "record_replay_selector": { - "controlType": "sap.m.ObjectHeader", - "viewId": "container-cart---product", - "bindingPath": { - "path": "/Products('HT-2001')", - "propertyPath": "Name" - } - }, - "control": { - "control_id": { - "id": "__header0", - "use": false - }, - "control_type": "sap.m.ObjectHeader", - "properties": [ - { - "name": "title", - "value": "10\" Portable DVD player", - "use": false - }, - { - "name": "number", - "value": "449,99", - "use": false - }, - { - "name": "numberUnit", - "value": "EUR", - "use": false - }, - { - "name": "intro", - "value": "", - "use": false - }, - { - "name": "introActive", - "value": false, - "use": false - }, - { - "name": "titleActive", - "value": false, - "use": false - }, - { - "name": "icon", - "value": "", - "use": false - }, - { - "name": "iconActive", - "value": false, - "use": false - }, - { - "name": "iconAlt", - "value": "", - "use": false - }, - { - "name": "iconTooltip", - "value": "", - "use": false - }, - { - "name": "iconDensityAware", - "value": true, - "use": false - }, - { - "name": "imageShape", - "value": "Square", - "use": false - }, - { - "name": "markFavorite", - "value": false, - "use": false - }, - { - "name": "markFlagged", - "value": false, - "use": false - }, - { - "name": "showMarkers", - "value": false, - "use": false - }, - { - "name": "showTitleSelector", - "value": false, - "use": false - }, - { - "name": "numberState", - "value": "None", - "use": false - }, - { - "name": "condensed", - "value": false, - "use": false - }, - { - "name": "responsive", - "value": false, - "use": false - }, - { - "name": "fullScreenOptimized", - "value": false, - "use": false - }, - { - "name": "titleHref", - "value": "", - "use": false - }, - { - "name": "titleTarget", - "value": "", - "use": false - }, - { - "name": "introHref", - "value": "", - "use": false - }, - { - "name": "introTarget", - "value": "", - "use": false - }, - { - "name": "titleTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "introTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "numberTextDirection", - "value": "Inherit", - "use": false - }, - { - "name": "titleSelectorTooltip", - "value": "Options", - "use": false - }, - { - "name": "titleLevel", - "value": "H3", - "use": false - }, - { - "name": "firstStatus", - "value": null, - "use": false - }, - { - "name": "secondStatus", - "value": null, - "use": false - }, - { - "name": "additionalNumbers", - "value": [], - "use": false - }, - { - "name": "headerContainer", - "value": null, - "use": false - }, - { - "name": "markers", - "value": [], - "use": false - }, - { - "name": "ariaDescribedBy", - "value": [], - "use": false - }, - { - "name": "ariaLabelledBy", - "value": [], - "use": false - } - ], - "bindings": [ - { - "propertyName": "number", - "bindingValue": "449.99", - "modelPath": "/Products('HT-2001')", - "propertyPath": "Price" - }, - { - "propertyName": "title", - "bindingValue": "10\" Portable DVD player", - "modelPath": "/Products('HT-2001')", - "propertyPath": "Name" - } - ] - } - }, - { - "action_type": "clicked", - "style_classes": [ - "sapUiSmallMargin", - "injectClass" - ], - "action_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/category/AC/product/HT-2001", - "record_replay_selector": { - "id": "container-cart---product--productImage" - }, - "control": { - "control_id": { - "id": "container-cart---product--productImage", - "use": true - }, - "control_type": "sap.m.Image", - "properties": [ - { - "name": "src", - "value": "./localService/mockdata/images/HT-2001.jpg", - "use": false - }, - { - "name": "width", - "value": "100%", - "use": false - }, - { - "name": "height", - "value": "100%", - "use": false - }, - { - "name": "decorative", - "value": true, - "use": false - }, - { - "name": "alt", - "value": "", - "use": false - }, - { - "name": "useMap", - "value": "", - "use": false - }, - { - "name": "densityAware", - "value": false, - "use": false - }, - { - "name": "activeSrc", - "value": "", - "use": false - }, - { - "name": "mode", - "value": "Image", - "use": false - }, - { - "name": "backgroundSize", - "value": "cover", - "use": false - }, - { - "name": "backgroundPosition", - "value": "initial", - "use": false - }, - { - "name": "backgroundRepeat", - "value": "no-repeat", - "use": false - }, - { - "name": "lazyLoading", - "value": false, - "use": false - }, - { - "name": "ariaHasPopup", - "value": "None", - "use": false - }, - { - "name": "ariaDescribedBy", - "value": [], - "use": false - }, - { - "name": "ariaLabelledBy", - "value": [], - "use": false - }, - { - "name": "ariaDetails", - "value": [], - "use": false - } - ], - "bindings": [ - { - "propertyName": "src", - "bindingValue": "sap/ui/demo/mock/images/HT-2001.jpg", - "modelPath": "/Products('HT-2001')", - "propertyPath": "PictureUrl" - } - ] - } - }, - { - "action_type": "clicked", - "style_classes": [ - "injectClass" - ], - "action_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/category/AC/product/HT-2001", - "record_replay_selector": { - "id": "container-cart---product--lightBox-closeButton", - "searchOpenDialogs": true - }, - "control": { - "control_id": { - "id": "container-cart---product--lightBox-closeButton", - "use": true - }, - "control_type": "sap.m.Button", - "properties": [ - { - "name": "text", - "value": "Close", - "use": false - }, - { - "name": "type", - "value": "Transparent", - "use": false - }, - { - "name": "width", - "value": "", - "use": false - }, - { - "name": "enabled", - "value": true, - "use": false - }, - { - "name": "icon", - "value": "", - "use": false - }, - { - "name": "iconFirst", - "value": true, - "use": false - }, - { - "name": "activeIcon", - "value": "", - "use": false - }, - { - "name": "iconDensityAware", - "value": true, - "use": false - }, - { - "name": "textDirection", - "value": "Inherit", - "use": false - }, - { - "name": "ariaHasPopup", - "value": "None", - "use": false - }, - { - "name": "ariaDescribedBy", - "value": [], - "use": false - }, - { - "name": "ariaLabelledBy", - "value": [], - "use": false - } - ] - } - }, - { - "action_type": "clicked", - "style_classes": [ - "sapMBarChild", - "injectClass" - ], - "action_location": "https://ui5.sap.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/category/AC/product/HT-2001", - "record_replay_selector": { - "controlType": "sap.m.Button", - "viewId": "container-cart---product", - "i18NText": { - "propertyName": "text", - "key": "addToCartShort" - } - }, - "control": { - "control_id": { - "id": "__button10", - "use": false - }, - "control_type": "sap.m.Button", - "properties": [ - { - "name": "text", - "value": "Add to Cart", - "use": false - }, - { - "name": "type", - "value": "Emphasized", - "use": false - }, - { - "name": "width", - "value": "", - "use": false - }, - { - "name": "enabled", - "value": true, - "use": false - }, - { - "name": "icon", - "value": "", - "use": false - }, - { - "name": "iconFirst", - "value": true, - "use": false - }, - { - "name": "activeIcon", - "value": "", - "use": false - }, - { - "name": "iconDensityAware", - "value": true, - "use": false - }, - { - "name": "textDirection", - "value": "Inherit", - "use": false - }, - { - "name": "ariaHasPopup", - "value": "None", - "use": false - }, - { - "name": "ariaDescribedBy", - "value": [], - "use": false - }, - { - "name": "ariaLabelledBy", - "value": [], - "use": false - } - ], - "i18nTexts": [ - { - "propertyName": "text", - "propertyPath": "addToCartShort", - "bindingValue": "Add to Cart" - } - ] - } - } - ], - "view_information": { - "absoluteViewName": "sap.ui.demo.cart.view.Product", - "relativeViewName": "Product" - } - } - ], - "scenario_id": "26912794-5179-4b53-8e23-f2979d6552d3", - "scenario_name": "Journey_220922_22-22" -} \ No newline at end of file diff --git a/app2/test/test.json b/app2/test/test.json deleted file mode 100644 index 37fe0d02..00000000 --- a/app2/test/test.json +++ /dev/null @@ -1,309 +0,0 @@ -{ - "created": 1665843587196, - "edited": 1665843663704, - "pages": [ - { - "page_id": "0", - "page_location": "http://localhost:8080/index.html", - "page_steps": [ - { - "action_type": "validate", - "style_classes": [ - "injectClass" - ], - "action_location": "http://localhost:8080/index.html", - "record_replay_selector": { - "id": "mainUserInput", - "viewName": "test.Sample.tsapp.view.Main" - }, - "control": { - "control_id": { - "id": "__component0---Main--mainUserInput", - "use": true - }, - "control_type": "sap.ui.webc.main.Input", - "properties": [ - { - "name": "enabled", - "value": true, - "use": false - }, - { - "name": "name", - "value": "", - "use": false - }, - { - "name": "noTypeahead", - "value": false, - "use": false - }, - { - "name": "placeholder", - "value": "", - "use": false - }, - { - "name": "readonly", - "value": false, - "use": false - }, - { - "name": "required", - "value": false, - "use": false - }, - { - "name": "showClearIcon", - "value": false, - "use": false - }, - { - "name": "showSuggestions", - "value": false, - "use": false - }, - { - "name": "type", - "value": "Text", - "use": false - }, - { - "name": "value", - "value": "Helvetius Nagy", - "use": false - }, - { - "name": "valueState", - "value": "None", - "use": false - }, - { - "name": "valueStateMessage", - "value": "", - "use": false - }, - { - "name": "icon", - "value": [], - "use": false - }, - { - "name": "suggestionItems", - "value": [], - "use": false - }, - { - "name": "ariaLabelledBy", - "value": [], - "use": false - } - ], - "bindings": [ - { - "propertyName": "value", - "bindingValue": "Helvetius Nagy", - "propertyPath": "/Customers('TRAIH')/ContactName", - "use": false - } - ] - } - } - ], - "view_information": { - "absoluteViewName": "test.Sample.tsapp.view.Main", - "relativeViewName": "Main" - } - }, - { - "page_id": "1", - "page_location": "http://localhost:8080/index.html#/other", - "page_steps": [ - { - "action_type": "validate", - "style_classes": [ - "injectClass" - ], - "action_location": "http://localhost:8080/index.html#/other", - "record_replay_selector": { - "id": "NavFwdButton", - "viewName": "test.Sample.tsapp.view.Main" - }, - "control": { - "control_id": { - "id": "__component0---Main--NavFwdButton", - "use": true - }, - "control_type": "sap.ui.webc.main.Button", - "properties": [ - { - "name": "accessibilityAttributes", - "value": {}, - "use": false - }, - { - "name": "design", - "value": "Default", - "use": false - }, - { - "name": "enabled", - "value": true, - "use": false - }, - { - "name": "icon", - "value": "sap-icon://forward", - "use": false - }, - { - "name": "iconEnd", - "value": false, - "use": false - }, - { - "name": "submits", - "value": false, - "use": false - }, - { - "name": "text", - "value": "to Other view", - "use": false - }, - { - "name": "textDirection", - "value": "Inherit", - "use": false - }, - { - "name": "ariaLabelledBy", - "value": [], - "use": false - } - ], - "i18nTexts": [ - { - "propertyName": "text", - "propertyPath": "startPage.navButton.text", - "bindingValue": "to Other view", - "use": false - } - ] - } - }, - { - "action_type": "clicked", - "style_classes": [ - "sapMBtnIcon", - "sapMBtnIconLeft", - "injectClass" - ], - "action_location": "http://localhost:8080/index.html#/other", - "record_replay_selector": { - "controlType": "sap.ui.core.Icon", - "viewName": "test.Sample.tsapp.view.Other", - "properties": { - "src": { - "regex": { - "source": "nav\\-back" - } - } - } - }, - "control": { - "control_id": { - "id": "__component0---Other--OtherPage-navButton-iconBtn", - "use": false - }, - "control_type": "sap.ui.core.Icon", - "properties": [ - { - "name": "src", - "value": "sap-icon://nav-back", - "use": true - }, - { - "name": "size", - "value": "", - "use": false - }, - { - "name": "color", - "value": "", - "use": false - }, - { - "name": "hoverColor", - "value": "", - "use": false - }, - { - "name": "activeColor", - "value": "", - "use": false - }, - { - "name": "width", - "value": "", - "use": false - }, - { - "name": "height", - "value": "", - "use": false - }, - { - "name": "backgroundColor", - "value": "", - "use": false - }, - { - "name": "hoverBackgroundColor", - "value": "", - "use": false - }, - { - "name": "activeBackgroundColor", - "value": "", - "use": false - }, - { - "name": "decorative", - "value": true, - "use": false - }, - { - "name": "useIconTooltip", - "value": false, - "use": false - }, - { - "name": "alt", - "value": "", - "use": false - }, - { - "name": "noTabStop", - "value": false, - "use": false - }, - { - "name": "ariaLabelledBy", - "value": [], - "use": false - } - ] - } - } - ], - "view_information": { - "absoluteViewName": "test.Sample.tsapp.view.Main", - "relativeViewName": "Main" - } - } - ], - "scenario_id": "6de3707e-0b83-42fd-8b46-c183e5aa0b70", - "scenario_name": "test", - "ui5_version": "1.106.0" -} \ No newline at end of file diff --git a/app2/test/wdi5-scenario.test.js b/app2/test/wdi5-scenario.test.js deleted file mode 100644 index 7be5f42b..00000000 --- a/app2/test/wdi5-scenario.test.js +++ /dev/null @@ -1,20 +0,0 @@ -const { describe, it } = require("node:test"); -const assert = require("node:assert").strict; -const Wdi5CodeStrategy = require("../dist-codeservice/src/app/scenario/codeService/strategies/wdi5/Wdi5CodeStrategy.js").default; -const { - TestScenario, -} = require("../dist-codeservice/src/app/classes/testScenario.js"); - - -const _scenario = require("./test.json"); - -describe("wdi5 scenario generation", () => { - // scenario generation still has some flaws :) - it.skip("scenario", () => { - const scenario = TestScenario.fromJSON(JSON.stringify(_scenario)); - const result = new Wdi5CodeStrategy().generateTestCode(scenario); - assert.ok(false) - }); -}); - - diff --git a/app2/test/wdi5-step.test.js b/app2/test/wdi5-step.test.js deleted file mode 100644 index 92730dd8..00000000 --- a/app2/test/wdi5-step.test.js +++ /dev/null @@ -1,29 +0,0 @@ -const { describe, it } = require("node:test"); -const assert = require("node:assert").strict; -const { - TestScenario, -} = require("../dist-codeservice/src/app/classes/testScenario.js"); - -const _scenario = require("./test.json"); -const { default: Wdi5SingleStepStrategy } = require("../dist-codeservice/src/app/scenario/codeService/strategies/wdi5/Wdi5SingleStepStrategy.js") -const scenario = TestScenario.fromJSON(JSON.stringify(_scenario)); - -describe("wdi5 step generation", () => { - it("click", () => { - const expected = "await browser.asControl({\n\tselector: {\n\t\tcontrolType: \"sap.ui.core.Icon\",\n\t\tviewName: \"test.Sample.tsapp.view.Other\",\n\t\tproperties: {\n\t\t\tsrc: {\n\t\t\t\tregex: {\n\t\t\t\t\tsource: \"nav-back\",\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}).press();" - const clickstep = scenario.pages[1].page_steps[1] - const code = Wdi5SingleStepStrategy.generateSinglePressStep(clickstep) - assert.equal(code, expected) - }); - - it("validate/exists", () => { - const expected = "await browser.asControl({\n\tselector: {\n\t\tid: \"NavFwdButton\",\n\t\tviewName: \"test.Sample.tsapp.view.Main\",\n\t}\n})" - const existsStep = scenario.pages[1].page_steps[0] - const code = Wdi5SingleStepStrategy.generateSingleExistsStep(existsStep) - assert.equal(code, expected) - }) - - it.todo("input step") -}); - - diff --git a/app2/tsconfig-testing-only.json b/app2/tsconfig-testing-only.json deleted file mode 100644 index 0504535d..00000000 --- a/app2/tsconfig-testing-only.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.app.json", - "compilerOptions": { - "outDir": "./dist-codeservice/src", - "module": "CommonJS" - } -} \ No newline at end of file diff --git a/app2/tsconfig.app.json b/app2/tsconfig.app.json deleted file mode 100644 index ff4170de..00000000 --- a/app2/tsconfig.app.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [ - "chrome" - ] - }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/app2/tsconfig.doc.json b/app2/tsconfig.doc.json deleted file mode 100644 index c20b395c..00000000 --- a/app2/tsconfig.doc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "exclude": ["src/test.ts", "src/**/*.spec.ts"] -} diff --git a/app2/tsconfig.json b/app2/tsconfig.json deleted file mode 100644 index f1fadcf9..00000000 --- a/app2/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "ES2022", - "module": "es2020", - "lib": [ - "es2020", - "dom" - ], - "types": [ - "chrome" - ], - "useDefineForClassFields": false - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/app2/tsconfig.spec.json b/app2/tsconfig.spec.json deleted file mode 100644 index 04463b78..00000000 --- a/app2/tsconfig.spec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/app2/uglify-assets.js b/app2/uglify-assets.js deleted file mode 100644 index f117eb44..00000000 --- a/app2/uglify-assets.js +++ /dev/null @@ -1,56 +0,0 @@ -const UglifyJS = require('uglify-js'); -const fs = require('fs'); -const path = require('path'); - -const asset_script_path = 'dist/assets/scripts/'; -const map_path = 'source_maps'; -if (!fs.existsSync(path.join(__dirname, map_path))) { - fs.mkdirSync(path.join(__dirname, map_path)); -} - -const options = { - compress: { - drop_console: true - }, - sourceMap: {}, - nameCache: {} -}; - -function byte_size(size) { - const size_map = { - 0: 'B', - 1: 'kB', - 2: 'mB', - 3: 'gB' - }; - let divided = -1; - while (size > 1024) { - size = size / 1024.0; - divided++; - } - return `${Math.floor(size * 100) / 100.0} ${size_map[divided]}`; -} - -function show_compression(script_name, bytes_before, bytes_after) { - console.log(`${script_name} :: ${byte_size(bytes_before)} -> ${byte_size(bytes_after)} | ${Math.floor((bytes_after / bytes_before) * 10000) / 100.0} %`); -} - -let size_before = 0; -let size_after = 0; - -['starter.js', 'page_inject.js', 'content_inject.js', 'communication_inject.js'].forEach((script_name) => { - options.sourceMap.filename = path.join(__dirname, asset_script_path, script_name); - options.sourceMap.url = path.join(__dirname, map_path, `${script_name}.map`); - - const content = fs.readFileSync(options.sourceMap.filename, 'utf-8'); - var result = UglifyJS.minify(content, options); - fs.writeFileSync(options.sourceMap.filename, result.code, 'utf-8'); - fs.writeFileSync(options.sourceMap.url, result.map, 'utf-8'); - const before = (new TextEncoder().encode(content)).length; - const after = (new TextEncoder().encode(result.code)).length; - size_before += before; - size_after += after; - show_compression(script_name, before, after); -}); - -console.log(`Overall :: ${byte_size(size_before)} -> ${byte_size(size_after)} | ${(size_after / size_before) * 100}%`); diff --git a/appTs/LICENSE b/appTs/LICENSE deleted file mode 100644 index 3e4e3d00..00000000 --- a/appTs/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/appTs/README.md b/appTs/README.md deleted file mode 100644 index 451e1043..00000000 --- a/appTs/README.md +++ /dev/null @@ -1,101 +0,0 @@ -# UI5 Application com.ui5.journeyrecorder - -Insert the purpose of this project and some interesting info here... - -## Description - -This app demonstrates a TypeScript setup for developing UI5 applications. The central entry point for all information about using TypeScript with UI5 is at [https://sap.github.io/ui5-typescript](https://sap.github.io/ui5-typescript). - -**The template is inspired by the [`SAP-samples/ui5-typescript-helloworld`](https://github.com/SAP-samples/ui5-typescript-helloworld) project which also contains [a detailed step-by-step guide](https://github.com/SAP-samples/ui5-typescript-helloworld/blob/main/step-by-step.md). It explains how this setup is created and how all the bits and pieces fit together.** - -## Requirements - -Either [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/) for dependency management. - -## Preparation - -Use `npm` (or `yarn`) to install the dependencies: - -```sh -npm install -``` - -(To use yarn, just do `yarn` instead.) - -## Run the App - -Execute the following command to run the app locally for development in watch mode (the browser reloads the app automatically when there are changes in the source code): - -```sh -npm start -``` - -As shown in the terminal after executing this command, the app is then running on http://localhost:8080/index.html. A browser window with this URL should automatically open. - -(When using yarn, do `yarn start` instead.) - -## Debug the App - -In the browser, you can directly debug the original TypeScript code, which is supplied via sourcemaps (need to be enabled in the browser's developer console if it does not work straight away). If the browser doesn't automatically jump to the TypeScript code when setting breakpoints, use e.g. `Ctrl`/`Cmd` + `P` in Chrome to open the `*.ts` file you want to debug. - -## Build the App - -### Unoptimized (but quick) - -Execute the following command to build the project and get an app that can be deployed: - -```sh -npm run build -``` - -The result is placed into the `dist` folder. To start the generated package, just run - -```sh -npm run start:dist -``` - -Note that `index.html` still loads the UI5 framework from the relative URL `resources/...`, which does not physically exist, but is only provided dynamically by the UI5 tooling. So for an actual deployment you should change this URL to either [the CDN](https://sdk.openui5.org/#/topic/2d3eb2f322ea4a82983c1c62a33ec4ae) or your local deployment of UI5. - -(When using yarn, do `yarn build` and `yarn start:dist` instead.) - -### Optimized - -For an optimized self-contained build (takes longer because the UI5 resources are built, too), do: - -```sh -npm run build:opt -``` - -To start the generated package, again just run: - -```sh -npm run start:dist -``` - -In this case, all UI5 framework resources are also available within the `dist` folder, so the folder can be deployed as-is to any static web server, without changing the bootstrap URL. - -With the self-contained build, the bootstrap URL in `index.html` has already been modified to load the newly created `sap-ui-custom.js` for bootstrapping, which contains all app resources as well as all needed UI5 JavaScript resources. Most UI5 resources inside the `dist` folder are for this reason actually **not** needed to run the app. Only the non-JS-files, like translation texts and CSS files, are used and must also be deployed. (Only when for some reason JS files are missing from the optimized self-contained bundle, they are also loaded separately.) - -(When using yarn, do `yarn build:opt` and `yarn start:dist` instead.) - -## Check the Code - -Do the following to run a TypeScript check: - -```sh -npm run ts-typecheck -``` - -This checks the application code for any type errors (but will also complain in case of fundamental syntax issues which break the parsing). - -To lint the TypeScript code, do: - -```sh -npm run lint -``` - -(Again, when using yarn, do `yarn ts-typecheck` and `yarn lint` instead.) - -## License - -This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the [LICENSE](LICENSE) file. diff --git a/appTs/utils/buildSize.js b/appTs/utils/buildSize.js deleted file mode 100644 index 8075184d..00000000 --- a/appTs/utils/buildSize.js +++ /dev/null @@ -1,32 +0,0 @@ -const glob = require("glob"); -const fs = require('fs'); -const byteSize = (size) => { - const size_map = { - 0: 'B', - 1: 'kB', - 2: 'MB', - 3: 'GB' - }; - let divided = 0; - while (size > 1024) { - divided++ - size = size / 1024.0; - } - return `${Math.floor(size * 100) / 100.0} ${size_map[divided]}`; -} - -const getDirSize = async (sDirectoryName) => { - const files = await glob.glob(`./${sDirectoryName}/**/*.*`); - return files.map(f => { - try { - return fs.statSync(f).size - } catch (_) { - return 0; - } - }).reduce((a, b) => { return a + b; }, 0); -} -(async () => { - const folderName = process.argv[2]; - const size = await getDirSize(folderName); - console.log('Build size: ', byteSize(size)); -})(); \ No newline at end of file diff --git a/appTs/utils/deployBuild.js b/appTs/utils/deployBuild.js deleted file mode 100644 index 69c8d9e8..00000000 --- a/appTs/utils/deployBuild.js +++ /dev/null @@ -1,210 +0,0 @@ -"use strict"; -const fs = require("fs"); -const { spawn } = require("child_process"); -const glob = require("glob"); -const { zip } = require('zip-a-folder'); -const { version } = require('../package.json'); -const { argv } = require('process'); -const DEPLOY_FOLDER = "deploySelection"; -const PROJECT_FOLDER = "webapp"; -const BUILD_FOLDER = "dist"; -const DEPLOY_VERSIONS = "deployments"; -const UNUSEDFILE_ENDINGS = [ - '/**/*-dbg.js', - '/**/*-dbg.*.js', - '/**/*.js.map', - '/**/*.type.js', - '/**/*.ts', - '/**/*.gitkeep', - '/**/*.less', -]; - -function cleanup() { - // first remove old stuff - console.log("Remove old deploy selection"); - fs.rmSync(DEPLOY_FOLDER, { recursive: true, force: true }); -} - -async function buildExtension(projectPath, destinationPath) { - const { graphFromPackageDependencies } = await import("@ui5/project/graph"); - const graph = await graphFromPackageDependencies({ cwd: projectPath }); - return graph.build({ - destPath: destinationPath, - selfContained: true, - includedDependencies: ["*"], - cleanDest: true - }); -} - -async function _removeFiles(aFilesToRemoveGlobs) { - const files = (await Promise.all(aFilesToRemoveGlobs.map(tg => glob.glob(tg)))).flat(); - return Promise.all(files.map(async (f) => { - if (fs.existsSync(f)) { - fs.unlinkSync(f) - } - })); -} - -function cleanupTheBuildStuff() { - console.log('Removing unnecessary files for recursive copy'); - return _removeFiles(UNUSEDFILE_ENDINGS.map(ending => `${BUILD_FOLDER}${ending}`)); -} -//remove unnecessary stuff - -async function buildFolderStructure() { - console.log("Recreate deploy build"); - // create necessary subfolders - console.log("Create folderstructure"); - await fs.promises.mkdir(DEPLOY_FOLDER); - await fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources`); - await fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap`); - await fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/ui`); - await Promise.all([ - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/m`), - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/uxap`), - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/f`) - ]); - await Promise.all([ - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/ui/core`).then(() => { - return Promise.all([ - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/ui/core/date`), - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/ui/core/cldr`) - ]) - }), - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/ui/layout`), - fs.promises.mkdir(`./${DEPLOY_FOLDER}/resources/sap/ui/unified`) - ]); -} -// copy/create only the necessary stuff - -function recursiveFolderCopy() { - //recursive copy necessary folder - console.log("copy folders"); - return Promise.all([ - fs.promises.cp("./dist/assets", `./${DEPLOY_FOLDER}/assets`, { recursive: true }), - fs.promises.cp("./dist/css", `./${DEPLOY_FOLDER}/css`, { recursive: true }), - fs.promises.cp("./dist/resources/sap/ui/core/themes", `./${DEPLOY_FOLDER}/resources/sap/ui/core/themes`, { recursive: true }), - fs.promises.cp("./dist/resources/sap/ui/layout/themes", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/themes`, { recursive: true }), - fs.promises.cp("./dist/resources/sap/m/themes", `./${DEPLOY_FOLDER}/resources/sap/m/themes`, { recursive: true }), - fs.promises.cp("./dist/resources/sap/f/themes", `./${DEPLOY_FOLDER}/resources/sap/f/themes`, { recursive: true }), - fs.promises.cp("./dist/resources/sap/uxap/themes", `./${DEPLOY_FOLDER}/resources/sap/uxap/themes`, { recursive: true }), - fs.promises.cp("./dist/resources/sap/ui/unified/themes/", `./${DEPLOY_FOLDER}/resources/sap/ui/unified/themes/`, { recursive: true }) - ]); -} - -function selectiveFileCopy() { - //copy single files - console.log("copy files"); - return Promise.all([ - fs.promises.cp("./dist/index.html", `./${DEPLOY_FOLDER}/index.html`), - fs.promises.cp("./dist/favicon.ico", `./${DEPLOY_FOLDER}/favicon.ico`), - fs.promises.cp("./dist/manifest.json", `./${DEPLOY_FOLDER}/manifest.json`), - fs.promises.cp("./dist/resources/sap-ui-custom.js", `./${DEPLOY_FOLDER}/resources/sap-ui-custom.js`), - fs.promises.cp("./dist/resources/sap/m/Checkbox.js", `./${DEPLOY_FOLDER}/resources/sap/m/Checkbox.js`), - fs.promises.cp("./dist/resources/sap/m/Vbox.js", `./${DEPLOY_FOLDER}/resources/sap/m/Vbox.js`), - fs.promises.cp("./dist/resources/sap/ui/core/messagebundle.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/core/messagebundle.properties`), - fs.promises.cp("./dist/resources/sap/ui/core/messagebundle_de.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/core/messagebundle_de.properties`), - fs.promises.cp("./dist/resources/sap/ui/core/messagebundle_en_GB.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/core/messagebundle_en_GB.properties`), - fs.promises.cp("./dist/resources/sap/ui/core/messagebundle_en_US_sappsd.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/core/messagebundle_en_US_sappsd.properties`), - fs.promises.cp("./dist/resources/sap/ui/core/messagebundle_en_US_saprigi.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/core/messagebundle_en_US_saprigi.properties`), - fs.promises.cp("./dist/resources/sap/ui/core/messagebundle_en_US_saptrc.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/core/messagebundle_en_US_saptrc.properties`), - fs.promises.cp("./dist/resources/sap/ui/core/messagebundle_en.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/core/messagebundle_en.properties`), - fs.promises.cp("./dist/resources/sap/ui/core/ComponentSupport.js", `./${DEPLOY_FOLDER}/resources/sap/ui/core/ComponentSupport.js`), - fs.promises.cp("./dist/resources/sap/ui/core/date/Gregorian.js", `./${DEPLOY_FOLDER}/resources/sap/ui/core/date/Gregorian.js`), - fs.promises.cp("./dist/resources/sap/ui/core/cldr/en.json", `./${DEPLOY_FOLDER}/resources/sap/ui/core/cldr/en.json`), - fs.promises.cp("./dist/resources/sap/ui/layout/library-preload-lazy.js", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/library-preload-lazy.js`), - fs.promises.cp("./dist/resources/sap/ui/unified/library-preload-lazy.js", `./${DEPLOY_FOLDER}/resources/sap/ui/unified/library-preload-lazy.js`), - fs.promises.cp("./dist/resources/sap/m/messagebundle.properties", `./${DEPLOY_FOLDER}/resources/sap/m/messagebundle.properties`), - fs.promises.cp("./dist/resources/sap/m/messagebundle_de.properties", `./${DEPLOY_FOLDER}/resources/sap/m/messagebundle_de.properties`), - fs.promises.cp("./dist/resources/sap/m/messagebundle_en_GB.properties", `./${DEPLOY_FOLDER}/resources/sap/m/messagebundle_en_GB.properties`), - fs.promises.cp("./dist/resources/sap/m/messagebundle_en_US_sappsd.properties", `./${DEPLOY_FOLDER}/resources/sap/m/messagebundle_en_US_sappsd.properties`), - fs.promises.cp("./dist/resources/sap/m/messagebundle_en_US_saprigi.properties", `./${DEPLOY_FOLDER}/resources/sap/m/messagebundle_en_US_saprigi.properties`), - fs.promises.cp("./dist/resources/sap/m/messagebundle_en_US_saptrc.properties", `./${DEPLOY_FOLDER}/resources/sap/m/messagebundle_en_US_saptrc.properties`), - fs.promises.cp("./dist/resources/sap/m/messagebundle_en.properties", `./${DEPLOY_FOLDER}/resources/sap/m/messagebundle_en.properties`), - fs.promises.cp("./dist/resources/sap/f/messagebundle.properties", `./${DEPLOY_FOLDER}/resources/sap/f/messagebundle.properties`), - fs.promises.cp("./dist/resources/sap/f/messagebundle_de.properties", `./${DEPLOY_FOLDER}/resources/sap/f/messagebundle_de.properties`), - fs.promises.cp("./dist/resources/sap/f/messagebundle_en_GB.properties", `./${DEPLOY_FOLDER}/resources/sap/f/messagebundle_en_GB.properties`), - fs.promises.cp("./dist/resources/sap/f/messagebundle_en_US_sappsd.properties", `./${DEPLOY_FOLDER}/resources/sap/f/messagebundle_en_US_sappsd.properties`), - fs.promises.cp("./dist/resources/sap/f/messagebundle_en_US_saprigi.properties", `./${DEPLOY_FOLDER}/resources/sap/f/messagebundle_en_US_saprigi.properties`), - fs.promises.cp("./dist/resources/sap/f/messagebundle_en_US_saptrc.properties", `./${DEPLOY_FOLDER}/resources/sap/f/messagebundle_en_US_saptrc.properties`), - fs.promises.cp("./dist/resources/sap/f/messagebundle_en.properties", `./${DEPLOY_FOLDER}/resources/sap/f/messagebundle_en.properties`), - fs.promises.cp("./dist/resources/sap/uxap/messagebundle.properties", `./${DEPLOY_FOLDER}/resources/sap/uxap/messagebundle.properties`), - fs.promises.cp("./dist/resources/sap/uxap/messagebundle_de.properties", `./${DEPLOY_FOLDER}/resources/sap/uxap/messagebundle_de.properties`), - fs.promises.cp("./dist/resources/sap/uxap/messagebundle_en_GB.properties", `./${DEPLOY_FOLDER}/resources/sap/uxap/messagebundle_en_GB.properties`), - fs.promises.cp("./dist/resources/sap/uxap/messagebundle_en_US_sappsd.properties", `./${DEPLOY_FOLDER}/resources/sap/uxap/messagebundle_en_US_sappsd.properties`), - fs.promises.cp("./dist/resources/sap/uxap/messagebundle_en_US_saprigi.properties", `./${DEPLOY_FOLDER}/resources/sap/uxap/messagebundle_en_US_saprigi.properties`), - fs.promises.cp("./dist/resources/sap/uxap/messagebundle_en_US_saptrc.properties", `./${DEPLOY_FOLDER}/resources/sap/uxap/messagebundle_en_US_saptrc.properties`), - fs.promises.cp("./dist/resources/sap/uxap/messagebundle_en.properties", `./${DEPLOY_FOLDER}/resources/sap/uxap/messagebundle_en.properties`), - fs.promises.cp("./dist/resources/sap/ui/layout/messagebundle.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/messagebundle.properties`), - fs.promises.cp("./dist/resources/sap/ui/layout/messagebundle_de.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/messagebundle_de.properties`), - fs.promises.cp("./dist/resources/sap/ui/layout/messagebundle_en_GB.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/messagebundle_en_GB.properties`), - fs.promises.cp("./dist/resources/sap/ui/layout/messagebundle_en_US_sappsd.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/messagebundle_en_US_sappsd.properties`), - fs.promises.cp("./dist/resources/sap/ui/layout/messagebundle_en_US_saprigi.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/messagebundle_en_US_saprigi.properties`), - fs.promises.cp("./dist/resources/sap/ui/layout/messagebundle_en_US_saptrc.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/messagebundle_en_US_saptrc.properties`), - fs.promises.cp("./dist/resources/sap/ui/layout/messagebundle_en.properties", `./${DEPLOY_FOLDER}/resources/sap/ui/layout/messagebundle_en.properties`), - - ]); -} - -function createDeployZip(bPreVersion) { - console.log("Creating deploy ZIP"); - let suffix = ''; - if (bPreVersion) { - suffix = 'nightly_' - } - if (!fs.existsSync(DEPLOY_VERSIONS)) { - fs.mkdirSync(`${DEPLOY_VERSIONS}`); - } - return zip(`${DEPLOY_FOLDER}`, `${DEPLOY_VERSIONS}/journey_recorder_${suffix}${version.replace(/\./gm, '-')}.zip`); -} - -function _byteSize(iSize) { - const size_map = { - 0: 'B', - 1: 'kB', - 2: 'MB', - 3: 'GB' - }; - let divided = 0; - while (iSize > 1024) { - divided++ - iSize = iSize / 1024.0; - } - return `${Math.floor(size * 100) / 100.0} ${size_map[divided]}`; -} - -async function getDirSize(sDirName) { - const files = await glob.glob(`./${sDirName}/**/*.*`); - return _byteSize(files.map(f => { - try { - return fs.statSync(f).size; - } catch (_) { - return 0; - } - }).reduce((a, b) => { return a + b; }, 0)); -} - -(async () => { - cleanup(); - await buildExtension(PROJECT_FOLDER, BUILD_FOLDER); - if (argv.includes('--measure')) { - await getDirSize(BUILD_FOLDER); - } - await cleanupTheBuildStuff(); - - if (argv.includes('--measure')) { - await getDirSize(BUILD_FOLDER); - } - await buildFolderStructure(); - await recursiveFolderCopy(); - await selectiveFileCopy(); - - if (argv.includes('--measure')) { - await getDirSize(DEPLOY_FOLDER); - } - await createDeployZip(argv.includes('--pre')); - - if (!(argv.includes('--keep'))) { - cleanup(); - } -})(); diff --git a/appTs/utils/deploySelection.sh b/appTs/utils/deploySelection.sh deleted file mode 100644 index 2ff32355..00000000 --- a/appTs/utils/deploySelection.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash - -# first remove old stuff -echo Removing old -rm -rf deploySelection -# recreate to have a new testrun -echo start all over -mkdir deploySelection - -#we assume that everything is already installed because of developement -npm run build - -node ./utils/removeFromBuild.js -node ./utils/buildSize.js dist - -echo recreate build -#copy/create only the necessary stuff -#create necessary subfolders -echo create subfolders -mkdir ./deploySelection/resources - -mkdir ./deploySelection/resources/sap - -mkdir ./deploySelection/resources/sap/ui -mkdir ./deploySelection/resources/sap/ui/core -mkdir ./deploySelection/resources/sap/ui/core/date -mkdir ./deploySelection/resources/sap/ui/core/cldr -mkdir ./deploySelection/resources/sap/ui/layout -mkdir ./deploySelection/resources/sap/ui/unified - -mkdir ./deploySelection/resources/sap/m -mkdir ./deploySelection/resources/sap/uxap -mkdir ./deploySelection/resources/sap/f - -#recursive copy necessary folder -echo copy folders -cp -r ./dist/assets ./deploySelection/assets -cp -r ./dist/css ./deploySelection/css -cp -r ./dist/resources/sap/ui/core/themes ./deploySelection/resources/sap/ui/core/themes -cp -r ./dist/resources/sap/ui/layout/themes ./deploySelection/resources/sap/ui/layout/themes -cp -r ./dist/resources/sap/m/themes ./deploySelection/resources/sap/m/themes -cp -r ./dist/resources/sap/f/themes ./deploySelection/resources/sap/f/themes -cp -r ./dist/resources/sap/uxap/themes ./deploySelection/resources/sap/uxap/themes -cp -r ./dist/resources/sap/ui/unified/themes/ ./deploySelection/resources/sap/ui/unified/themes/ - -rm ./deploySelection/assets/.gitkeep - -#copy single files -echo copy files -cp "./dist/index.html" "./deploySelection/index.html" -cp "./dist/favicon.ico" "./deploySelection/favicon.ico" -cp "./dist/manifest.json" "./deploySelection/manifest.json" - -cp "./dist/resources/sap-ui-custom.js" "./deploySelection/resources/sap-ui-custom.js" - -cp "./dist/resources/sap/m/Checkbox.js" "./deploySelection/resources/sap/m/Checkbox.js" -cp "./dist/resources/sap/m/Vbox.js" "./deploySelection/resources/sap/m/Vbox.js" - -cp "./dist/resources/sap/ui/core/messagebundle.properties" "./deploySelection/resources/sap/ui/core/messagebundle.properties" -cp "./dist/resources/sap/ui/core/messagebundle_de.properties" "./deploySelection/resources/sap/ui/core/messagebundle_de.properties" -cp "./dist/resources/sap/ui/core/messagebundle_en_GB.properties" "./deploySelection/resources/sap/ui/core/messagebundle_en_GB.properties" -cp "./dist/resources/sap/ui/core/messagebundle_en_US_sappsd.properties" "./deploySelection/resources/sap/ui/core/messagebundle_en_US_sappsd.properties" -cp "./dist/resources/sap/ui/core/messagebundle_en_US_saprigi.properties" "./deploySelection/resources/sap/ui/core/messagebundle_en_US_saprigi.properties" -cp "./dist/resources/sap/ui/core/messagebundle_en_US_saptrc.properties" "./deploySelection/resources/sap/ui/core/messagebundle_en_US_saptrc.properties" -cp "./dist/resources/sap/ui/core/messagebundle_en.properties" "./deploySelection/resources/sap/ui/core/messagebundle_en.properties" -cp "./dist/resources/sap/ui/core/ComponentSupport.js" "./deploySelection/resources/sap/ui/core/ComponentSupport.js" - -cp "./dist/resources/sap/ui/core/date/Gregorian.js" "./deploySelection/resources/sap/ui/core/date/Gregorian.js" -cp "./dist/resources/sap/ui/core/cldr/en.json" "./deploySelection/resources/sap/ui/core/cldr/en.json" - -cp "./dist/resources/sap/ui/layout/library-preload-lazy.js" "./deploySelection/resources/sap/ui/layout/library-preload-lazy.js" - -cp "./dist/resources/sap/ui/unified/library-preload-lazy.js" "./deploySelection/resources/sap/ui/unified/library-preload-lazy.js" - -cp "./dist/resources/sap/m/messagebundle.properties" "./deploySelection/resources/sap/m/messagebundle.properties" -cp "./dist/resources/sap/m/messagebundle_de.properties" "./deploySelection/resources/sap/m/messagebundle_de.properties" -cp "./dist/resources/sap/m/messagebundle_en_GB.properties" "./deploySelection/resources/sap/m/messagebundle_en_GB.properties" -cp "./dist/resources/sap/m/messagebundle_en_US_sappsd.properties" "./deploySelection/resources/sap/m/messagebundle_en_US_sappsd.properties" -cp "./dist/resources/sap/m/messagebundle_en_US_saprigi.properties" "./deploySelection/resources/sap/m/messagebundle_en_US_saprigi.properties" -cp "./dist/resources/sap/m/messagebundle_en_US_saptrc.properties" "./deploySelection/resources/sap/m/messagebundle_en_US_saptrc.properties" -cp "./dist/resources/sap/m/messagebundle_en.properties" "./deploySelection/resources/sap/m/messagebundle_en.properties" - -cp "./dist/resources/sap/f/messagebundle.properties" "./deploySelection/resources/sap/f/messagebundle.properties" -cp "./dist/resources/sap/f/messagebundle_de.properties" "./deploySelection/resources/sap/f/messagebundle_de.properties" -cp "./dist/resources/sap/f/messagebundle_en_GB.properties" "./deploySelection/resources/sap/f/messagebundle_en_GB.properties" -cp "./dist/resources/sap/f/messagebundle_en_US_sappsd.properties" "./deploySelection/resources/sap/f/messagebundle_en_US_sappsd.properties" -cp "./dist/resources/sap/f/messagebundle_en_US_saprigi.properties" "./deploySelection/resources/sap/f/messagebundle_en_US_saprigi.properties" -cp "./dist/resources/sap/f/messagebundle_en_US_saptrc.properties" "./deploySelection/resources/sap/f/messagebundle_en_US_saptrc.properties" -cp "./dist/resources/sap/f/messagebundle_en.properties" "./deploySelection/resources/sap/f/messagebundle_en.properties" - -cp "./dist/resources/sap/uxap/messagebundle.properties" "./deploySelection/resources/sap/uxap/messagebundle.properties" -cp "./dist/resources/sap/uxap/messagebundle_de.properties" "./deploySelection/resources/sap/uxap/messagebundle_de.properties" -cp "./dist/resources/sap/uxap/messagebundle_en_GB.properties" "./deploySelection/resources/sap/uxap/messagebundle_en_GB.properties" -cp "./dist/resources/sap/uxap/messagebundle_en_US_sappsd.properties" "./deploySelection/resources/sap/uxap/messagebundle_en_US_sappsd.properties" -cp "./dist/resources/sap/uxap/messagebundle_en_US_saprigi.properties" "./deploySelection/resources/sap/uxap/messagebundle_en_US_saprigi.properties" -cp "./dist/resources/sap/uxap/messagebundle_en_US_saptrc.properties" "./deploySelection/resources/sap/uxap/messagebundle_en_US_saptrc.properties" -cp "./dist/resources/sap/uxap/messagebundle_en.properties" "./deploySelection/resources/sap/uxap/messagebundle_en.properties" - -cp "./dist/resources/sap/ui/layout/messagebundle.properties" "./deploySelection/resources/sap/ui/layout/messagebundle.properties" -cp "./dist/resources/sap/ui/layout/messagebundle_de.properties" "./deploySelection/resources/sap/ui/layout/messagebundle_de.properties" -cp "./dist/resources/sap/ui/layout/messagebundle_en_GB.properties" "./deploySelection/resources/sap/ui/layout/messagebundle_en_GB.properties" -cp "./dist/resources/sap/ui/layout/messagebundle_en_US_sappsd.properties" "./deploySelection/resources/sap/ui/layout/messagebundle_en_US_sappsd.properties" -cp "./dist/resources/sap/ui/layout/messagebundle_en_US_saprigi.properties" "./deploySelection/resources/sap/ui/layout/messagebundle_en_US_saprigi.properties" -cp "./dist/resources/sap/ui/layout/messagebundle_en_US_saptrc.properties" "./deploySelection/resources/sap/ui/layout/messagebundle_en_US_saptrc.properties" -cp "./dist/resources/sap/ui/layout/messagebundle_en.properties" "./deploySelection/resources/sap/ui/layout/messagebundle_en.properties" - -node ./utils/buildSize.js deploySelection diff --git a/appTs/utils/deployZip.js b/appTs/utils/deployZip.js deleted file mode 100644 index 0fe22bc7..00000000 --- a/appTs/utils/deployZip.js +++ /dev/null @@ -1,14 +0,0 @@ -const { zip } = require('zip-a-folder'); -const { version } = require('./package.json'); -const { argv } = require('process'); - -let suffix = ''; -if (argv.includes('--pre')) { - suffix = 'nightly_' -} - -const zipping = async () => { - zip('../deploySelection', `../journey_recorder_${suffix}${version.replace(/\./gm, '-')}.zip`); -} - -zipping(); diff --git a/appTs/utils/removeFromBuild.js b/appTs/utils/removeFromBuild.js deleted file mode 100644 index 3780a07d..00000000 --- a/appTs/utils/removeFromBuild.js +++ /dev/null @@ -1,88 +0,0 @@ -const glob = require("glob"); -const fs = require("fs"); - -const byte_size = (size) => { - const size_map = { - 0: 'B', - 1: 'kB', - 2: 'mB', - 3: 'gB' - }; - let divided = 0; - while (size > 1024) { - divided++ - size = size / 1024.0; - } - return `${Math.floor(size * 100) / 100.0} ${size_map[divided]}`; -} - -const getDirSize = async (folderGlob) => { - const files = await glob.glob(folderGlob); - return files.map(f => { - try { - return fs.statSync(f).size - } catch (_) { - return 0; - } - }).reduce((a, b) => { return a + b; }, 0); -} - -const removeFolders = async (aFoldersToRemove) => { - aFoldersToRemove.forEach(f => { - if (fs.existsSync(f)) { - fs.rmSync(f, { recursive: true }); - } - }); -} - -const removeFiles = async (aFilesToRemoveGlobs) => { - aFilesToRemoveGlobs.forEach(async (g) => { - const files = await glob.glob(g) - files.forEach(f => { - if (fs.existsSync(f)) { - fs.unlinkSync(f) - } - }) - }); -} - -const removeMessageBundles = async (aMessageBundlePatterns, langs) => { - // by specifying '_' as part of the name we automatically ignore the default message bundles - aMessageBundlePatterns.forEach(async (g) => { - const bundles = await glob.glob(g); - bundles.forEach(f => { - // if this messagebundle contains the languages for only one of the allowed, keep it. - const usedBundle = langs.map(lang => f.indexOf(lang) !== -1).reduce((a, b) => a || b, false); - if (!usedBundle && fs.existsSync(f)) { - fs.unlinkSync(f); - } - }) - }); -} - - -const allowedLanguages = ['de', 'en']; -const distFolder = './dist/**/*.*'; -const filesToRemove = ['dist/**/*-dbg.js', - 'dist/**/*-dbg.*.js', - 'dist/**/*.js.map', - 'dist/**/*.type.js', - 'dist/**/*.ts', - 'dist/**/*.gitkeep', - 'dist/**/*.less', -]; -const messageBundlesGlob = ['dist/**/messagebundle_*.properties']; -const unnecessaryFolders = ['dist/test/', 'dist/test-resources/']; - -(async () => { - const sizeBefore = await getDirSize(distFolder); - console.log('Removing unnecessary files'); - await removeFiles(filesToRemove); - console.log('Removing test related folders'); - await removeFolders(unnecessaryFolders); - console.log('Removing unnecessary message bundles'); - await removeMessageBundles(messageBundlesGlob, allowedLanguages); - const sizeAfter = await getDirSize(distFolder); - console.log('Size "dist" before: ', byte_size(sizeBefore)); - console.log('Size "dist" after: ', byte_size(sizeAfter)); -})() \ No newline at end of file diff --git a/appTs/webapp/assets/.gitkeep b/appTs/webapp/assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/appTs/webapp/assets/icons/icon/128.png b/appTs/webapp/assets/icons/icon/128.png deleted file mode 100644 index c276e1da..00000000 Binary files a/appTs/webapp/assets/icons/icon/128.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon/16.png b/appTs/webapp/assets/icons/icon/16.png deleted file mode 100644 index 92fc4c8b..00000000 Binary files a/appTs/webapp/assets/icons/icon/16.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon/32.png b/appTs/webapp/assets/icons/icon/32.png deleted file mode 100644 index cb79e557..00000000 Binary files a/appTs/webapp/assets/icons/icon/32.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon/48.png b/appTs/webapp/assets/icons/icon/48.png deleted file mode 100644 index 5836811e..00000000 Binary files a/appTs/webapp/assets/icons/icon/48.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon/64.png b/appTs/webapp/assets/icons/icon/64.png deleted file mode 100644 index 1767b198..00000000 Binary files a/appTs/webapp/assets/icons/icon/64.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon/80.png b/appTs/webapp/assets/icons/icon/80.png deleted file mode 100644 index 21504459..00000000 Binary files a/appTs/webapp/assets/icons/icon/80.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon/96.png b/appTs/webapp/assets/icons/icon/96.png deleted file mode 100644 index 01209d80..00000000 Binary files a/appTs/webapp/assets/icons/icon/96.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon_old.png b/appTs/webapp/assets/icons/icon_old.png deleted file mode 100644 index 15e2f075..00000000 Binary files a/appTs/webapp/assets/icons/icon_old.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/icon_old.svg b/appTs/webapp/assets/icons/icon_old.svg deleted file mode 100644 index a5f9ea13..00000000 --- a/appTs/webapp/assets/icons/icon_old.svg +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - image/svg+xml - - Logo UI5 Test Recorder - - - - - - - - Logo Testrecorder_v7 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/appTs/webapp/assets/icons/ui5_journey_recorder.png b/appTs/webapp/assets/icons/ui5_journey_recorder.png deleted file mode 100644 index 527d8de6..00000000 Binary files a/appTs/webapp/assets/icons/ui5_journey_recorder.png and /dev/null differ diff --git a/appTs/webapp/assets/icons/ui5_journey_recorder_wb.png b/appTs/webapp/assets/icons/ui5_journey_recorder_wb.png deleted file mode 100644 index 029c2144..00000000 Binary files a/appTs/webapp/assets/icons/ui5_journey_recorder_wb.png and /dev/null differ diff --git a/appTs/webapp/assets/scripts/starter.js b/appTs/webapp/assets/scripts/starter.js deleted file mode 100644 index eb520aaa..00000000 --- a/appTs/webapp/assets/scripts/starter.js +++ /dev/null @@ -1,23 +0,0 @@ -let color = '#3aa757'; - -/* chrome.runtime.onInstalled.addListener(() => { - chrome.storage.sync.set({ color }); - console.log('Default background color set to %cgreen', `color: ${color}`); -}); */ - -chrome.action.onClicked.addListener((/* tab */) => {/* - chrome.scripting.executeScript({ - target: { tabId: tab.id }, - func: (name) => { alert(`"${name}" executed`); }, - args: ['action'] - }); */ - - chrome.windows.create({ - url: chrome.runtime.getURL('../index.html'), - type: 'popup', - focused: true - }, (fnWindow) => {/* - console.log(`loaded extension with id: ${fnWindow.id}`); */ - }); - -}); diff --git a/appTs/webapp/favicon.ico b/appTs/webapp/favicon.ico deleted file mode 100644 index 8f9a9b80..00000000 Binary files a/appTs/webapp/favicon.ico and /dev/null differ diff --git a/appTs/karma-ci-cov.conf.js b/karma-ci-cov.conf.js similarity index 100% rename from appTs/karma-ci-cov.conf.js rename to karma-ci-cov.conf.js diff --git a/appTs/karma-ci.conf.js b/karma-ci.conf.js similarity index 100% rename from appTs/karma-ci.conf.js rename to karma-ci.conf.js diff --git a/appTs/karma.conf.js b/karma.conf.js similarity index 100% rename from appTs/karma.conf.js rename to karma.conf.js diff --git a/appTs/package-lock.json b/package-lock.json similarity index 99% rename from appTs/package-lock.json rename to package-lock.json index 568dac67..ced15f97 100644 --- a/appTs/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "version": "0.3.0", "license": "Apache-2.0", "dependencies": { - "@speed-highlight/core": "^1.2.6", "client-zip": "^2.4.4", "highlight.js": "^11.9.0" }, @@ -3427,11 +3426,6 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "dev": true }, - "node_modules/@speed-highlight/core": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.6.tgz", - "integrity": "sha512-kzS2W5fLGz2wcmA+4JoMlw3eglj2NqYTdzU/Db1P9phIJ20glYFW4tGpPRfpqP08qEn2H0NV9/7E8kh5/iaTgQ==" - }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", diff --git a/appTs/package.json b/package.json similarity index 95% rename from appTs/package.json rename to package.json index f1a5092b..c626e858 100644 --- a/appTs/package.json +++ b/package.json @@ -19,7 +19,6 @@ "karma-ci-cov": "karma start karma-ci-cov.conf.js", "test": "npm run lint && npm run karma-ci-cov", "wdi5": "wdio run ./webapp/test/e2e/\\wdio.conf.ts", - "predeployBuild": "./utils/deploySelection.sh", "deployBuild": "node ./utils/deployBuild.js" }, "devDependencies": { @@ -57,8 +56,7 @@ "zip-a-folder": "^3.1.6" }, "dependencies": { - "@speed-highlight/core": "^1.2.6", "client-zip": "^2.4.4", "highlight.js": "^11.9.0" } -} \ No newline at end of file +} diff --git a/appTs/tsconfig.json b/tsconfig.json similarity index 100% rename from appTs/tsconfig.json rename to tsconfig.json diff --git a/appTs/ui5-dist.yaml b/ui5-dist.yaml similarity index 91% rename from appTs/ui5-dist.yaml rename to ui5-dist.yaml index bcd56357..0a5d64a0 100644 --- a/appTs/ui5-dist.yaml +++ b/ui5-dist.yaml @@ -13,6 +13,5 @@ framework: - name: sap.m - name: sap.uxap - name: sap.ui.core - - name: sap.ui.codeeditor - name: themelib_sap_horizon - name: themelib_sap_fiori_3 diff --git a/appTs/ui5.yaml b/ui5.yaml similarity index 87% rename from appTs/ui5.yaml rename to ui5.yaml index 38f1c581..30676e90 100644 --- a/appTs/ui5.yaml +++ b/ui5.yaml @@ -44,12 +44,3 @@ server: afterMiddleware: compression - name: ui5-middleware-livereload afterMiddleware: compression ---- -# Task extension usage-search -specVersion: "3.2" -kind: extension -type: task -metadata: - name: task-usage-search -task: - path: utils/custom_tasks/task-usage-search.js diff --git a/utils/deployBuild.js b/utils/deployBuild.js new file mode 100644 index 00000000..472e47fd --- /dev/null +++ b/utils/deployBuild.js @@ -0,0 +1,207 @@ +"use strict"; +const fs = require("fs"); +const glob = require("glob"); +const { zip } = require('zip-a-folder'); +const { version } = require('../package.json'); +const { argv } = require('process'); + +const CONFIG = { + DEPLOY_BUILD: "deploySelection", + PROJECT_FOLDER: "webapp", + BUILD_FOLDER: "dist", + DEPLOY_VERSIONS: "deployments", + UNUSEDFILE_ENDINGS: [ + '/**/*-dbg.js', + '/**/*-dbg.*.js', + '/**/*.js.map', + '/**/*.type.js', + '/**/*.ts', + '/**/*.gitkeep', + '/**/*.less', + ], + RECURSIVE_FOLDERS: [ + 'assets', + 'css', + 'resources/sap/ui/core/themes', + 'resources/sap/ui/layout/themes', + 'resources/sap/m/themes', + 'resources/sap/f/themes', + 'resources/sap/uxap/themes', + 'resources/sap/ui/unified/themes' + ], + FILES_TO_COPY: [ + "index.html", + "favicon.ico", + "manifest.json", + "resources/sap-ui-custom.js", + "resources/sap/m/Checkbox.js", + "resources/sap/m/Vbox.js", + "resources/sap/ui/core/messagebundle.properties", + "resources/sap/ui/core/messagebundle_de.properties", + "resources/sap/ui/core/messagebundle_en_GB.properties", + "resources/sap/ui/core/messagebundle_en_US_sappsd.properties", + "resources/sap/ui/core/messagebundle_en_US_saprigi.properties", + "resources/sap/ui/core/messagebundle_en_US_saptrc.properties", + "resources/sap/ui/core/messagebundle_en.properties", + "resources/sap/ui/core/ComponentSupport.js", + "resources/sap/ui/core/date/Gregorian.js", + "resources/sap/ui/core/cldr/en.json", + "resources/sap/ui/layout/library-preload-lazy.js", + "resources/sap/ui/unified/library-preload-lazy.js", + "resources/sap/m/messagebundle.properties", + "resources/sap/m/messagebundle_de.properties", + "resources/sap/m/messagebundle_en_GB.properties", + "resources/sap/m/messagebundle_en_US_sappsd.properties", + "resources/sap/m/messagebundle_en_US_saprigi.properties", + "resources/sap/m/messagebundle_en.properties", + "resources/sap/f/messagebundle.properties", + "resources/sap/f/messagebundle_de.properties", + "resources/sap/f/messagebundle_en_GB.properties", + "resources/sap/f/messagebundle_en_US_sappsd.properties", + "resources/sap/f/messagebundle_en_US_saprigi.properties", + "resources/sap/f/messagebundle_en.properties", + "resources/sap/uxap/messagebundle.properties", + "resources/sap/uxap/messagebundle_de.properties", + "resources/sap/uxap/messagebundle_en_GB.properties", + "resources/sap/uxap/messagebundle_en_US_sappsd.properties", + "resources/sap/uxap/messagebundle_en_US_saprigi.properties", + "resources/sap/uxap/messagebundle_en_US_saptrc.properties", + "resources/sap/uxap/messagebundle_en.properties", + "resources/sap/ui/layout/messagebundle.properties", + "resources/sap/ui/layout/messagebundle_de.properties", + "resources/sap/ui/layout/messagebundle_en_GB.properties", + "resources/sap/ui/layout/messagebundle_en_US_saprigi.properties", + "resources/sap/ui/layout/messagebundle_en_US_saptrc.properties", + "resources/sap/ui/layout/messagebundle_en.properties", + ] +} + +function cleanup() { + console.log("Remove old deploy build"); + fs.rmSync(CONFIG.DEPLOY_BUILD, { recursive: true, force: true }); +} + +async function buildExtension(projectPath, destinationPath) { + const { graphFromPackageDependencies } = await import("@ui5/project/graph"); + const graph = await graphFromPackageDependencies({ cwd: projectPath }); + return graph.build({ + destPath: destinationPath, + selfContained: true, + includedDependencies: ["*"], + cleanDest: true + }); +} + +async function _removeFiles(aFilesToRemoveGlobs) { + const files = (await Promise.all(aFilesToRemoveGlobs.map(tg => glob.glob(tg)))).flat(); + return Promise.all(files.map(async (f) => { + if (fs.existsSync(f)) { + fs.unlinkSync(f) + } + })); +} + +function cleanupTheBuildStuff() { + console.log('Removing unnecessary files for recursive copy'); + return _removeFiles(CONFIG.UNUSEDFILE_ENDINGS.map(ending => `${CONFIG.BUILD_FOLDER}${ending}`)); +} + +async function buildFolderStructure() { + console.log("Recreate deploy build"); + // create necessary subfolders + console.log("Create folderstructure"); + await fs.promises.mkdir(CONFIG.DEPLOY_BUILD); + await fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources`); + await fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap`); + await fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/ui`); + await Promise.all([ + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/m`), + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/uxap`), + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/f`) + ]); + await Promise.all([ + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/ui/core`).then(() => { + return Promise.all([ + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/ui/core/date`), + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/ui/core/cldr`) + ]) + }), + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/ui/layout`), + fs.promises.mkdir(`./${CONFIG.DEPLOY_BUILD}/resources/sap/ui/unified`) + ]); +} + +function recursiveFolderCopy() { + //recursive copy necessary folder + console.log("Copy folders"); + return Promise.all(CONFIG.RECURSIVE_FOLDERS.map(rc => fs.promises.cp(`./${CONFIG.BUILD_FOLDER}/${rc}`, `./${CONFIG.DEPLOY_BUILD}/${rc}`, { recursive: true }))); +} + +function selectiveFileCopy() { + //copy single files + console.log("copy files"); + return Promise.all(CONFIG.FILES_TO_COPY.map(rc => fs.promises.cp(`./${CONFIG.BUILD_FOLDER}/${rc}`, `./${CONFIG.DEPLOY_BUILD}/${rc}`))); +} + +function createDeployZip(bPreVersion) { + console.log("Creating deploy ZIP"); + let suffix = ''; + if (bPreVersion) { + suffix = 'nightly_' + } + if (!fs.existsSync(CONFIG.DEPLOY_VERSIONS)) { + fs.mkdirSync(`${CONFIG.DEPLOY_VERSIONS}`); + } + return zip(`${CONFIG.DEPLOY_BUILD}`, `${CONFIG.DEPLOY_VERSIONS}/journey_recorder_${suffix}${version.replace(/\./gm, '-')}.zip`); +} + +function _byteSize(iSize) { + const size_map = { + 0: 'B', + 1: 'kB', + 2: 'MB', + 3: 'GB' + }; + let divided = 0; + while (iSize > 1024) { + divided++ + iSize = iSize / 1024.0; + } + return `${Math.floor(iSize * 100) / 100.0} ${size_map[divided]}`; +} + +async function getDirSize(sDirName) { + const files = await glob.glob(`./${sDirName}/**/*.*`); + return _byteSize(files.map(f => { + try { + return fs.statSync(f).size; + } catch (_) { + return 0; + } + }).reduce((a, b) => { return a + b; }, 0)); +} + +(async () => { + cleanup(); + await buildExtension(CONFIG.PROJECT_FOLDER, CONFIG.BUILD_FOLDER); + if (argv.includes('--size')) { + console.log('Build-Size, ui5 tooling: ', (await getDirSize(CONFIG.BUILD_FOLDER))); + } + await cleanupTheBuildStuff(); + + if (argv.includes('--size')) { + console.log('Build-Size, cleanup: ', (await getDirSize(CONFIG.BUILD_FOLDER))); + } + await buildFolderStructure(); + await recursiveFolderCopy(); + await selectiveFileCopy(); + + if (argv.includes('--size')) { + console.log('Build-Size, deploy: ', (await getDirSize(CONFIG.DEPLOY_BUILD))); + } + await createDeployZip(argv.includes('--pre')); + + if (!(argv.includes('--keep'))) { + cleanup(); + } +})(); diff --git a/appTs/webapp/Component.ts b/webapp/Component.ts similarity index 100% rename from appTs/webapp/Component.ts rename to webapp/Component.ts diff --git a/app2/src/assets/.gitkeep b/webapp/assets/.gitkeep similarity index 100% rename from app2/src/assets/.gitkeep rename to webapp/assets/.gitkeep diff --git a/app2/src/assets/icons/icon/128.png b/webapp/assets/icons/icon/128.png similarity index 100% rename from app2/src/assets/icons/icon/128.png rename to webapp/assets/icons/icon/128.png diff --git a/app2/src/assets/icons/icon/16.png b/webapp/assets/icons/icon/16.png similarity index 100% rename from app2/src/assets/icons/icon/16.png rename to webapp/assets/icons/icon/16.png diff --git a/app2/src/assets/icons/icon/32.png b/webapp/assets/icons/icon/32.png similarity index 100% rename from app2/src/assets/icons/icon/32.png rename to webapp/assets/icons/icon/32.png diff --git a/app2/src/assets/icons/icon/48.png b/webapp/assets/icons/icon/48.png similarity index 100% rename from app2/src/assets/icons/icon/48.png rename to webapp/assets/icons/icon/48.png diff --git a/app2/src/assets/icons/icon/64.png b/webapp/assets/icons/icon/64.png similarity index 100% rename from app2/src/assets/icons/icon/64.png rename to webapp/assets/icons/icon/64.png diff --git a/app2/src/assets/icons/icon/80.png b/webapp/assets/icons/icon/80.png similarity index 100% rename from app2/src/assets/icons/icon/80.png rename to webapp/assets/icons/icon/80.png diff --git a/app2/src/assets/icons/icon/96.png b/webapp/assets/icons/icon/96.png similarity index 100% rename from app2/src/assets/icons/icon/96.png rename to webapp/assets/icons/icon/96.png diff --git a/app2/src/assets/icons/icon_old.png b/webapp/assets/icons/icon_old.png similarity index 100% rename from app2/src/assets/icons/icon_old.png rename to webapp/assets/icons/icon_old.png diff --git a/app2/src/assets/icons/icon_old.svg b/webapp/assets/icons/icon_old.svg similarity index 100% rename from app2/src/assets/icons/icon_old.svg rename to webapp/assets/icons/icon_old.svg diff --git a/app2/src/assets/icons/ui5_journey_recorder.png b/webapp/assets/icons/ui5_journey_recorder.png similarity index 100% rename from app2/src/assets/icons/ui5_journey_recorder.png rename to webapp/assets/icons/ui5_journey_recorder.png diff --git a/app2/src/assets/icons/ui5_journey_recorder_wb.png b/webapp/assets/icons/ui5_journey_recorder_wb.png similarity index 100% rename from app2/src/assets/icons/ui5_journey_recorder_wb.png rename to webapp/assets/icons/ui5_journey_recorder_wb.png diff --git a/appTs/webapp/assets/scripts/communication_inject.js b/webapp/assets/scripts/communication_inject.js similarity index 100% rename from appTs/webapp/assets/scripts/communication_inject.js rename to webapp/assets/scripts/communication_inject.js diff --git a/appTs/webapp/assets/scripts/content_inject.js b/webapp/assets/scripts/content_inject.js similarity index 100% rename from appTs/webapp/assets/scripts/content_inject.js rename to webapp/assets/scripts/content_inject.js diff --git a/appTs/webapp/assets/scripts/page_inject.js b/webapp/assets/scripts/page_inject.js similarity index 100% rename from appTs/webapp/assets/scripts/page_inject.js rename to webapp/assets/scripts/page_inject.js diff --git a/app2/src/assets/scripts/starter.js b/webapp/assets/scripts/starter.js similarity index 100% rename from app2/src/assets/scripts/starter.js rename to webapp/assets/scripts/starter.js diff --git a/appTs/webapp/control/CodeViewer.gen.d.ts b/webapp/control/CodeViewer.gen.d.ts similarity index 100% rename from appTs/webapp/control/CodeViewer.gen.d.ts rename to webapp/control/CodeViewer.gen.d.ts diff --git a/appTs/webapp/control/CodeViewer.ts b/webapp/control/CodeViewer.ts similarity index 100% rename from appTs/webapp/control/CodeViewer.ts rename to webapp/control/CodeViewer.ts diff --git a/appTs/webapp/control/CodeViewerRenderer.ts b/webapp/control/CodeViewerRenderer.ts similarity index 100% rename from appTs/webapp/control/CodeViewerRenderer.ts rename to webapp/control/CodeViewerRenderer.ts diff --git a/appTs/webapp/control/EditableTitle.gen.d.ts b/webapp/control/EditableTitle.gen.d.ts similarity index 100% rename from appTs/webapp/control/EditableTitle.gen.d.ts rename to webapp/control/EditableTitle.gen.d.ts diff --git a/appTs/webapp/control/EditableTitle.ts b/webapp/control/EditableTitle.ts similarity index 100% rename from appTs/webapp/control/EditableTitle.ts rename to webapp/control/EditableTitle.ts diff --git a/appTs/webapp/control/EditableTitleRenderer.ts b/webapp/control/EditableTitleRenderer.ts similarity index 100% rename from appTs/webapp/control/EditableTitleRenderer.ts rename to webapp/control/EditableTitleRenderer.ts diff --git a/appTs/webapp/controller/App.controller.ts b/webapp/controller/App.controller.ts similarity index 100% rename from appTs/webapp/controller/App.controller.ts rename to webapp/controller/App.controller.ts diff --git a/appTs/webapp/controller/BaseController.ts b/webapp/controller/BaseController.ts similarity index 100% rename from appTs/webapp/controller/BaseController.ts rename to webapp/controller/BaseController.ts diff --git a/appTs/webapp/controller/JourneyPage.controller.ts b/webapp/controller/JourneyPage.controller.ts similarity index 100% rename from appTs/webapp/controller/JourneyPage.controller.ts rename to webapp/controller/JourneyPage.controller.ts diff --git a/appTs/webapp/controller/Main.controller.ts b/webapp/controller/Main.controller.ts similarity index 100% rename from appTs/webapp/controller/Main.controller.ts rename to webapp/controller/Main.controller.ts diff --git a/appTs/webapp/controller/StepPage.controller.ts b/webapp/controller/StepPage.controller.ts similarity index 100% rename from appTs/webapp/controller/StepPage.controller.ts rename to webapp/controller/StepPage.controller.ts diff --git a/appTs/webapp/css/control/editableTitle.css b/webapp/css/control/editableTitle.css similarity index 100% rename from appTs/webapp/css/control/editableTitle.css rename to webapp/css/control/editableTitle.css diff --git a/appTs/webapp/css/hljs-github-theme.css b/webapp/css/hljs-github-theme.css similarity index 100% rename from appTs/webapp/css/hljs-github-theme.css rename to webapp/css/hljs-github-theme.css diff --git a/appTs/webapp/css/journeyPage.css b/webapp/css/journeyPage.css similarity index 100% rename from appTs/webapp/css/journeyPage.css rename to webapp/css/journeyPage.css diff --git a/appTs/webapp/css/main.css b/webapp/css/main.css similarity index 100% rename from appTs/webapp/css/main.css rename to webapp/css/main.css diff --git a/appTs/webapp/css/stepPage.css b/webapp/css/stepPage.css similarity index 100% rename from appTs/webapp/css/stepPage.css rename to webapp/css/stepPage.css diff --git a/app2/src/favicon.ico b/webapp/favicon.ico similarity index 100% rename from app2/src/favicon.ico rename to webapp/favicon.ico diff --git a/appTs/webapp/fragment/RecordingDialog.fragment.xml b/webapp/fragment/RecordingDialog.fragment.xml similarity index 100% rename from appTs/webapp/fragment/RecordingDialog.fragment.xml rename to webapp/fragment/RecordingDialog.fragment.xml diff --git a/appTs/webapp/fragment/ReplayStartDialog.fragment.xml b/webapp/fragment/ReplayStartDialog.fragment.xml similarity index 100% rename from appTs/webapp/fragment/ReplayStartDialog.fragment.xml rename to webapp/fragment/ReplayStartDialog.fragment.xml diff --git a/appTs/webapp/fragment/SettingsDialog.fragment.xml b/webapp/fragment/SettingsDialog.fragment.xml similarity index 100% rename from appTs/webapp/fragment/SettingsDialog.fragment.xml rename to webapp/fragment/SettingsDialog.fragment.xml diff --git a/appTs/webapp/fragment/StepTypeMenu.fragment.xml b/webapp/fragment/StepTypeMenu.fragment.xml similarity index 100% rename from appTs/webapp/fragment/StepTypeMenu.fragment.xml rename to webapp/fragment/StepTypeMenu.fragment.xml diff --git a/appTs/webapp/fragment/TestFrameworkMenu.fragment.xml b/webapp/fragment/TestFrameworkMenu.fragment.xml similarity index 100% rename from appTs/webapp/fragment/TestFrameworkMenu.fragment.xml rename to webapp/fragment/TestFrameworkMenu.fragment.xml diff --git a/appTs/webapp/i18n/i18n.properties b/webapp/i18n/i18n.properties similarity index 100% rename from appTs/webapp/i18n/i18n.properties rename to webapp/i18n/i18n.properties diff --git a/appTs/webapp/i18n/i18n_de.properties b/webapp/i18n/i18n_de.properties similarity index 100% rename from appTs/webapp/i18n/i18n_de.properties rename to webapp/i18n/i18n_de.properties diff --git a/appTs/webapp/i18n/i18n_en.properties b/webapp/i18n/i18n_en.properties similarity index 100% rename from appTs/webapp/i18n/i18n_en.properties rename to webapp/i18n/i18n_en.properties diff --git a/appTs/webapp/index.html b/webapp/index.html similarity index 100% rename from appTs/webapp/index.html rename to webapp/index.html diff --git a/appTs/webapp/manifest.json b/webapp/manifest.json similarity index 100% rename from appTs/webapp/manifest.json rename to webapp/manifest.json diff --git a/appTs/webapp/model/class/Journey.class.ts b/webapp/model/class/Journey.class.ts similarity index 100% rename from appTs/webapp/model/class/Journey.class.ts rename to webapp/model/class/Journey.class.ts diff --git a/appTs/webapp/model/class/RequestBuilder.class.ts b/webapp/model/class/RequestBuilder.class.ts similarity index 100% rename from appTs/webapp/model/class/RequestBuilder.class.ts rename to webapp/model/class/RequestBuilder.class.ts diff --git a/appTs/webapp/model/class/Step.class.ts b/webapp/model/class/Step.class.ts similarity index 100% rename from appTs/webapp/model/class/Step.class.ts rename to webapp/model/class/Step.class.ts diff --git a/appTs/webapp/model/class/StringBuilder.class.ts b/webapp/model/class/StringBuilder.class.ts similarity index 100% rename from appTs/webapp/model/class/StringBuilder.class.ts rename to webapp/model/class/StringBuilder.class.ts diff --git a/appTs/webapp/model/class/Utils.class.ts b/webapp/model/class/Utils.class.ts similarity index 100% rename from appTs/webapp/model/class/Utils.class.ts rename to webapp/model/class/Utils.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/CodePage.type.ts b/webapp/model/class/codeStrategies/CodePage.type.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/CodePage.type.ts rename to webapp/model/class/codeStrategies/CodePage.type.ts diff --git a/appTs/webapp/model/class/codeStrategies/opa5/CommonPageBuilder.class.ts b/webapp/model/class/codeStrategies/opa5/CommonPageBuilder.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/opa5/CommonPageBuilder.class.ts rename to webapp/model/class/codeStrategies/opa5/CommonPageBuilder.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/opa5/OPA5CodeStrategy.class.ts b/webapp/model/class/codeStrategies/opa5/OPA5CodeStrategy.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/opa5/OPA5CodeStrategy.class.ts rename to webapp/model/class/codeStrategies/opa5/OPA5CodeStrategy.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/opa5/OPA5SingleStepStrategy.class.ts b/webapp/model/class/codeStrategies/opa5/OPA5SingleStepStrategy.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/opa5/OPA5SingleStepStrategy.class.ts rename to webapp/model/class/codeStrategies/opa5/OPA5SingleStepStrategy.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/opa5/PageBuilder.class.ts b/webapp/model/class/codeStrategies/opa5/PageBuilder.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/opa5/PageBuilder.class.ts rename to webapp/model/class/codeStrategies/opa5/PageBuilder.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/opa5/ViewPageBuilder.class.ts b/webapp/model/class/codeStrategies/opa5/ViewPageBuilder.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/opa5/ViewPageBuilder.class.ts rename to webapp/model/class/codeStrategies/opa5/ViewPageBuilder.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/wdi5/Wdi5CodeStrategy.class.ts b/webapp/model/class/codeStrategies/wdi5/Wdi5CodeStrategy.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/wdi5/Wdi5CodeStrategy.class.ts rename to webapp/model/class/codeStrategies/wdi5/Wdi5CodeStrategy.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/wdi5/Wdi5PageBuilder.class.ts b/webapp/model/class/codeStrategies/wdi5/Wdi5PageBuilder.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/wdi5/Wdi5PageBuilder.class.ts rename to webapp/model/class/codeStrategies/wdi5/Wdi5PageBuilder.class.ts diff --git a/appTs/webapp/model/class/codeStrategies/wdi5/Wdi5SingleStepStrategy.class.ts b/webapp/model/class/codeStrategies/wdi5/Wdi5SingleStepStrategy.class.ts similarity index 100% rename from appTs/webapp/model/class/codeStrategies/wdi5/Wdi5SingleStepStrategy.class.ts rename to webapp/model/class/codeStrategies/wdi5/Wdi5SingleStepStrategy.class.ts diff --git a/appTs/webapp/model/enum/ConnectionStatus.ts b/webapp/model/enum/ConnectionStatus.ts similarity index 100% rename from appTs/webapp/model/enum/ConnectionStatus.ts rename to webapp/model/enum/ConnectionStatus.ts diff --git a/appTs/webapp/model/enum/StepType.ts b/webapp/model/enum/StepType.ts similarity index 100% rename from appTs/webapp/model/enum/StepType.ts rename to webapp/model/enum/StepType.ts diff --git a/appTs/webapp/model/enum/TestFrameworks.ts b/webapp/model/enum/TestFrameworks.ts similarity index 100% rename from appTs/webapp/model/enum/TestFrameworks.ts rename to webapp/model/enum/TestFrameworks.ts diff --git a/appTs/webapp/model/enum/Themes.ts b/webapp/model/enum/Themes.ts similarity index 100% rename from appTs/webapp/model/enum/Themes.ts rename to webapp/model/enum/Themes.ts diff --git a/appTs/webapp/model/formatter.ts b/webapp/model/formatter.ts similarity index 100% rename from appTs/webapp/model/formatter.ts rename to webapp/model/formatter.ts diff --git a/appTs/webapp/model/models.ts b/webapp/model/models.ts similarity index 100% rename from appTs/webapp/model/models.ts rename to webapp/model/models.ts diff --git a/appTs/webapp/service/ChromeExtension.service.ts b/webapp/service/ChromeExtension.service.ts similarity index 100% rename from appTs/webapp/service/ChromeExtension.service.ts rename to webapp/service/ChromeExtension.service.ts diff --git a/appTs/webapp/service/CodeGeneration.service.ts b/webapp/service/CodeGeneration.service.ts similarity index 100% rename from appTs/webapp/service/CodeGeneration.service.ts rename to webapp/service/CodeGeneration.service.ts diff --git a/appTs/webapp/service/JourneyStorage.service.ts b/webapp/service/JourneyStorage.service.ts similarity index 100% rename from appTs/webapp/service/JourneyStorage.service.ts rename to webapp/service/JourneyStorage.service.ts diff --git a/appTs/webapp/service/SettingsStorage.service.ts b/webapp/service/SettingsStorage.service.ts similarity index 100% rename from appTs/webapp/service/SettingsStorage.service.ts rename to webapp/service/SettingsStorage.service.ts diff --git a/appTs/webapp/test/e2e/sample.test.ts b/webapp/test/e2e/sample.test.ts similarity index 100% rename from appTs/webapp/test/e2e/sample.test.ts rename to webapp/test/e2e/sample.test.ts diff --git a/appTs/webapp/test/e2e/tsconfig.json b/webapp/test/e2e/tsconfig.json similarity index 100% rename from appTs/webapp/test/e2e/tsconfig.json rename to webapp/test/e2e/tsconfig.json diff --git a/appTs/webapp/test/e2e/wdio.conf.ts b/webapp/test/e2e/wdio.conf.ts similarity index 100% rename from appTs/webapp/test/e2e/wdio.conf.ts rename to webapp/test/e2e/wdio.conf.ts diff --git a/appTs/webapp/test/integration/HelloJourney.ts b/webapp/test/integration/HelloJourney.ts similarity index 100% rename from appTs/webapp/test/integration/HelloJourney.ts rename to webapp/test/integration/HelloJourney.ts diff --git a/appTs/webapp/test/integration/opaTests.qunit.html b/webapp/test/integration/opaTests.qunit.html similarity index 100% rename from appTs/webapp/test/integration/opaTests.qunit.html rename to webapp/test/integration/opaTests.qunit.html diff --git a/appTs/webapp/test/integration/opaTests.qunit.ts b/webapp/test/integration/opaTests.qunit.ts similarity index 100% rename from appTs/webapp/test/integration/opaTests.qunit.ts rename to webapp/test/integration/opaTests.qunit.ts diff --git a/appTs/webapp/test/integration/pages/MainPage.ts b/webapp/test/integration/pages/MainPage.ts similarity index 100% rename from appTs/webapp/test/integration/pages/MainPage.ts rename to webapp/test/integration/pages/MainPage.ts diff --git a/appTs/webapp/test/testsuite.qunit.html b/webapp/test/testsuite.qunit.html similarity index 100% rename from appTs/webapp/test/testsuite.qunit.html rename to webapp/test/testsuite.qunit.html diff --git a/appTs/webapp/test/testsuite.qunit.ts b/webapp/test/testsuite.qunit.ts similarity index 100% rename from appTs/webapp/test/testsuite.qunit.ts rename to webapp/test/testsuite.qunit.ts diff --git a/appTs/webapp/test/unit/class/Journey.class.qunit.ts b/webapp/test/unit/class/Journey.class.qunit.ts similarity index 100% rename from appTs/webapp/test/unit/class/Journey.class.qunit.ts rename to webapp/test/unit/class/Journey.class.qunit.ts diff --git a/appTs/webapp/test/unit/class/Step.class.qunit.ts b/webapp/test/unit/class/Step.class.qunit.ts similarity index 100% rename from appTs/webapp/test/unit/class/Step.class.qunit.ts rename to webapp/test/unit/class/Step.class.qunit.ts diff --git a/appTs/webapp/test/unit/controller/Main.qunit.ts b/webapp/test/unit/controller/Main.qunit.ts similarity index 100% rename from appTs/webapp/test/unit/controller/Main.qunit.ts rename to webapp/test/unit/controller/Main.qunit.ts diff --git a/appTs/webapp/test/unit/unitTests.qunit.html b/webapp/test/unit/unitTests.qunit.html similarity index 100% rename from appTs/webapp/test/unit/unitTests.qunit.html rename to webapp/test/unit/unitTests.qunit.html diff --git a/appTs/webapp/test/unit/unitTests.qunit.ts b/webapp/test/unit/unitTests.qunit.ts similarity index 100% rename from appTs/webapp/test/unit/unitTests.qunit.ts rename to webapp/test/unit/unitTests.qunit.ts diff --git a/appTs/webapp/view/App.view.xml b/webapp/view/App.view.xml similarity index 100% rename from appTs/webapp/view/App.view.xml rename to webapp/view/App.view.xml diff --git a/appTs/webapp/view/JourneyPage.view.xml b/webapp/view/JourneyPage.view.xml similarity index 100% rename from appTs/webapp/view/JourneyPage.view.xml rename to webapp/view/JourneyPage.view.xml diff --git a/appTs/webapp/view/Main.view.xml b/webapp/view/Main.view.xml similarity index 100% rename from appTs/webapp/view/Main.view.xml rename to webapp/view/Main.view.xml diff --git a/appTs/webapp/view/StepPage.view.xml b/webapp/view/StepPage.view.xml similarity index 100% rename from appTs/webapp/view/StepPage.view.xml rename to webapp/view/StepPage.view.xml