diff --git a/.editorconfig b/.editorconfig index 3bae8b56e..03f309931 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,3 +12,7 @@ indent_style = space [{*.less,package.json,*.yml}] indent_size = 2 + +[tsup/*.ts] +indent_size = 4 +indent_style = tab diff --git a/.eslintrc.js b/.eslintrc.js index 688ad1b0e..ab9fe9235 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,8 +1,12 @@ module.exports = { extends: '@enonic/eslint-config', parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname, + project: [ + './src/main/resources/tsconfig.json', + './src/main/resources/_static/tsconfig.json', + './src/test/resources/tsconfig.json', + ], + // tsconfigRootDir: __dirname, }, 'rules': { 'new-cap': ['warn', {'capIsNewExceptions': ['Q']}], diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index e27314e3e..283bdfd23 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -41,6 +41,12 @@ jobs: with: ref: ${{ github.event.client_payload.ref || github.ref }} + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: 11 + distribution: 'temurin' + - uses: actions/cache@v3 with: path: | diff --git a/.swcrc b/.swcrc deleted file mode 100644 index 7a9a30c09..000000000 --- a/.swcrc +++ /dev/null @@ -1,29 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "typescript", - "tsx": false, - "decorators": false, - "dynamicImport": true - }, - "transform": { - "legacyDecorator": true, - "decoratorMetadata": true - }, - "target": "es5", - "keepClassNames": true, - "loose": true - }, - "exclude": [ - ".*\\.d\\.ts$", - "/lib/" - ], - "module": { - "type": "commonjs", - "strict": true, - "strictMode": true, - "lazy": false, - "noInterop": true - }, - "sourceMaps": "inline" -} diff --git a/build.gradle b/build.gradle index 9dd1c8832..8efe0da10 100644 --- a/build.gradle +++ b/build.gradle @@ -38,10 +38,13 @@ dependencies { include "com.enonic.xp:lib-node:${xpVersion}" include "com.enonic.xp:lib-auth:${xpVersion}" include "com.enonic.xp:lib-i18n:${xpVersion}" + include "com.enonic.xp:lib-io:${xpVersion}" include "com.enonic.lib:lib-admin-ui:${libAdminUiVersion}" devResources "com.enonic.lib:lib-admin-ui:${libAdminUiVersion}" - include "com.enonic.lib:lib-graphql:2.0.1" + include "com.enonic.lib:lib-graphql:2.1.0" include "com.enonic.lib:lib-mustache:2.1.0" + include 'com.enonic.lib:lib-router:3.1.0' + include 'com.enonic.lib:lib-static:1.0.3' testImplementation "com.enonic.xp:testing:${xpVersion}" testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1' @@ -62,6 +65,21 @@ repositories { xp.enonicRepo( 'dev' ) } +tasks.register('npmCheck', NpmTask) { + dependsOn( 'npmInstall' ) + args = [ + 'run', + 'check:types' + ] + environment = [ + 'FORCE_COLOR': 'true', + ] +} + +tasks.withType(Copy).configureEach { + includeEmptyDirs = false +} + tasks.register('lint', NpmTask) { dependsOn ( 'npmInstall' ) group "verification" @@ -69,35 +87,61 @@ tasks.register('lint', NpmTask) { outputs.upToDateWhen { false } } -check.dependsOn lint +check.dependsOn( 'lint', 'npmCheck' ) -tasks.register('webpack', NpmTask) { +tasks.register('npmBuild', NpmTask) { dependsOn( 'npmInstall' ) - environment = ['NODE_ENV': nodeEnvironment()] + environment = [ + 'FORCE_COLOR': 'true', + 'LOG_LEVEL_FROM_GRADLE': gradle.startParameter.logLevel.toString(), + 'NODE_ENV': nodeEnvironment() + ] description = 'Build UI resources (ts, css, etc).' - args = ['run', 'build'] + args = ['run', '--silent', 'build'] inputs.dir '.xp/dev' - inputs.dir 'src/main/resources/assets' - inputs.file 'webpack.config.js' + inputs.dir 'src/main/resources' outputs.dir "$buildDir/build/resources/main" + inputs.file 'tsup.config.ts' } -jar { - exclude 'assets/**/*.ts' - exclude 'assets/**/*.less' - exclude 'assets/styles/*.js' +tasks.register('npmBuildTests', NpmTask) { + dependsOn( 'npmBuild', 'processTestResources' ) + environment = [ + 'FORCE_COLOR': 'true', + 'LOG_LEVEL_FROM_GRADLE': gradle.startParameter.logLevel.toString(), + 'NODE_ENV': nodeEnvironment() + ] + description = 'Build tests' + args = ['run', '--silent', 'build:tests'] + inputs.dir 'src/test/resources' + outputs.dir "$buildDir/build/resources/test" + inputs.file 'tsup.config.ts' +} + +processResources { + exclude '**/*.ts' + exclude 'assets/**/*.less' // lessc and postcss will handle this + exclude 'assets/**/*.woff' // postcss-url will copy + exclude 'assets/**/*.woff2' // postcss-url will copy if ( isProd() ) { exclude 'assets/**/*.map' } +} - outputs.dir "$buildDir/resources/main" +processTestResources { + exclude '**/*.ts' +} - dependsOn( 'webpack', 'javadoc', 'test' ) +jar { + outputs.dir "$buildDir/resources/main" + dependsOn( 'npmBuild', 'javadoc', 'test' ) } test { + dependsOn( 'npmBuildTests' ) + useJUnitPlatform() systemProperty 'java.awt.headless', 'true' jvmArgs '-noverify', '-XX:TieredStopAtLevel=1' diff --git a/gradle.properties b/gradle.properties index 26b3580f2..ab15edcad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,6 @@ # Project settings # version=7.14.0-SNAPSHOT -libAdminUiVersion=4.9.0-SNAPSHOT +libAdminUiVersion=4.9.0-3266-SNAPSHOT systemProp.org.gradle.internal.http.connectionTimeout=120000 systemProp.org.gradle.internal.http.socketTimeout=120000 diff --git a/gradle/node.gradle b/gradle/node.gradle index 911262f7e..2def80545 100644 --- a/gradle/node.gradle +++ b/gradle/node.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.github.node-gradle.node' node { - version = '18.17.1' + version = '18.18.1' download = true } diff --git a/package-lock.json b/package-lock.json index 2d7b39ba4..b5914cfe4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,26 @@ "version": "1.0.0", "license": "GPL-3.0", "dependencies": { + "@enonic/legacy-slickgrid": "^0.0.1", "@enonic/lib-admin-ui": "file:./.xp/dev/lib-admin-ui", "hasher": "^1.2.0", "jquery": "^3.7.1", + "jquery-ui-dist": "^1.13.2", "nanoid": "^5.0.2", "owasp-password-strength-test": "^1.3.0", "q": "^1.5.1" }, "devDependencies": { + "@enonic-types/global": "^7.13.2", + "@enonic-types/lib-admin": "^7.13.2", + "@enonic-types/lib-auth": "^7.13.2", + "@enonic-types/lib-i18n": "^7.13.2", + "@enonic-types/lib-io": "^7.13.2", + "@enonic-types/lib-node": "^7.13.2", + "@enonic-types/lib-portal": "^7.13.2", + "@enonic/esbuild-plugin-copy-with-hash": "^0.0.1", "@enonic/eslint-config": "^1.2.0", + "@enonic/tsup-plugin-manifest": "^0.0.1", "@swc/core": "^1.3.93", "@types/hasher": "^0.0.33", "@types/nanoid": "^3.0.0", @@ -25,132 +36,32 @@ "@types/q": "^1.5.6", "@typescript-eslint/eslint-plugin": "^6.7.5", "@typescript-eslint/parser": "^6.7.5", + "autoprefixer": "^10.4.15", "browserslist-config-enonic": "^1.0.7", - "circular-dependency-plugin": "^5.2.2", - "cssnano": "^6.0.1", - "enonic-admin-artifacts": "^1.8.5", - "eslint": "^8.51.0", - "mini-css-extract-plugin": "^2.7.6", - "npm-run-all": "^4.1.5", - "postcss-loader": "^7.3.3", - "source-map-loader": "^4.0.1", - "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.9", - "typescript": "^5.2.2", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" - }, - "engines": { - "node": ">= 18.17.1", - "npm": ">= 9.6.7" - } - }, - ".xp/dev/lib-admin-ui": { - "name": "@enonic/lib-admin-ui", - "version": "4.9.0", - "license": "GPL-3.0", - "dependencies": { - "@types/dompurify": "^3.0.3", - "@types/mousetrap": "^1.6.12", - "@types/slickgrid": "^2.1.36", - "dompurify": "^3.0.6", - "fine-uploader": "^5.16.2", - "jquery": "^3.7.1", - "jquery-simulate": "^1.0.2", - "jquery-ui": "^1.13.2", - "mousetrap": "^1.6.5", - "q": "^1.5.1", - "slickgrid": "^4.0.1", - "validator": "^13.11.0" - }, - "devDependencies": { - "@enonic/eslint-config": "^1.2.0", - "@swc/cli": "^0.1.62", - "@swc/core": "1.3.93", - "@types/jquery": "^3.5.22", - "@types/jqueryui": "^1.12.18", - "@types/q": "^1.5.6", - "@types/semver": "^7.5.3", - "@types/validator": "^13.11.3", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "autoprefixer": "^10.4.16", - "browserslist": "^4.22.1", - "browserslist-config-enonic": "^1.0.8", - "circular-dependency-plugin": "^5.2.2", - "copy-webpack-plugin": "^11.0.0", + "concurrently": "^8.2.1", "css-loader": "^6.8.1", "cssnano": "^6.0.1", "enonic-admin-artifacts": "^1.8.5", - "error-logger-webpack-plugin": "^1.1.1", + "esbuild-plugin-external-global": "^1.0.1", + "esbuild-plugin-globals": "^0.2.0", "eslint": "^8.51.0", - "glob": "^10.3.10", + "glob": "^10.3.4", "less": "^4.2.0", "less-loader": "^11.1.3", - "mini-css-extract-plugin": "^2.7.6", "npm-run-all": "^4.1.5", + "postcss-cli": "^10.1.0", "postcss-loader": "^7.3.3", "postcss-normalize": "^10.0.1", "postcss-sort-media-queries": "^5.2.0", + "postcss-url": "^10.1.3", + "source-map-loader": "^4.0.1", "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.9", - "ts-loader": "^9.5.0", - "typescript": "^5.2.2", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" + "tsup": "^7.2.0", + "typescript": "^5.2.2" }, "engines": { "node": ">= 18.17.1", "npm": ">= 9.6.7" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - ".xp/dev/lib-admin-ui/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - ".xp/dev/lib-admin-ui/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - ".xp/dev/lib-admin-ui/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -197,473 +108,329 @@ "node": ">=6.9.0" } }, - "node_modules/@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", - "dev": true - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@enonic/eslint-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@enonic/eslint-config/-/eslint-config-1.2.0.tgz", - "integrity": "sha512-5gxNA0HLTVin+m+AeU2CxklTwGUvgwCM/6EtXVKm3Kef5ISptDV33XFHDcsJfFAYF8vpd2KY/4zV1gSMqKQD5w==", - "dev": true, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">=6.0.0", - "@typescript-eslint/parser": ">=6.0.0", - "eslint": ">=8.44.0", - "typescript": ">=4.3.5" - } - }, - "node_modules/@enonic/lib-admin-ui": { - "resolved": ".xp/dev/lib-admin-ui", - "link": true - }, - "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==", + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=6.9.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "node_modules/@cjs-exporter/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@cjs-exporter/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-rxSVbUhNmIYTZKzrtb6cJIUfFk0PDxzeR4+dzi8edKYmmbqRBO/k7N+tW///QmtY6OznemXiLMSZ20E6DHegxQ==", "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "dependencies": { + "globby": "13.1.3" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "node_modules/@cjs-exporter/globby/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@cjs-exporter/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, "engines": { - "node": ">=6.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "node_modules/@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", "dev": true }, - "node_modules/@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } + "node_modules/@enonic-types/core": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/core/-/core-7.13.3.tgz", + "integrity": "sha512-wi4mNgs+6Pyhs/Zik0NVmPecNjlSR3JvgzHeglGReDVhiEzwQkMvFKx83rO/0HR5+WBX8b4YVlms8i5020E1HQ==", + "dev": true }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } + "node_modules/@enonic-types/global": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/global/-/global-7.13.3.tgz", + "integrity": "sha512-V2etTglryEW+6i/WP8b64f6ZospVRme5Ku+1IW+biRsXpZqHbS3VGj0BlEeAnaGmBNS1WRVqHN0cGXGH29VRvw==", + "dev": true }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@enonic-types/lib-admin": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-admin/-/lib-admin-7.13.3.tgz", + "integrity": "sha512-UA62DOCN5x7Jj4F8MxDpa6l+7GfkZI0O59xvoT5BfJF8JGoKWbhaUadRZsMJiaDhKkQUMjcPLF4bD3FZVGkuPA==", + "dev": true + }, + "node_modules/@enonic-types/lib-auth": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-auth/-/lib-auth-7.13.3.tgz", + "integrity": "sha512-HEme70wCpzqpfWGi2DSMffq2KDKI+u8QJLAeu1k+g49RFWwYcdtC0AXdvu0GN4dzIW/2ITs72JFLW/fAMXM+tw==", "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "@enonic-types/core": "7.13.3" } }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "node_modules/@enonic-types/lib-i18n": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-i18n/-/lib-i18n-7.13.3.tgz", + "integrity": "sha512-7/eHD0PWuacER+/XbJM2WbL010NbH6gEJLxsg8LKmOXg1Dz+T6KQlSTVK+nyG2SoGt+8kJjFZVNXLirQezbaPg==", "dev": true }, - "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==", + "node_modules/@enonic-types/lib-io": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-io/-/lib-io-7.13.3.tgz", + "integrity": "sha512-JjFwV1RH44QrSOMPsouTfEbh3eecpd+mWhE6FNj+gdwNV8JkKLqGZuXEYrgB+SLC/aN+Qt7rIa7fog/tTwP8VQ==", "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "dependencies": { + "@enonic-types/core": "7.13.3" } }, - "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==", + "node_modules/@enonic-types/lib-node": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-node/-/lib-node-7.13.3.tgz", + "integrity": "sha512-uyT5S2bbHrWPYOejVyOSaCDyc9QVW/4sG1A9jXVj57KEN5ZvokkRUPz2RSXHQLgg7wCT+Vl8aqDWUPeyUzpw1g==", "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" + "@enonic-types/core": "7.13.3" } }, - "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==", + "node_modules/@enonic-types/lib-portal": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-portal/-/lib-portal-7.13.3.tgz", + "integrity": "sha512-Bhy8po+HA6HQsI709Qcxg0i1B7p46IJMO3WZB4YdVDeO6dC56yV1cnsFcuV9PSPSPO51ZOZ7O3zc5SuJ7B5w/g==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "dependencies": { + "@enonic-types/core": "7.13.3" } }, - "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==", + "node_modules/@enonic/esbuild-plugin-copy-with-hash": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@enonic/esbuild-plugin-copy-with-hash/-/esbuild-plugin-copy-with-hash-0.0.1.tgz", + "integrity": "sha512-HUEF1znqgEJyjd9TUsIZeIo9VL59xgaIpwoHeICAtWLmcUIQ2OBjPw8udBepM/mrI2jf0tVDT47IB+85bqjVvw==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@cjs-exporter/globby": "^13.1.3", + "colorette": "^2.0.20", + "xxh3-ts": "^1.0.6" }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "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", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "peerDependencies": { + "esbuild": "~0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "node_modules/@enonic/eslint-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@enonic/eslint-config/-/eslint-config-1.2.0.tgz", + "integrity": "sha512-5gxNA0HLTVin+m+AeU2CxklTwGUvgwCM/6EtXVKm3Kef5ISptDV33XFHDcsJfFAYF8vpd2KY/4zV1gSMqKQD5w==", "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">=6.0.0", + "@typescript-eslint/parser": ">=6.0.0", + "eslint": ">=8.44.0", + "typescript": ">=4.3.5" } }, - "node_modules/@mole-inc/bin-wrapper": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz", - "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==", - "dev": true, - "dependencies": { - "bin-check": "^4.1.0", - "bin-version-check": "^5.0.0", - "content-disposition": "^0.5.4", - "ext-name": "^5.0.0", - "file-type": "^17.1.6", - "filenamify": "^5.0.2", - "got": "^11.8.5", - "os-filter-obj": "^2.0.0" + "node_modules/@enonic/legacy-slickgrid": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@enonic/legacy-slickgrid/-/legacy-slickgrid-0.0.1.tgz", + "integrity": "sha512-9HVwJg+ZQ0+KA0e3yF2p9n8q+FqZUJg/zuG9n5mO/bhsniNjTwfZzH43bALN67VHz2zcyIOYZfxZZcHjr4j4Pw==", + "peerDependencies": { + "jquery": "^3.7.1", + "jquery-ui": "^1.13.2", + "jquery-ui-dist": "^1.13.2" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "peerDependenciesMeta": { + "jquery-ui": { + "optional": true + }, + "jquery-ui-dist": { + "optional": true + } } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@enonic/lib-admin-ui": { + "version": "4.8.0", + "resolved": "file:.xp/dev/lib-admin-ui", + "license": "GPL-3.0", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@types/dompurify": "^3.0.3", + "@types/mousetrap": "^1.6.12", + "@types/slickgrid": "^2.1.36", + "dompurify": "^3.0.6", + "fine-uploader": "^5.16.2", + "jquery-simulate": "^1.0.2", + "mousetrap": "^1.6.5", + "q": "^1.5.1", + "slickgrid": "^4.0.1", + "validator": "^13.11.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" + "node": ">= 18.17.1", + "npm": ">= 9.6.7" + }, + "peerDependencies": { + "jquery": "^3.7.1", + "jquery-ui-dist": "^1.13.2", + "postcss": "^8.2.2" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@enonic/tsup-plugin-manifest": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@enonic/tsup-plugin-manifest/-/tsup-plugin-manifest-0.0.1.tgz", + "integrity": "sha512-AL3X7xm6S8iE6bDbFP4Fnb9pOUembe/YpiAVw5/Dfj494ckiT42eeRb3HEFEFyiWrRjqP5weGb18t+sqL+GZfw==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "colorette": "^2.0.20" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "esbuild": "~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==", + "node_modules/@esbuild/android-arm": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.4.tgz", + "integrity": "sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==", + "cpu": [ + "arm" + ], "dev": true, "optional": true, + "os": [ + "android" + ], + "peer": true, "engines": { - "node": ">=14" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "node": ">=12" } }, - "node_modules/@swc/cli": { - "version": "0.1.62", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz", - "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==", + "node_modules/@esbuild/android-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz", + "integrity": "sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@mole-inc/bin-wrapper": "^8.0.1", - "commander": "^7.1.0", - "fast-glob": "^3.2.5", - "semver": "^7.3.8", - "slash": "3.0.0", - "source-map": "^0.7.3" - }, - "bin": { - "spack": "bin/spack.js", - "swc": "bin/swc.js", - "swcx": "bin/swcx.js" - }, + "optional": true, + "os": [ + "android" + ], + "peer": true, "engines": { - "node": ">= 12.13" - }, - "peerDependencies": { - "@swc/core": "^1.2.66", - "chokidar": "^3.5.1" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@swc/cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/@esbuild/android-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.4.tgz", + "integrity": "sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@swc/cli/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz", + "integrity": "sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/@swc/core": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.93.tgz", - "integrity": "sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz", + "integrity": "sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==", + "cpu": [ + "x64" + ], "dev": true, - "hasInstallScript": true, - "dependencies": { - "@swc/counter": "^0.1.1", - "@swc/types": "^0.1.5" - }, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.93", - "@swc/core-darwin-x64": "1.3.93", - "@swc/core-linux-arm-gnueabihf": "1.3.93", - "@swc/core-linux-arm64-gnu": "1.3.93", - "@swc/core-linux-arm64-musl": "1.3.93", - "@swc/core-linux-x64-gnu": "1.3.93", - "@swc/core-linux-x64-musl": "1.3.93", - "@swc/core-win32-arm64-msvc": "1.3.93", - "@swc/core-win32-ia32-msvc": "1.3.93", - "@swc/core-win32-x64-msvc": "1.3.93" - }, - "peerDependencies": { - "@swc/helpers": "^0.5.0" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-darwin-arm64": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.93.tgz", - "integrity": "sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz", + "integrity": "sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "darwin" + "freebsd" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-darwin-x64": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.93.tgz", - "integrity": "sha512-ZQPxm/fXdDQtn3yrYSL/gFfA8OfZ5jTi33yFQq6vcg/Y8talpZ+MgdSlYM0FkLrZdMTYYTNFiuBQuuvkA+av+Q==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz", + "integrity": "sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "darwin" + "freebsd" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.93.tgz", - "integrity": "sha512-OYFMMI2yV+aNe3wMgYhODxHdqUB/jrK0SEMHHS44GZpk8MuBXEF+Mcz4qjkY5Q1EH7KVQqXb/gVWwdgTHpjM2A==", + "node_modules/@esbuild/linux-arm": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz", + "integrity": "sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==", "cpu": [ "arm" ], @@ -672,14 +439,15 @@ "os": [ "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.93.tgz", - "integrity": "sha512-BT4dT78odKnJMNiq5HdjBsv29CiIdcCcImAPxeFqAeFw1LL6gh9nzI8E96oWc+0lVT5lfhoesCk4Qm7J6bty8w==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz", + "integrity": "sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==", "cpu": [ "arm64" ], @@ -688,258 +456,815 @@ "os": [ "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.93.tgz", - "integrity": "sha512-yH5fWEl1bktouC0mhh0Chuxp7HEO4uCtS/ly1Vmf18gs6wZ8DOOkgAEVv2dNKIryy+Na++ljx4Ym7C8tSJTrLw==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz", + "integrity": "sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "optional": true, "os": [ "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.93.tgz", - "integrity": "sha512-OFUdx64qvrGJhXKEyxosHxgoUVgba2ztYh7BnMiU5hP8lbI8G13W40J0SN3CmFQwPP30+3oEbW7LWzhKEaYjlg==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz", + "integrity": "sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==", "cpu": [ - "x64" + "loong64" ], "dev": true, "optional": true, "os": [ "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.93.tgz", - "integrity": "sha512-4B8lSRwEq1XYm6xhxHhvHmKAS7pUp1Q7E33NQ2TlmFhfKvCOh86qvThcjAOo57x8DRwmpvEVrqvpXtYagMN6Ig==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz", + "integrity": "sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==", "cpu": [ - "x64" + "mips64el" ], "dev": true, "optional": true, "os": [ "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.93.tgz", - "integrity": "sha512-BHShlxtkven8ZjjvZ5QR6sC5fZCJ9bMujEkiha6W4cBUTY7ce7qGFyHmQd+iPC85d9kD/0cCiX/Xez8u0BhO7w==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz", + "integrity": "sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, "optional": true, "os": [ - "win32" + "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.93.tgz", - "integrity": "sha512-nEwNWnz4JzYAK6asVvb92yeylfxMYih7eMQOnT7ZVlZN5ba9WF29xJ6kcQKs9HRH6MvWhz9+wRgv3FcjlU6HYA==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz", + "integrity": "sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==", "cpu": [ - "ia32" + "riscv64" ], "dev": true, "optional": true, "os": [ - "win32" + "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/core/node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.93", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.93.tgz", - "integrity": "sha512-jibQ0zUr4kwJaQVwgmH+svS04bYTPnPw/ZkNInzxS+wFAtzINBYcU8s2PMWbDb2NGYiRSEeoSGyAvS9H+24JFA==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz", + "integrity": "sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==", "cpu": [ - "x64" + "s390x" ], "dev": true, "optional": true, "os": [ - "win32" + "linux" ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@swc/counter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.1.tgz", - "integrity": "sha512-xVRaR4u9hcYjFvcSg71Lz5Bo4//CyjAAfMxa7UsaDSYxAshflUkVJWiyVWrfxC59z2kP1IzI4/1BEpnhI9o3Mw==", - "dev": true - }, - "node_modules/@swc/types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", - "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", - "dev": true - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "node_modules/@esbuild/linux-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz", + "integrity": "sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz", + "integrity": "sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, "engines": { - "node": ">=10.13.0" + "node": ">=12" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz", + "integrity": "sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@types/dompurify": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.3.tgz", - "integrity": "sha512-odiGr/9/qMqjcBOe5UhcNLOFHSYmKFOyr+bJ/Xu3Qp4k1pNPAlNLUVNNLcLfjQI7+W7ObX58EdD3H+3p3voOvA==", - "dependencies": { - "@types/trusted-types": "*" + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz", + "integrity": "sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz", + "integrity": "sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz", + "integrity": "sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "node_modules/@esbuild/win32-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz", + "integrity": "sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } }, - "node_modules/@types/hasher": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/hasher/-/hasher-0.0.33.tgz", - "integrity": "sha512-G9uTuvEWoSlXFTDcw8/BE+DH3BGabFmLQeeBM11sZxdmkG47GkAVU9y6lzpszj56Ni9flHzuJ4DbiNFRLhxQMg==", + "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": { - "@types/signals": "*" + "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/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } }, - "node_modules/@types/jquery": { - "version": "3.5.23", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.23.tgz", - "integrity": "sha512-LwtD05mlY8iPF/1aB8dOZaYhRDothbHA7csnAxhyqMnQxj90Fo3J4nPhmHiA0OMTwHhjwZdE1Lpd6UK+b+C6Bw==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, "dependencies": { - "@types/sizzle": "*" + "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/@types/jqueryui": { - "version": "1.12.18", - "resolved": "https://registry.npmjs.org/@types/jqueryui/-/jqueryui-1.12.18.tgz", - "integrity": "sha512-crlmH8kFzIiU+4aBFgvYUjykSaOTP5RDw7NqkFkcSNWFAF/SMPrr7sY1uNXDEhite/2pEwUoZlufQoy87A22LA==", + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@types/jquery": "*" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "node_modules/@eslint/js": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@types/mousetrap": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.12.tgz", - "integrity": "sha512-tzXGzMbvXt815z0Z7FE45wmRVRitMTaPgfVcdGhOS6LtEOWBZBokFJxEdatVA8cj+cQxvdFLmlMC4c12TNqv9A==" - }, - "node_modules/@types/nanoid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/nanoid/-/nanoid-3.0.0.tgz", - "integrity": "sha512-UXitWSmXCwhDmAKe7D3hNQtQaHeHt5L8LO1CB8GF8jlYVzOv5cBWDNqiJ+oPEWrWei3i3dkZtHY/bUtd0R/uOQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { - "nanoid": "*" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@types/node": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.1.tgz", - "integrity": "sha512-NXKvBVUzIbs6ylBwmOwHFkZS2EXCcjnqr8ZCRNaXBkHAf+3mn/rPcJxwrzuc6movh8fxQAsUUfYklJ/EG+hZqQ==", + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "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/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/@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", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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/@swc/core": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.93.tgz", + "integrity": "sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.93", + "@swc/core-darwin-x64": "1.3.93", + "@swc/core-linux-arm-gnueabihf": "1.3.93", + "@swc/core-linux-arm64-gnu": "1.3.93", + "@swc/core-linux-arm64-musl": "1.3.93", + "@swc/core-linux-x64-gnu": "1.3.93", + "@swc/core-linux-x64-musl": "1.3.93", + "@swc/core-win32-arm64-msvc": "1.3.93", + "@swc/core-win32-ia32-msvc": "1.3.93", + "@swc/core-win32-x64-msvc": "1.3.93" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core/node_modules/@swc/core-darwin-arm64": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.93.tgz", + "integrity": "sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-darwin-x64": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.93.tgz", + "integrity": "sha512-ZQPxm/fXdDQtn3yrYSL/gFfA8OfZ5jTi33yFQq6vcg/Y8talpZ+MgdSlYM0FkLrZdMTYYTNFiuBQuuvkA+av+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.93.tgz", + "integrity": "sha512-OYFMMI2yV+aNe3wMgYhODxHdqUB/jrK0SEMHHS44GZpk8MuBXEF+Mcz4qjkY5Q1EH7KVQqXb/gVWwdgTHpjM2A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.93.tgz", + "integrity": "sha512-BT4dT78odKnJMNiq5HdjBsv29CiIdcCcImAPxeFqAeFw1LL6gh9nzI8E96oWc+0lVT5lfhoesCk4Qm7J6bty8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.93.tgz", + "integrity": "sha512-yH5fWEl1bktouC0mhh0Chuxp7HEO4uCtS/ly1Vmf18gs6wZ8DOOkgAEVv2dNKIryy+Na++ljx4Ym7C8tSJTrLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.93.tgz", + "integrity": "sha512-OFUdx64qvrGJhXKEyxosHxgoUVgba2ztYh7BnMiU5hP8lbI8G13W40J0SN3CmFQwPP30+3oEbW7LWzhKEaYjlg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.93.tgz", + "integrity": "sha512-4B8lSRwEq1XYm6xhxHhvHmKAS7pUp1Q7E33NQ2TlmFhfKvCOh86qvThcjAOo57x8DRwmpvEVrqvpXtYagMN6Ig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.93.tgz", + "integrity": "sha512-BHShlxtkven8ZjjvZ5QR6sC5fZCJ9bMujEkiha6W4cBUTY7ce7qGFyHmQd+iPC85d9kD/0cCiX/Xez8u0BhO7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.93.tgz", + "integrity": "sha512-nEwNWnz4JzYAK6asVvb92yeylfxMYih7eMQOnT7ZVlZN5ba9WF29xJ6kcQKs9HRH6MvWhz9+wRgv3FcjlU6HYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core/node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.93.tgz", + "integrity": "sha512-jibQ0zUr4kwJaQVwgmH+svS04bYTPnPw/ZkNInzxS+wFAtzINBYcU8s2PMWbDb2NGYiRSEeoSGyAvS9H+24JFA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.1.tgz", + "integrity": "sha512-xVRaR4u9hcYjFvcSg71Lz5Bo4//CyjAAfMxa7UsaDSYxAshflUkVJWiyVWrfxC59z2kP1IzI4/1BEpnhI9o3Mw==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/dompurify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.3.tgz", + "integrity": "sha512-odiGr/9/qMqjcBOe5UhcNLOFHSYmKFOyr+bJ/Xu3Qp4k1pNPAlNLUVNNLcLfjQI7+W7ObX58EdD3H+3p3voOvA==", + "dependencies": { + "@types/trusted-types": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/hasher": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/hasher/-/hasher-0.0.33.tgz", + "integrity": "sha512-G9uTuvEWoSlXFTDcw8/BE+DH3BGabFmLQeeBM11sZxdmkG47GkAVU9y6lzpszj56Ni9flHzuJ4DbiNFRLhxQMg==", + "dev": true, + "dependencies": { + "@types/signals": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.22.tgz", + "integrity": "sha512-ISQFeUK5GwRftLK4PVvKTWEVCxZ2BpaqBz0TWkIq5w4vGojxZP9+XkqgcPjxoqmPeew+HLyWthCBvK7GdF5NYA==", + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "node_modules/@types/mousetrap": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.12.tgz", + "integrity": "sha512-tzXGzMbvXt815z0Z7FE45wmRVRitMTaPgfVcdGhOS6LtEOWBZBokFJxEdatVA8cj+cQxvdFLmlMC4c12TNqv9A==" + }, + "node_modules/@types/nanoid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/nanoid/-/nanoid-3.0.0.tgz", + "integrity": "sha512-UXitWSmXCwhDmAKe7D3hNQtQaHeHt5L8LO1CB8GF8jlYVzOv5cBWDNqiJ+oPEWrWei3i3dkZtHY/bUtd0R/uOQ==", + "dev": true, + "dependencies": { + "nanoid": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.1.tgz", + "integrity": "sha512-NXKvBVUzIbs6ylBwmOwHFkZS2EXCcjnqr8ZCRNaXBkHAf+3mn/rPcJxwrzuc6movh8fxQAsUUfYklJ/EG+hZqQ==", + "dev": true, + "peer": true + }, "node_modules/@types/owasp-password-strength-test": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@types/owasp-password-strength-test/-/owasp-password-strength-test-1.3.0.tgz", @@ -952,15 +1277,6 @@ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ==", "dev": true }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/semver": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", @@ -991,12 +1307,6 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.0.tgz", "integrity": "sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg==" }, - "node_modules/@types/validator": { - "version": "13.11.3", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.3.tgz", - "integrity": "sha512-jxjhh33aTYDHnrV1vZ3AvWQHfrGx2f5UxKjaP13l5q04fG+/hCKKm0MfodIoCqxevhbcfBb6ZjynyHuQ/jueGQ==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", @@ -1283,6 +1593,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.5", "@webassemblyjs/helper-wasm-bytecode": "1.11.5" @@ -1292,25 +1603,29 @@ "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.5", "@webassemblyjs/helper-api-error": "1.11.5", @@ -1321,13 +1636,15 @@ "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-buffer": "1.11.5", @@ -1340,6 +1657,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", "dev": true, + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -1349,6 +1667,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", "dev": true, + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -1357,13 +1676,15 @@ "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-buffer": "1.11.5", @@ -1380,6 +1701,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-wasm-bytecode": "1.11.5", @@ -1393,6 +1715,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-buffer": "1.11.5", @@ -1405,6 +1728,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-api-error": "1.11.5", @@ -1419,66 +1743,25 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.5", "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "peer": 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 + "dev": true, + "peer": true }, "node_modules/abab": { "version": "2.0.6", @@ -1503,6 +1786,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "peer": true, "peerDependencies": { "acorn": "^8" } @@ -1532,50 +1816,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "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/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/ansi-regex": { "version": "5.0.1", @@ -1598,25 +1844,24 @@ "node": ">=4" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "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" - } - ] + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/argparse": { "version": "2.0.1", @@ -1688,107 +1933,31 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "node_modules/bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", - "dev": true, - "dependencies": { - "execa": "^0.7.0", - "executable": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-version": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", - "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "find-versions": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bin-version-check": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz", - "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==", - "dev": true, - "dependencies": { - "bin-version": "^6.0.0", - "semver": "^7.3.5", - "semver-truncate": "^2.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bin-version/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/bin-version/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/bin-version/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "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/bin-version/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { "node": ">=8" } @@ -1863,52 +2032,59 @@ "npm": ">= 6.14.8" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, - "engines": { - "node": ">=10.6.0" - } + "peer": true }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "node_modules/bundle-require": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz", + "integrity": "sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==", "dev": true, "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "load-tsconfig": "^0.2.3" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.17" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind": { @@ -1937,9 +2113,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001550", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001550.tgz", - "integrity": "sha512-p82WjBYIypO0ukTsd/FG3Xxs+4tFeaY9pfT4amQL8KWtYH7H9nYwReGAbMTJ0hsmRO8IfDtsS6p3ZWj8+1c2RQ==", + "version": "1.0.30001549", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", + "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", "dev": true, "funding": [ { @@ -1982,48 +2158,137 @@ "node": ">=4" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "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/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "peer": true, "engines": { "node": ">=6.0" } }, - "node_modules/circular-dependency-plugin": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", - "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/cliui/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": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/cliui/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/cliui/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/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/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/cliui/node_modules/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": { - "mimic-response": "^1.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/color-convert": { @@ -2048,16 +2313,17 @@ "dev": true }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -2065,136 +2331,128 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "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/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "node_modules/concurrently": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", + "integrity": "sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==", "dev": true, "dependencies": { - "is-what": "^3.14.1" + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^14.13.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "node_modules/concurrently/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": { - "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" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 14.15.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/concurrently/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": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">=8" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "node_modules/concurrently/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": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/concurrently/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/copy-webpack-plugin/node_modules/schema-utils": { + "node_modules/concurrently/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "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/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "is-what": "^3.14.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mesqueeb" } }, "node_modules/cosmiconfig": { @@ -2428,41 +2686,36 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "dev": true }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } + "node_modules/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, "dependencies": { - "mimic-response": "^3.1.0" + "@babel/runtime": "^7.21.0" }, "engines": { - "node": ">=10" + "node": ">=0.11" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optional": true, + "dependencies": { + "ms": "^2.1.1" } }, "node_modules/deep-is": { @@ -2471,15 +2724,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -2496,6 +2740,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2587,9 +2840,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.557", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.557.tgz", - "integrity": "sha512-6x0zsxyMXpnMJnHrondrD3SuAeKcwij9S+83j2qHAQPXbGTDDfgImzzwgGlzrIcXbHQ42tkG4qA6U860cImNhw==", + "version": "1.4.554", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", + "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2598,20 +2851,12 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, + "peer": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -2642,18 +2887,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -2676,16 +2909,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/error-logger-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/error-logger-webpack-plugin/-/error-logger-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-77h8dMaOuwd/KHUaHbdr7ywnfuGJ4UtOkOZUojqa/ZMshqF3dzMtoiH3ZuNhFovS2t1xqYClsXTsK0t13tYSEQ==", - "dev": true, - "engines": { - "node": ">= 14.15.0", - "npm": ">= 6.14.8" - } - }, "node_modules/es-abstract": { "version": "1.21.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", @@ -2737,7 +2960,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/es-set-tostringtag": { "version": "2.0.1", @@ -2770,6 +2994,59 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.4.tgz", + "integrity": "sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==", + "dev": true, + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.4", + "@esbuild/android-arm64": "0.19.4", + "@esbuild/android-x64": "0.19.4", + "@esbuild/darwin-arm64": "0.19.4", + "@esbuild/darwin-x64": "0.19.4", + "@esbuild/freebsd-arm64": "0.19.4", + "@esbuild/freebsd-x64": "0.19.4", + "@esbuild/linux-arm": "0.19.4", + "@esbuild/linux-arm64": "0.19.4", + "@esbuild/linux-ia32": "0.19.4", + "@esbuild/linux-loong64": "0.19.4", + "@esbuild/linux-mips64el": "0.19.4", + "@esbuild/linux-ppc64": "0.19.4", + "@esbuild/linux-riscv64": "0.19.4", + "@esbuild/linux-s390x": "0.19.4", + "@esbuild/linux-x64": "0.19.4", + "@esbuild/netbsd-x64": "0.19.4", + "@esbuild/openbsd-x64": "0.19.4", + "@esbuild/sunos-x64": "0.19.4", + "@esbuild/win32-arm64": "0.19.4", + "@esbuild/win32-ia32": "0.19.4", + "@esbuild/win32-x64": "0.19.4" + } + }, + "node_modules/esbuild-plugin-external-global": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esbuild-plugin-external-global/-/esbuild-plugin-external-global-1.0.1.tgz", + "integrity": "sha512-NDzYHRoShpvLqNcrgV8ZQh61sMIFAry5KLTQV83BPG5iTXCCu7h72SCfJ97bW0GqtuqDD/1aqLbKinI/rNgUsg==", + "dev": true + }, + "node_modules/esbuild-plugin-globals": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-globals/-/esbuild-plugin-globals-0.2.0.tgz", + "integrity": "sha512-y+6utQVWrETQWs0J8EGLV5gEOP59mmjX+fKWoQHn4TYwFMaj0FxQYflc566tHuokBCzl+uNW2iIlM1o1jfNy6w==", + "dev": true, + "engines": { + "node": ">=7" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2847,6 +3124,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -3095,150 +3373,28 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "peer": true, "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/execa/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/execa/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/executable/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "dependencies": { - "mime-db": "^1.28.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, + "peer": true, "engines": { - "node": ">=4" + "node": ">=0.8.x" } }, "node_modules/fast-deep-equal": { @@ -3248,9 +3404,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3287,12 +3443,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "node_modules/fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", @@ -3314,52 +3464,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-type": { - "version": "17.1.6", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz", - "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==", - "dev": true, - "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0-alpha.9", - "token-types": "^5.0.0-alpha.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/filename-reserved-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/filenamify": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", - "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", - "dev": true, - "dependencies": { - "filename-reserved-regex": "^3.0.0", - "strip-outer": "^2.0.0", - "trim-repeated": "^2.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3372,34 +3476,6 @@ "node": ">=8" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "dev": true, - "dependencies": { - "semver-regex": "^4.0.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fine-uploader": { "version": "5.16.2", "resolved": "https://registry.npmjs.org/fine-uploader/-/fine-uploader-5.16.2.tgz", @@ -3474,12 +3550,40 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "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", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3513,6 +3617,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", @@ -3527,13 +3640,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { @@ -3553,20 +3669,22 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3588,7 +3706,32 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "peer": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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/globals": { "version": "13.21.0", @@ -3652,31 +3795,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -3784,25 +3902,6 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "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/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3891,22 +3990,6 @@ "node": ">=6" } }, - "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -3919,7 +4002,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { "once": "^1.3.0", @@ -3978,6 +4061,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -4099,27 +4194,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -4148,15 +4222,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -4230,15 +4295,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jackspeak": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.5.tgz", @@ -4262,6 +4318,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -4276,6 +4333,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -4285,6 +4343,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4304,6 +4363,15 @@ "jiti": "bin/jiti.js" } }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", @@ -4318,6 +4386,16 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.2.tgz", "integrity": "sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q==", + "optional": true, + "peer": true, + "dependencies": { + "jquery": ">=1.8.0 <4.0.0" + } + }, + "node_modules/jquery-ui-dist": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/jquery-ui-dist/-/jquery-ui-dist-1.13.2.tgz", + "integrity": "sha512-oVDRd1NLtTbBwpRKAYdIRgpWVDzeBhfy7Gu0RmY6JEaZtmBq6kDn1pm5SgDiAotrnDS+RoTRXO6xvcNTxA9tOA==", "dependencies": { "jquery": ">=1.8.0 <4.0.0" } @@ -4340,12 +4418,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -4370,22 +4442,16 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, "node_modules/less": { @@ -4455,12 +4521,6 @@ "semver": "bin/semver" } }, - "node_modules/less/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4526,26 +4586,30 @@ "node": ">=4" } }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true, + "peer": true, "engines": { "node": ">=6.11.5" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -4559,21 +4623,18 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4586,6 +4647,30 @@ "node": ">=10" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "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.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/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -4647,6 +4732,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true, + "peer": true, "engines": { "node": ">= 0.6" } @@ -4656,6 +4742,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, + "peer": true, "dependencies": { "mime-db": "1.47.0" }, @@ -4672,87 +4759,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "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/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "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/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4786,6 +4792,17 @@ "dev": true, "optional": true }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.2.tgz", @@ -4831,7 +4848,8 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/nice-try": { "version": "1.0.5", @@ -4884,18 +4902,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -4988,27 +4994,6 @@ "which": "bin/which" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -5021,6 +5006,15 @@ "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", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -5098,41 +5092,11 @@ "node": ">= 0.8.0" } }, - "node_modules/os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "dependencies": { - "arch": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/owasp-password-strength-test": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/owasp-password-strength-test/-/owasp-password-strength-test-1.3.0.tgz", "integrity": "sha1-T2KeQpA+j20nmyMNZXq2HljkSxI=" }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -5148,39 +5112,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5241,7 +5172,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5296,19 +5227,6 @@ "node": ">=8" } }, - "node_modules/peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -5345,16 +5263,13 @@ "node": ">=6" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 6" } }, "node_modules/postcss": { @@ -5413,6 +5328,78 @@ "postcss": "^8.2.2" } }, + "node_modules/postcss-cli": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz", + "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==", + "dev": true, + "dependencies": { + "chokidar": "^3.3.0", + "dependency-graph": "^0.11.0", + "fs-extra": "^11.0.0", + "get-stdin": "^9.0.0", + "globby": "^13.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^4.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-cli/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "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/postcss-cli/node_modules/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss-cli/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/postcss-colormin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", @@ -5495,6 +5482,35 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, "node_modules/postcss-loader": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", @@ -5872,6 +5888,26 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-reporter": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz", + "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.12", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", @@ -5925,10 +5961,52 @@ "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/postcss-value-parser": { @@ -5963,6 +6041,15 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -5970,22 +6057,6 @@ "dev": true, "optional": true }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -6024,1057 +6095,1481 @@ } ] }, - "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==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "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/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.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": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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" + } + ], + "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==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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, + "peer": true + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "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": { - "safe-buffer": "^5.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, + "peer": true, "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" + "randombytes": "^2.1.0" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "pify": "^3.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg/node_modules/pify": { + "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/signals": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signals/-/signals-1.0.0.tgz", + "integrity": "sha1-ZfDBWZNSs1Ny7KrlolDmEHN27Wk=" + }, + "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/slickgrid": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/slickgrid/-/slickgrid-4.0.1.tgz", + "integrity": "sha512-5eB8S7QnqUM+h2aVzVgeZ1HtlqNXV82M9WYrd5/sFgYErD50PMZ2gpzXhloemqg8z2eaDysvgzGREoLLp180Lg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, + "sortablejs": "^1.15.0" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", + "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6.3.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/sortablejs": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", + "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">= 14.15.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "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, - "engines": { - "node": ">=8" + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "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": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "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": { - "lowercase-keys": "^2.0.0" + "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/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/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/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/string-width/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": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "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" - } - ], "dependencies": { - "queue-microtask": "^1.2.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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 - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "dev": true - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=8" } }, - "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==", + "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": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "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": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/semver-truncate": { + "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz", - "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/semver-truncate/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": ">=6" } }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "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, - "dependencies": { - "randombytes": "^2.1.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/stylehacks": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", + "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", "dev": true, "dependencies": { - "kind-of": "^6.0.2" + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" }, "engines": { "node": ">=8" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/signals": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/signals/-/signals-1.0.0.tgz", - "integrity": "sha1-ZfDBWZNSs1Ny7KrlolDmEHN27Wk=" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "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/slickgrid": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/slickgrid/-/slickgrid-4.0.1.tgz", - "integrity": "sha512-5eB8S7QnqUM+h2aVzVgeZ1HtlqNXV82M9WYrd5/sFgYErD50PMZ2gpzXhloemqg8z2eaDysvgzGREoLLp180Lg==", - "dependencies": { - "sortablejs": "^1.15.0" + "node_modules/supports-color/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/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "engines": { - "node": ">= 6.3.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "node_modules/svgo": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", "dev": true, "dependencies": { - "is-plain-obj": "^1.0.0" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" }, "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "dependencies": { - "sort-keys": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/sortablejs": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", - "integrity": "sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w==" + "node_modules/swc-loader": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz", + "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==", + "dev": true, + "peerDependencies": { + "@swc/core": "^1.2.147", + "webpack": ">=2" + } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/terser": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/source-map-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", - "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dev": true, + "peer": true, "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" + "@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": ">= 14.15.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.72.1" + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "any-promise": "^1.0.0" } }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, - "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==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "punycode": "^2.1.0" } }, - "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==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" + "node": ">=16.13.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "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==", + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tsup": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-7.2.0.tgz", + "integrity": "sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "bundle-require": "^4.0.0", + "cac": "^6.7.12", + "chokidar": "^3.5.1", + "debug": "^4.3.1", + "esbuild": "^0.18.2", + "execa": "^5.0.0", + "globby": "^11.0.3", + "joycon": "^3.0.1", + "postcss-load-config": "^4.0.1", + "resolve-from": "^5.0.0", + "rollup": "^3.2.5", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.20.3", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" }, "engines": { - "node": ">=8" + "node": ">=16.14" + }, + "peerDependencies": { + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width/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==", + "node_modules/tsup/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/string-width/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" - }, + "node_modules/tsup/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", - "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "node_modules/tsup/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "node_modules/tsup/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "node_modules/tsup/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/tsup/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "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==", + "node_modules/tsup/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "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==", + "node_modules/tsup/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "node_modules/tsup/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/tsup/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "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==", + "node_modules/tsup/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/strip-outer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", - "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", + "node_modules/tsup/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "node_modules/tsup/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">=12" } }, - "node_modules/stylehacks": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", - "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", + "node_modules/tsup/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=12" } }, - "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==", + "node_modules/tsup/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/supports-color/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==", + "node_modules/tsup/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/tsup/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.2.1", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, + "node_modules/tsup/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "node": ">=12" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/tsup/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/swc-loader": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz", - "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==", + "node_modules/tsup/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], "dev": true, - "peerDependencies": { - "@swc/core": "^1.2.147", - "webpack": ">=2" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "node_modules/tsup/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/terser": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", - "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", + "node_modules/tsup/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "node_modules/tsup/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "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" + "ms": "2.1.2" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "node": ">=6.0" }, "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { + "supports-color": { "optional": true } } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/tsup/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, - "dependencies": { - "is-number": "^7.0.0" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/tsup/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": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" + "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": ">=14.16" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/trim-repeated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", - "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": ">=12" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/tsup/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": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "node_modules/tsup/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=8" }, - "peerDependencies": { - "typescript": ">=4.2.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-loader": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.0.tgz", - "integrity": "sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } + "node_modules/tsup/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "node_modules/ts-loader/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==", + "node_modules/tsup/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/tsup/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/ts-loader/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==", + "node_modules/tsup/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "whatwg-url": "^7.0.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/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/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, "engines": { "node": ">= 8" } @@ -7145,6 +7640,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -7213,6 +7717,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -7221,11 +7726,18 @@ "node": ">=10.13.0" } }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "node_modules/webpack": { "version": "5.89.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", @@ -7244,127 +7756,51 @@ "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.2.0", - "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-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, "bin": { - "webpack-cli": "bin/cli.js" + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=14.15.0" + "node": ">=10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, - "peerDependencies": { - "webpack": "5.x.x" - }, "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { + "webpack-cli": { "optional": true } } }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", - "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", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "peer": true, "engines": { "node": ">=10.13.0" } }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7416,12 +7852,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -7555,12 +7985,95 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "node_modules/xxh3-ts": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/xxh3-ts/-/xxh3-ts-1.0.6.tgz", + "integrity": "sha512-mFdXT/i6svQNNmwICmszSfKgnYBGBIaCKzPxYHfpM6e1hxYX2gfGPrI9mKRzSnFpi6ieBIK88TGlaudcPYZW5g==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3" + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "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", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/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/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -7607,18 +8120,122 @@ "js-tokens": "^4.0.0" } }, + "@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@cjs-exporter/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@cjs-exporter/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-rxSVbUhNmIYTZKzrtb6cJIUfFk0PDxzeR4+dzi8edKYmmbqRBO/k7N+tW///QmtY6OznemXiLMSZ20E6DHegxQ==", + "dev": true, + "requires": { + "globby": "13.1.3" + }, + "dependencies": { + "globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, "@csstools/normalize.css": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", "dev": true }, - "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "@enonic-types/core": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/core/-/core-7.13.3.tgz", + "integrity": "sha512-wi4mNgs+6Pyhs/Zik0NVmPecNjlSR3JvgzHeglGReDVhiEzwQkMvFKx83rO/0HR5+WBX8b4YVlms8i5020E1HQ==", "dev": true }, + "@enonic-types/global": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/global/-/global-7.13.3.tgz", + "integrity": "sha512-V2etTglryEW+6i/WP8b64f6ZospVRme5Ku+1IW+biRsXpZqHbS3VGj0BlEeAnaGmBNS1WRVqHN0cGXGH29VRvw==", + "dev": true + }, + "@enonic-types/lib-admin": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-admin/-/lib-admin-7.13.3.tgz", + "integrity": "sha512-UA62DOCN5x7Jj4F8MxDpa6l+7GfkZI0O59xvoT5BfJF8JGoKWbhaUadRZsMJiaDhKkQUMjcPLF4bD3FZVGkuPA==", + "dev": true + }, + "@enonic-types/lib-auth": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-auth/-/lib-auth-7.13.3.tgz", + "integrity": "sha512-HEme70wCpzqpfWGi2DSMffq2KDKI+u8QJLAeu1k+g49RFWwYcdtC0AXdvu0GN4dzIW/2ITs72JFLW/fAMXM+tw==", + "dev": true, + "requires": { + "@enonic-types/core": "7.13.3" + } + }, + "@enonic-types/lib-i18n": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-i18n/-/lib-i18n-7.13.3.tgz", + "integrity": "sha512-7/eHD0PWuacER+/XbJM2WbL010NbH6gEJLxsg8LKmOXg1Dz+T6KQlSTVK+nyG2SoGt+8kJjFZVNXLirQezbaPg==", + "dev": true + }, + "@enonic-types/lib-io": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-io/-/lib-io-7.13.3.tgz", + "integrity": "sha512-JjFwV1RH44QrSOMPsouTfEbh3eecpd+mWhE6FNj+gdwNV8JkKLqGZuXEYrgB+SLC/aN+Qt7rIa7fog/tTwP8VQ==", + "dev": true, + "requires": { + "@enonic-types/core": "7.13.3" + } + }, + "@enonic-types/lib-node": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-node/-/lib-node-7.13.3.tgz", + "integrity": "sha512-uyT5S2bbHrWPYOejVyOSaCDyc9QVW/4sG1A9jXVj57KEN5ZvokkRUPz2RSXHQLgg7wCT+Vl8aqDWUPeyUzpw1g==", + "dev": true, + "requires": { + "@enonic-types/core": "7.13.3" + } + }, + "@enonic-types/lib-portal": { + "version": "7.13.3", + "resolved": "https://registry.npmjs.org/@enonic-types/lib-portal/-/lib-portal-7.13.3.tgz", + "integrity": "sha512-Bhy8po+HA6HQsI709Qcxg0i1B7p46IJMO3WZB4YdVDeO6dC56yV1cnsFcuV9PSPSPO51ZOZ7O3zc5SuJ7B5w/g==", + "dev": true, + "requires": { + "@enonic-types/core": "7.13.3" + } + }, + "@enonic/esbuild-plugin-copy-with-hash": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@enonic/esbuild-plugin-copy-with-hash/-/esbuild-plugin-copy-with-hash-0.0.1.tgz", + "integrity": "sha512-HUEF1znqgEJyjd9TUsIZeIo9VL59xgaIpwoHeICAtWLmcUIQ2OBjPw8udBepM/mrI2jf0tVDT47IB+85bqjVvw==", + "dev": true, + "requires": { + "@cjs-exporter/globby": "^13.1.3", + "colorette": "^2.0.20", + "xxh3-ts": "^1.0.6" + } + }, "@enonic/eslint-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@enonic/eslint-config/-/eslint-config-1.2.0.tgz", @@ -7626,90 +8243,212 @@ "dev": true, "requires": {} }, + "@enonic/legacy-slickgrid": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@enonic/legacy-slickgrid/-/legacy-slickgrid-0.0.1.tgz", + "integrity": "sha512-9HVwJg+ZQ0+KA0e3yF2p9n8q+FqZUJg/zuG9n5mO/bhsniNjTwfZzH43bALN67VHz2zcyIOYZfxZZcHjr4j4Pw==", + "requires": {} + }, "@enonic/lib-admin-ui": { - "version": "file:.xp/dev/lib-admin-ui", + "version": "4.8.0", "requires": { - "@enonic/eslint-config": "^1.2.0", - "@swc/cli": "^0.1.62", - "@swc/core": "1.3.93", "@types/dompurify": "^3.0.3", - "@types/jquery": "^3.5.22", - "@types/jqueryui": "^1.12.18", "@types/mousetrap": "^1.6.12", - "@types/q": "^1.5.6", - "@types/semver": "^7.5.3", "@types/slickgrid": "^2.1.36", - "@types/validator": "^13.11.3", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", - "autoprefixer": "^10.4.16", - "browserslist": "^4.22.1", - "browserslist-config-enonic": "^1.0.8", - "circular-dependency-plugin": "^5.2.2", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "cssnano": "^6.0.1", "dompurify": "^3.0.6", - "enonic-admin-artifacts": "^1.8.5", - "error-logger-webpack-plugin": "^1.1.1", - "eslint": "^8.51.0", "fine-uploader": "^5.16.2", - "glob": "^10.3.10", - "jquery": "^3.7.1", "jquery-simulate": "^1.0.2", - "jquery-ui": "^1.13.2", - "less": "^4.2.0", - "less-loader": "^11.1.3", - "mini-css-extract-plugin": "^2.7.6", "mousetrap": "^1.6.5", - "npm-run-all": "^4.1.5", - "postcss-loader": "^7.3.3", - "postcss-normalize": "^10.0.1", - "postcss-sort-media-queries": "^5.2.0", "q": "^1.5.1", "slickgrid": "^4.0.1", - "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.9", - "ts-loader": "^9.5.0", - "typescript": "^5.2.2", - "validator": "^13.11.0", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "validator": "^13.11.0" + } + }, + "@enonic/tsup-plugin-manifest": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@enonic/tsup-plugin-manifest/-/tsup-plugin-manifest-0.0.1.tgz", + "integrity": "sha512-AL3X7xm6S8iE6bDbFP4Fnb9pOUembe/YpiAVw5/Dfj494ckiT42eeRb3HEFEFyiWrRjqP5weGb18t+sqL+GZfw==", + "dev": true, + "requires": { + "colorette": "^2.0.20" } }, + "@esbuild/android-arm": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.4.tgz", + "integrity": "sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/android-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz", + "integrity": "sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/android-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.4.tgz", + "integrity": "sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz", + "integrity": "sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz", + "integrity": "sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz", + "integrity": "sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz", + "integrity": "sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-arm": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz", + "integrity": "sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz", + "integrity": "sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz", + "integrity": "sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz", + "integrity": "sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz", + "integrity": "sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz", + "integrity": "sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz", + "integrity": "sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz", + "integrity": "sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/linux-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz", + "integrity": "sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz", + "integrity": "sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz", + "integrity": "sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz", + "integrity": "sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz", + "integrity": "sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz", + "integrity": "sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==", + "dev": true, + "optional": true, + "peer": true + }, + "@esbuild/win32-x64": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz", + "integrity": "sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==", + "dev": true, + "optional": true, + "peer": true + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -7864,6 +8603,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dev": true, + "peer": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -7885,22 +8625,6 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, - "@mole-inc/bin-wrapper": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz", - "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==", - "dev": true, - "requires": { - "bin-check": "^4.1.0", - "bin-version-check": "^5.0.0", - "content-disposition": "^0.5.4", - "ext-name": "^5.0.0", - "file-type": "^17.1.6", - "filenamify": "^5.0.2", - "got": "^11.8.5", - "os-filter-obj": "^2.0.0" - } - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -7934,40 +8658,6 @@ "dev": true, "optional": true }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true - }, - "@swc/cli": { - "version": "0.1.62", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz", - "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==", - "dev": true, - "requires": { - "@mole-inc/bin-wrapper": "^8.0.1", - "commander": "^7.1.0", - "fast-glob": "^3.2.5", - "semver": "^7.3.8", - "slash": "3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, "@swc/core": { "version": "1.3.93", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.93.tgz", @@ -8072,39 +8762,12 @@ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", "dev": true }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true - }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true }, - "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, "@types/dompurify": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.3.tgz", @@ -8118,6 +8781,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, + "peer": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -8128,6 +8792,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, + "peer": true, "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -8137,7 +8802,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "dev": true, + "peer": true }, "@types/hasher": { "version": "0.0.33", @@ -8148,44 +8814,20 @@ "@types/signals": "*" } }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, "@types/jquery": { - "version": "3.5.23", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.23.tgz", - "integrity": "sha512-LwtD05mlY8iPF/1aB8dOZaYhRDothbHA7csnAxhyqMnQxj90Fo3J4nPhmHiA0OMTwHhjwZdE1Lpd6UK+b+C6Bw==", + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.22.tgz", + "integrity": "sha512-ISQFeUK5GwRftLK4PVvKTWEVCxZ2BpaqBz0TWkIq5w4vGojxZP9+XkqgcPjxoqmPeew+HLyWthCBvK7GdF5NYA==", "requires": { "@types/sizzle": "*" } }, - "@types/jqueryui": { - "version": "1.12.18", - "resolved": "https://registry.npmjs.org/@types/jqueryui/-/jqueryui-1.12.18.tgz", - "integrity": "sha512-crlmH8kFzIiU+4aBFgvYUjykSaOTP5RDw7NqkFkcSNWFAF/SMPrr7sY1uNXDEhite/2pEwUoZlufQoy87A22LA==", - "dev": true, - "requires": { - "@types/jquery": "*" - } - }, "@types/json-schema": { "version": "7.0.12", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/mousetrap": { "version": "1.6.12", "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.12.tgz", @@ -8204,7 +8846,8 @@ "version": "17.0.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.1.tgz", "integrity": "sha512-NXKvBVUzIbs6ylBwmOwHFkZS2EXCcjnqr8ZCRNaXBkHAf+3mn/rPcJxwrzuc6movh8fxQAsUUfYklJ/EG+hZqQ==", - "dev": true + "dev": true, + "peer": true }, "@types/owasp-password-strength-test": { "version": "1.3.0", @@ -8218,15 +8861,6 @@ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ==", "dev": true }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/semver": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", @@ -8257,12 +8891,6 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.0.tgz", "integrity": "sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg==" }, - "@types/validator": { - "version": "13.11.3", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.3.tgz", - "integrity": "sha512-jxjhh33aTYDHnrV1vZ3AvWQHfrGx2f5UxKjaP13l5q04fG+/hCKKm0MfodIoCqxevhbcfBb6ZjynyHuQ/jueGQ==", - "dev": true - }, "@typescript-eslint/eslint-plugin": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", @@ -8436,6 +9064,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.5", "@webassemblyjs/helper-wasm-bytecode": "1.11.5" @@ -8445,25 +9074,29 @@ "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-api-error": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-buffer": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.5", "@webassemblyjs/helper-api-error": "1.11.5", @@ -8474,13 +9107,15 @@ "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-buffer": "1.11.5", @@ -8493,6 +9128,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", "dev": true, + "peer": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -8502,6 +9138,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", "dev": true, + "peer": true, "requires": { "@xtuc/long": "4.2.2" } @@ -8510,13 +9147,15 @@ "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", - "dev": true + "dev": true, + "peer": true }, "@webassemblyjs/wasm-edit": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-buffer": "1.11.5", @@ -8533,6 +9172,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-wasm-bytecode": "1.11.5", @@ -8546,6 +9186,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-buffer": "1.11.5", @@ -8558,6 +9199,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.5", "@webassemblyjs/helper-api-error": "1.11.5", @@ -8572,43 +9214,25 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", "dev": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.5", "@xtuc/long": "4.2.2" } }, - "@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "requires": {} - }, - "@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "requires": {} - }, "@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 + "dev": true, + "peer": true }, "@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 + "dev": true, + "peer": true }, "abab": { "version": "2.0.6", @@ -8627,6 +9251,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "peer": true, "requires": {} }, "acorn-jsx": { @@ -8648,40 +9273,12 @@ "uri-js": "^4.2.2" } }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "peer": true }, "ansi-regex": { "version": "5.0.1", @@ -8698,12 +9295,22 @@ "color-convert": "^1.9.0" } }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -8742,76 +9349,17 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "executable": "^4.1.0" - } - }, - "bin-version": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", - "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "find-versions": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "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" - } - }, - "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 - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - } - } + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, - "bin-version-check": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz", - "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==", - "dev": true, - "requires": { - "bin-version": "^6.0.0", - "semver": "^7.3.5", - "semver-truncate": "^2.0.0" - } + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "boolbase": { "version": "1.0.0", @@ -8856,44 +9404,38 @@ "integrity": "sha512-X5eXFvoGIeN4Q1So+mTxZCkLgf4UNa5fte+7OM9AGHSbRspKp8foFwuFkwyhXnitRSzDK0QM2qWu1Sirp2svrQ==", "dev": true }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true + "dev": true, + "peer": true }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "bundle-require": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz", + "integrity": "sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==", "dev": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } + "load-tsconfig": "^0.2.3" } }, + "cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -8917,9 +9459,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001550", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001550.tgz", - "integrity": "sha512-p82WjBYIypO0ukTsd/FG3Xxs+4tFeaY9pfT4amQL8KWtYH7H9nYwReGAbMTJ0hsmRO8IfDtsS6p3ZWj8+1c2RQ==", + "version": "1.0.30001549", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", + "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", "dev": true }, "chalk": { @@ -8939,43 +9481,110 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "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, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "circular-dependency-plugin": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", - "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -8998,16 +9607,17 @@ "dev": true }, "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "peer": true }, "concat-map": { "version": "0.0.1", @@ -9015,98 +9625,94 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "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, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "concurrently": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", + "integrity": "sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==", "dev": true, "requires": { - "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" + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" }, "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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, "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "color-convert": "^2.0.1" } }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "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, "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "color-name": "~1.1.4" } }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "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 }, - "schema-utils": { + "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "has-flag": "^4.0.0" } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true } } }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, "cosmiconfig": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", @@ -9269,6 +9875,21 @@ } } }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true + }, + "date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" + } + }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -9279,35 +9900,12 @@ "ms": "^2.1.1" } }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } - } - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -9318,6 +9916,12 @@ "object-keys": "^1.1.1" } }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -9385,9 +9989,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.557", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.557.tgz", - "integrity": "sha512-6x0zsxyMXpnMJnHrondrD3SuAeKcwij9S+83j2qHAQPXbGTDDfgImzzwgGlzrIcXbHQ42tkG4qA6U860cImNhw==", + "version": "1.4.554", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", + "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==", "dev": true }, "emoji-regex": { @@ -9396,20 +10000,12 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, + "peer": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -9427,12 +10023,6 @@ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", "dev": true }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -9452,12 +10042,6 @@ "is-arrayish": "^0.2.1" } }, - "error-logger-webpack-plugin": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/error-logger-webpack-plugin/-/error-logger-webpack-plugin-1.1.1.tgz", - "integrity": "sha512-77h8dMaOuwd/KHUaHbdr7ywnfuGJ4UtOkOZUojqa/ZMshqF3dzMtoiH3ZuNhFovS2t1xqYClsXTsK0t13tYSEQ==", - "dev": true - }, "es-abstract": { "version": "1.21.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", @@ -9503,7 +10087,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", - "dev": true + "dev": true, + "peer": true }, "es-set-tostringtag": { "version": "2.0.1", @@ -9527,6 +10112,49 @@ "is-symbol": "^1.0.2" } }, + "esbuild": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.4.tgz", + "integrity": "sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==", + "dev": true, + "peer": true, + "requires": { + "@esbuild/android-arm": "0.19.4", + "@esbuild/android-arm64": "0.19.4", + "@esbuild/android-x64": "0.19.4", + "@esbuild/darwin-arm64": "0.19.4", + "@esbuild/darwin-x64": "0.19.4", + "@esbuild/freebsd-arm64": "0.19.4", + "@esbuild/freebsd-x64": "0.19.4", + "@esbuild/linux-arm": "0.19.4", + "@esbuild/linux-arm64": "0.19.4", + "@esbuild/linux-ia32": "0.19.4", + "@esbuild/linux-loong64": "0.19.4", + "@esbuild/linux-mips64el": "0.19.4", + "@esbuild/linux-ppc64": "0.19.4", + "@esbuild/linux-riscv64": "0.19.4", + "@esbuild/linux-s390x": "0.19.4", + "@esbuild/linux-x64": "0.19.4", + "@esbuild/netbsd-x64": "0.19.4", + "@esbuild/openbsd-x64": "0.19.4", + "@esbuild/sunos-x64": "0.19.4", + "@esbuild/win32-arm64": "0.19.4", + "@esbuild/win32-ia32": "0.19.4", + "@esbuild/win32-x64": "0.19.4" + } + }, + "esbuild-plugin-external-global": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esbuild-plugin-external-global/-/esbuild-plugin-external-global-1.0.1.tgz", + "integrity": "sha512-NDzYHRoShpvLqNcrgV8ZQh61sMIFAry5KLTQV83BPG5iTXCCu7h72SCfJ97bW0GqtuqDD/1aqLbKinI/rNgUsg==", + "dev": true + }, + "esbuild-plugin-globals": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-globals/-/esbuild-plugin-globals-0.2.0.tgz", + "integrity": "sha512-y+6utQVWrETQWs0J8EGLV5gEOP59mmjX+fKWoQHn4TYwFMaj0FxQYflc566tHuokBCzl+uNW2iIlM1o1jfNy6w==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9696,6 +10324,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "peer": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -9710,169 +10339,67 @@ "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, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - } + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" } }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "esquery": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "requires": { - "pify": "^2.2.0" + "estraverse": "^5.1.0" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "mime-db": "^1.28.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } + "peer": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true }, "fast-deep-equal": { "version": "3.1.3", @@ -9881,9 +10408,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -9916,12 +10443,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", @@ -9940,34 +10461,6 @@ "flat-cache": "^3.0.4" } }, - "file-type": { - "version": "17.1.6", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz", - "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==", - "dev": true, - "requires": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0-alpha.9", - "token-types": "^5.0.0-alpha.2" - } - }, - "filename-reserved-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", - "dev": true - }, - "filenamify": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", - "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", - "dev": true, - "requires": { - "filename-reserved-regex": "^3.0.0", - "strip-outer": "^2.0.0", - "trim-repeated": "^2.0.0" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -9977,25 +10470,6 @@ "to-regex-range": "^5.0.1" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "dev": true, - "requires": { - "semver-regex": "^4.0.5" - } - }, "fine-uploader": { "version": "5.16.2", "resolved": "https://registry.npmjs.org/fine-uploader/-/fine-uploader-5.16.2.tgz", @@ -10050,12 +10524,30 @@ "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", "dev": true }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -10080,6 +10572,12 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "get-intrinsic": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", @@ -10091,10 +10589,10 @@ "has-symbols": "^1.0.3" } }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true }, "get-symbol-description": { @@ -10108,17 +10606,36 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "glob-parent": { @@ -10134,7 +10651,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "peer": true }, "globals": { "version": "13.21.0", @@ -10177,25 +10695,6 @@ "get-intrinsic": "^1.1.3" } }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -10273,22 +10772,6 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "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 - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -10340,16 +10823,6 @@ "resolve-from": "^4.0.0" } }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -10359,7 +10832,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -10409,6 +10882,15 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -10485,21 +10967,6 @@ "has-tostringtag": "^1.0.0" } }, - "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 - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -10519,12 +10986,6 @@ "call-bind": "^1.0.2" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -10577,12 +11038,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "jackspeak": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.5.tgz", @@ -10598,6 +11053,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -10608,13 +11064,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "peer": true }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -10627,6 +11085,12 @@ "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", "dev": true }, + "joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true + }, "jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", @@ -10641,6 +11105,16 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.2.tgz", "integrity": "sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q==", + "optional": true, + "peer": true, + "requires": { + "jquery": ">=1.8.0 <4.0.0" + } + }, + "jquery-ui-dist": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/jquery-ui-dist/-/jquery-ui-dist-1.13.2.tgz", + "integrity": "sha512-oVDRd1NLtTbBwpRKAYdIRgpWVDzeBhfy7Gu0RmY6JEaZtmBq6kDn1pm5SgDiAotrnDS+RoTRXO6xvcNTxA9tOA==", "requires": { "jquery": ">=1.8.0 <4.0.0" } @@ -10660,12 +11134,6 @@ "argparse": "^2.0.1" } }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -10690,21 +11158,16 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "json-buffer": "3.0.1" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, "less": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", @@ -10740,12 +11203,6 @@ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "optional": true - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true } } }, @@ -10808,20 +11265,24 @@ } } }, + "load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true + }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "requires": { - "p-locate": "^4.1.0" - } + "peer": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash.memoize": { "version": "4.1.2", @@ -10835,18 +11296,18 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -10856,6 +11317,23 @@ "yallist": "^4.0.0" } }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, "mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -10891,89 +11369,35 @@ } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "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, - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true, + "peer": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "peer": true, + "requires": { + "mime-db": "1.47.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -11001,6 +11425,17 @@ "dev": true, "optional": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanoid": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.2.tgz", @@ -11028,7 +11463,8 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "peer": true }, "nice-try": { "version": "1.0.5", @@ -11074,12 +11510,6 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, "npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -11148,23 +11578,6 @@ } } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - } - } - }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -11174,6 +11587,12 @@ "boolbase": "^1.0.0" } }, + "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 + }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -11230,32 +11649,11 @@ "type-check": "^0.4.0" } }, - "os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "requires": { - "arch": "^2.1.0" - } - }, "owasp-password-strength-test": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/owasp-password-strength-test/-/owasp-password-strength-test-1.3.0.tgz", "integrity": "sha1-T2KeQpA+j20nmyMNZXq2HljkSxI=" }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -11265,32 +11663,6 @@ "yocto-queue": "^0.1.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11335,7 +11707,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { @@ -11374,12 +11746,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -11404,14 +11770,11 @@ "dev": true, "optional": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true }, "postcss": { "version": "8.4.31", @@ -11447,6 +11810,55 @@ "postcss-value-parser": "^4.2.0" } }, + "postcss-cli": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz", + "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==", + "dev": true, + "requires": { + "chokidar": "^3.3.0", + "dependency-graph": "^0.11.0", + "fs-extra": "^11.0.0", + "get-stdin": "^9.0.0", + "globby": "^13.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^4.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "yargs": "^17.0.0" + }, + "dependencies": { + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "dependencies": { + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, + "slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true + } + } + }, "postcss-colormin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", @@ -11497,6 +11909,16 @@ "dev": true, "requires": {} }, + "postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + } + }, "postcss-loader": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", @@ -11726,6 +12148,16 @@ "postcss-value-parser": "^4.2.0" } }, + "postcss-reporter": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz", + "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + } + }, "postcss-selector-parser": { "version": "6.0.12", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", @@ -11764,6 +12196,35 @@ "postcss-selector-parser": "^6.0.5" } }, + "postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "requires": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "dependencies": { + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -11776,6 +12237,12 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -11783,22 +12250,6 @@ "dev": true, "optional": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -11816,21 +12267,33 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "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 - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "peer": true, "requires": { "safe-buffer": "^5.1.0" } }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -11859,25 +12322,20 @@ } } }, - "readable-stream": { + "readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "picomatch": "^2.2.1" } }, - "readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dev": true, - "requires": { - "readable-stream": "^3.6.0" - } + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "regexp.prototype.flags": { "version": "1.4.3", @@ -11890,10 +12348,10 @@ "functions-have-names": "^1.2.2" } }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "resolve": { @@ -11907,44 +12365,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11958,6 +12384,31 @@ "dev": true, "requires": { "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + } + } + }, + "rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" } }, "run-parallel": { @@ -11969,11 +12420,21 @@ "queue-microtask": "^1.2.2" } }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, "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 + "dev": true, + "peer": true }, "safe-regex-test": { "version": "1.0.0", @@ -12010,6 +12471,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -12025,47 +12487,16 @@ "lru-cache": "^6.0.0" } }, - "semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", - "dev": true - }, - "semver-truncate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz", - "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, "serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, + "peer": true, "requires": { "randombytes": "^2.1.0" } }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12082,9 +12513,9 @@ "dev": true }, "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, "side-channel": { @@ -12129,24 +12560,6 @@ "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", "dev": true }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", - "dev": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, "sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", @@ -12179,11 +12592,18 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "peer": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -12216,15 +12636,6 @@ "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -12329,12 +12740,6 @@ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true - }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -12347,22 +12752,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "strip-outer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", - "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", - "dev": true - }, - "strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", - "dev": true, - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" - } - }, "stylehacks": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", @@ -12373,6 +12762,43 @@ "postcss-selector-parser": "^6.0.4" } }, + "sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12429,13 +12855,15 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true + "dev": true, + "peer": true }, "terser": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", "dev": true, + "peer": true, "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -12448,6 +12876,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dev": true, + "peer": true, "requires": { "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", @@ -12462,6 +12891,30 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12471,32 +12924,20 @@ "is-number": "^7.0.0" } }, - "token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" + "punycode": "^2.1.0" } }, - "trim-repeated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", - "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", - "dev": true, - "requires": { - "escape-string-regexp": "^5.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - } - } + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true }, "ts-api-utils": { "version": "1.0.1", @@ -12505,58 +12946,291 @@ "dev": true, "requires": {} }, - "ts-loader": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.0.tgz", - "integrity": "sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==", + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "tsup": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-7.2.0.tgz", + "integrity": "sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==", "dev": true, "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "bundle-require": "^4.0.0", + "cac": "^6.7.12", + "chokidar": "^3.5.1", + "debug": "^4.3.1", + "esbuild": "^0.18.2", + "execa": "^5.0.0", + "globby": "^11.0.3", + "joycon": "^3.0.1", + "postcss-load-config": "^4.0.1", + "resolve-from": "^5.0.0", + "rollup": "^3.2.5", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.20.3", + "tree-kill": "^1.2.2" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "dev": true, + "optional": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "ms": "2.1.2" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, - "color-convert": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "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" + } + }, + "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 + }, + "is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "color-name": "~1.1.4" + "path-key": "^3.0.0" } }, - "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==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } } } }, @@ -12604,6 +13278,12 @@ "which-boxed-primitive": "^1.0.2" } }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -12649,16 +13329,24 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, + "peer": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "webpack": { "version": "5.89.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "dev": true, + "peer": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", @@ -12686,66 +13374,24 @@ "webpack-sources": "^3.2.3" } }, - "webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - }, - "interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true - }, - "rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "requires": { - "resolve": "^1.20.0" - } - } - } + "peer": true }, - "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -12782,12 +13428,6 @@ "is-typed-array": "^1.1.10" } }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -12882,12 +13522,82 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "xxh3-ts": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/xxh3-ts/-/xxh3-ts-1.0.6.tgz", + "integrity": "sha512-mFdXT/i6svQNNmwICmszSfKgnYBGBIaCKzPxYHfpM6e1hxYX2gfGPrI9mKRzSnFpi6ieBIK88TGlaudcPYZW5g==", + "dev": true, + "requires": { + "buffer": "^6.0.3" + } + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index fd23834e5..e47e3b1ef 100644 --- a/package.json +++ b/package.json @@ -8,22 +8,39 @@ "url": "https://github.com/enonic/app-users" }, "scripts": { - "build": "run-p build:js build:typecheck", - "build:js": "webpack --color --stats-error-details", - "build:typecheck": "tsc --pretty --skipLibCheck --noEmit", - "lint": "eslint **/*.ts --quiet --cache", - "fix": "eslint --fix **/*.ts --cache" + "build": "concurrently -c auto -g --timings npm:build:main:*", + "build:main:css": "postcss -o build/resources/main/assets/styles/main.css build/less/main.css", + "build:main:server": "tsup -d build/resources/main", + "build:main:static": "tsup -d build/resources/main/_static", + "build:tests": "tsup -d build/resources/test", + "check:types": "tsc --pretty --skipLibCheck --noEmit", + "clean": "del build", + "fix": "eslint --fix src/**/*.ts --cache", + "less": "lessc --source-map src/main/resources/assets/styles/main.less build/less/main.css", + "lint": "eslint src/**/*.ts --quiet --cache", + "prebuild:main:css": "npm run less" }, "dependencies": { + "@enonic/legacy-slickgrid": "^0.0.1", "@enonic/lib-admin-ui": "file:./.xp/dev/lib-admin-ui", "hasher": "^1.2.0", "jquery": "^3.7.1", + "jquery-ui-dist": "^1.13.2", "nanoid": "^5.0.2", "owasp-password-strength-test": "^1.3.0", "q": "^1.5.1" }, "devDependencies": { + "@enonic-types/global": "^7.13.2", + "@enonic-types/lib-admin": "^7.13.2", + "@enonic-types/lib-auth": "^7.13.2", + "@enonic-types/lib-i18n": "^7.13.2", + "@enonic-types/lib-io": "^7.13.2", + "@enonic-types/lib-node": "^7.13.2", + "@enonic-types/lib-portal": "^7.13.2", + "@enonic/esbuild-plugin-copy-with-hash": "^0.0.1", "@enonic/eslint-config": "^1.2.0", + "@enonic/tsup-plugin-manifest": "^0.0.1", "@swc/core": "^1.3.93", "@types/hasher": "^0.0.33", "@types/nanoid": "^3.0.0", @@ -31,20 +48,28 @@ "@types/q": "^1.5.6", "@typescript-eslint/eslint-plugin": "^6.7.5", "@typescript-eslint/parser": "^6.7.5", + "autoprefixer": "^10.4.15", "browserslist-config-enonic": "^1.0.7", - "circular-dependency-plugin": "^5.2.2", + "concurrently": "^8.2.1", + "css-loader": "^6.8.1", "cssnano": "^6.0.1", "enonic-admin-artifacts": "^1.8.5", + "esbuild-plugin-external-global": "^1.0.1", + "esbuild-plugin-globals": "^0.2.0", "eslint": "^8.51.0", - "mini-css-extract-plugin": "^2.7.6", + "glob": "^10.3.4", + "less": "^4.2.0", + "less-loader": "^11.1.3", "npm-run-all": "^4.1.5", + "postcss-cli": "^10.1.0", "postcss-loader": "^7.3.3", + "postcss-normalize": "^10.0.1", + "postcss-sort-media-queries": "^5.2.0", + "postcss-url": "^10.1.3", "source-map-loader": "^4.0.1", "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.9", - "typescript": "^5.2.2", - "webpack": "^5.89.0", - "webpack-cli": "^5.1.4" + "tsup": "^7.2.0", + "typescript": "^5.2.2" }, "browserslist": [ "extends browserslist-config-enonic" diff --git a/postcss.config.js b/postcss.config.js index e65215bba..dfcb9b995 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,12 +1,22 @@ +const path = require('path'); + const isProd = process.env.NODE_ENV === 'production'; const plugins = Object.assign( { 'postcss-normalize': {}, autoprefixer: {}, - 'postcss-sort-media-queries': {sort: 'desktop-first'} + 'postcss-sort-media-queries': {sort: 'desktop-first'}, + 'postcss-url': { + basePath: path.resolve('src/main/resources/assets/icons'), + assetsPath: '../icons/', + url: 'copy' + }, }, isProd ? {cssnano: {}} : {} ); -module.exports = {plugins}; +module.exports = { + map: !isProd, + plugins +}; diff --git a/src/main/resources/assets/js/app/Router.ts b/src/main/resources/_static/app/Router.ts similarity index 100% rename from src/main/resources/assets/js/app/Router.ts rename to src/main/resources/_static/app/Router.ts diff --git a/src/main/resources/assets/js/app/UserAppPanel.ts b/src/main/resources/_static/app/UserAppPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/UserAppPanel.ts rename to src/main/resources/_static/app/UserAppPanel.ts index d0c24e2e2..5e1daf724 100644 --- a/src/main/resources/assets/js/app/UserAppPanel.ts +++ b/src/main/resources/_static/app/UserAppPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {UserTreeGridItem, UserTreeGridItemBuilder, UserTreeGridItemType} from './browse/UserTreeGridItem'; import {UserItemWizardPanel} from './wizard/UserItemWizardPanel'; import {IdProviderWizardPanel} from './wizard/IdProviderWizardPanel'; diff --git a/src/main/resources/assets/js/app/access/IdProviderAccess.ts b/src/main/resources/_static/app/access/IdProviderAccess.ts similarity index 100% rename from src/main/resources/assets/js/app/access/IdProviderAccess.ts rename to src/main/resources/_static/app/access/IdProviderAccess.ts diff --git a/src/main/resources/assets/js/app/access/IdProviderAccessControlEntry.ts b/src/main/resources/_static/app/access/IdProviderAccessControlEntry.ts similarity index 100% rename from src/main/resources/assets/js/app/access/IdProviderAccessControlEntry.ts rename to src/main/resources/_static/app/access/IdProviderAccessControlEntry.ts diff --git a/src/main/resources/assets/js/app/access/IdProviderAccessControlEntryJson.ts b/src/main/resources/_static/app/access/IdProviderAccessControlEntryJson.ts similarity index 100% rename from src/main/resources/assets/js/app/access/IdProviderAccessControlEntryJson.ts rename to src/main/resources/_static/app/access/IdProviderAccessControlEntryJson.ts diff --git a/src/main/resources/assets/js/app/access/IdProviderAccessControlList.ts b/src/main/resources/_static/app/access/IdProviderAccessControlList.ts similarity index 100% rename from src/main/resources/assets/js/app/access/IdProviderAccessControlList.ts rename to src/main/resources/_static/app/access/IdProviderAccessControlList.ts diff --git a/src/main/resources/assets/js/app/browse/BaseUserEvent.ts b/src/main/resources/_static/app/browse/BaseUserEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/BaseUserEvent.ts rename to src/main/resources/_static/app/browse/BaseUserEvent.ts diff --git a/src/main/resources/assets/js/app/browse/EditPrincipalEvent.ts b/src/main/resources/_static/app/browse/EditPrincipalEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/EditPrincipalEvent.ts rename to src/main/resources/_static/app/browse/EditPrincipalEvent.ts diff --git a/src/main/resources/assets/js/app/browse/NewPrincipalEvent.ts b/src/main/resources/_static/app/browse/NewPrincipalEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/NewPrincipalEvent.ts rename to src/main/resources/_static/app/browse/NewPrincipalEvent.ts diff --git a/src/main/resources/assets/js/app/browse/PrincipalDuplicatedEvent.ts b/src/main/resources/_static/app/browse/PrincipalDuplicatedEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/PrincipalDuplicatedEvent.ts rename to src/main/resources/_static/app/browse/PrincipalDuplicatedEvent.ts diff --git a/src/main/resources/assets/js/app/browse/PrincipalSynchronizedEvent.ts b/src/main/resources/_static/app/browse/PrincipalSynchronizedEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/PrincipalSynchronizedEvent.ts rename to src/main/resources/_static/app/browse/PrincipalSynchronizedEvent.ts diff --git a/src/main/resources/assets/js/app/browse/ShowNewPrincipalDialogEvent.ts b/src/main/resources/_static/app/browse/ShowNewPrincipalDialogEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/ShowNewPrincipalDialogEvent.ts rename to src/main/resources/_static/app/browse/ShowNewPrincipalDialogEvent.ts diff --git a/src/main/resources/assets/js/app/browse/UpdatePrincipalEvent.ts b/src/main/resources/_static/app/browse/UpdatePrincipalEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UpdatePrincipalEvent.ts rename to src/main/resources/_static/app/browse/UpdatePrincipalEvent.ts diff --git a/src/main/resources/assets/js/app/browse/UserBrowseItemPanel.ts b/src/main/resources/_static/app/browse/UserBrowseItemPanel.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserBrowseItemPanel.ts rename to src/main/resources/_static/app/browse/UserBrowseItemPanel.ts diff --git a/src/main/resources/assets/js/app/browse/UserBrowsePanel.ts b/src/main/resources/_static/app/browse/UserBrowsePanel.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserBrowsePanel.ts rename to src/main/resources/_static/app/browse/UserBrowsePanel.ts diff --git a/src/main/resources/assets/js/app/browse/UserBrowseToolbar.ts b/src/main/resources/_static/app/browse/UserBrowseToolbar.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserBrowseToolbar.ts rename to src/main/resources/_static/app/browse/UserBrowseToolbar.ts diff --git a/src/main/resources/assets/js/app/browse/UserItemDeletePromptEvent.ts b/src/main/resources/_static/app/browse/UserItemDeletePromptEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserItemDeletePromptEvent.ts rename to src/main/resources/_static/app/browse/UserItemDeletePromptEvent.ts diff --git a/src/main/resources/assets/js/app/browse/UserItemType.ts b/src/main/resources/_static/app/browse/UserItemType.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserItemType.ts rename to src/main/resources/_static/app/browse/UserItemType.ts diff --git a/src/main/resources/assets/js/app/browse/UserItemsRowFormatter.ts b/src/main/resources/_static/app/browse/UserItemsRowFormatter.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserItemsRowFormatter.ts rename to src/main/resources/_static/app/browse/UserItemsRowFormatter.ts diff --git a/src/main/resources/assets/js/app/browse/UserItemsTreeGrid.ts b/src/main/resources/_static/app/browse/UserItemsTreeGrid.ts similarity index 99% rename from src/main/resources/assets/js/app/browse/UserItemsTreeGrid.ts rename to src/main/resources/_static/app/browse/UserItemsTreeGrid.ts index 8b5c720eb..0390db225 100644 --- a/src/main/resources/assets/js/app/browse/UserItemsTreeGrid.ts +++ b/src/main/resources/_static/app/browse/UserItemsTreeGrid.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {UserTreeGridItem, UserTreeGridItemBuilder, UserTreeGridItemType} from './UserTreeGridItem'; import {UserTreeGridActions} from './UserTreeGridActions'; import {EditPrincipalEvent} from './EditPrincipalEvent'; diff --git a/src/main/resources/assets/js/app/browse/UserTreeGridActions.ts b/src/main/resources/_static/app/browse/UserTreeGridActions.ts similarity index 99% rename from src/main/resources/assets/js/app/browse/UserTreeGridActions.ts rename to src/main/resources/_static/app/browse/UserTreeGridActions.ts index b4c8ff090..341412a96 100644 --- a/src/main/resources/assets/js/app/browse/UserTreeGridActions.ts +++ b/src/main/resources/_static/app/browse/UserTreeGridActions.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {UserTreeGridItem, UserTreeGridItemType} from './UserTreeGridItem'; import {SyncPrincipalAction} from './action/SyncPrincipalAction'; import {DeletePrincipalAction} from './action/DeletePrincipalAction'; diff --git a/src/main/resources/assets/js/app/browse/UserTreeGridItem.ts b/src/main/resources/_static/app/browse/UserTreeGridItem.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserTreeGridItem.ts rename to src/main/resources/_static/app/browse/UserTreeGridItem.ts diff --git a/src/main/resources/assets/js/app/browse/UserTreeGridItemViewer.ts b/src/main/resources/_static/app/browse/UserTreeGridItemViewer.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/UserTreeGridItemViewer.ts rename to src/main/resources/_static/app/browse/UserTreeGridItemViewer.ts diff --git a/src/main/resources/assets/js/app/browse/action/DeletePrincipalAction.ts b/src/main/resources/_static/app/browse/action/DeletePrincipalAction.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/action/DeletePrincipalAction.ts rename to src/main/resources/_static/app/browse/action/DeletePrincipalAction.ts diff --git a/src/main/resources/assets/js/app/browse/action/EditPrincipalAction.ts b/src/main/resources/_static/app/browse/action/EditPrincipalAction.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/action/EditPrincipalAction.ts rename to src/main/resources/_static/app/browse/action/EditPrincipalAction.ts diff --git a/src/main/resources/assets/js/app/browse/action/NewPrincipalAction.ts b/src/main/resources/_static/app/browse/action/NewPrincipalAction.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/action/NewPrincipalAction.ts rename to src/main/resources/_static/app/browse/action/NewPrincipalAction.ts diff --git a/src/main/resources/assets/js/app/browse/action/SyncPrincipalAction.ts b/src/main/resources/_static/app/browse/action/SyncPrincipalAction.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/action/SyncPrincipalAction.ts rename to src/main/resources/_static/app/browse/action/SyncPrincipalAction.ts diff --git a/src/main/resources/assets/js/app/browse/filter/PrincipalBrowseFilterPanel.ts b/src/main/resources/_static/app/browse/filter/PrincipalBrowseFilterPanel.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/filter/PrincipalBrowseFilterPanel.ts rename to src/main/resources/_static/app/browse/filter/PrincipalBrowseFilterPanel.ts diff --git a/src/main/resources/assets/js/app/browse/filter/PrincipalBrowseSearchData.ts b/src/main/resources/_static/app/browse/filter/PrincipalBrowseSearchData.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/filter/PrincipalBrowseSearchData.ts rename to src/main/resources/_static/app/browse/filter/PrincipalBrowseSearchData.ts diff --git a/src/main/resources/assets/js/app/browse/serviceaccount/PublicKey.ts b/src/main/resources/_static/app/browse/serviceaccount/PublicKey.ts similarity index 100% rename from src/main/resources/assets/js/app/browse/serviceaccount/PublicKey.ts rename to src/main/resources/_static/app/browse/serviceaccount/PublicKey.ts diff --git a/src/main/resources/assets/js/app/create/NewPrincipalDialog.ts b/src/main/resources/_static/app/create/NewPrincipalDialog.ts similarity index 100% rename from src/main/resources/assets/js/app/create/NewPrincipalDialog.ts rename to src/main/resources/_static/app/create/NewPrincipalDialog.ts diff --git a/src/main/resources/assets/js/app/create/UserItemTypesRowFormatter.ts b/src/main/resources/_static/app/create/UserItemTypesRowFormatter.ts similarity index 100% rename from src/main/resources/assets/js/app/create/UserItemTypesRowFormatter.ts rename to src/main/resources/_static/app/create/UserItemTypesRowFormatter.ts diff --git a/src/main/resources/assets/js/app/create/UserItemTypesTreeGrid.ts b/src/main/resources/_static/app/create/UserItemTypesTreeGrid.ts similarity index 99% rename from src/main/resources/assets/js/app/create/UserItemTypesTreeGrid.ts rename to src/main/resources/_static/app/create/UserItemTypesTreeGrid.ts index b7387045d..26fb32504 100644 --- a/src/main/resources/assets/js/app/create/UserItemTypesTreeGrid.ts +++ b/src/main/resources/_static/app/create/UserItemTypesTreeGrid.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {UserTypeTreeGridItem, UserTypeTreeGridItemBuilder} from './UserTypeTreeGridItem'; import {UserItemTypesRowFormatter} from './UserItemTypesRowFormatter'; import {NewPrincipalEvent} from '../browse/NewPrincipalEvent'; diff --git a/src/main/resources/assets/js/app/create/UserTypeTreeGridItem.ts b/src/main/resources/_static/app/create/UserTypeTreeGridItem.ts similarity index 100% rename from src/main/resources/assets/js/app/create/UserTypeTreeGridItem.ts rename to src/main/resources/_static/app/create/UserTypeTreeGridItem.ts diff --git a/src/main/resources/assets/js/app/create/UserTypesTreeGridItemViewer.ts b/src/main/resources/_static/app/create/UserTypesTreeGridItemViewer.ts similarity index 100% rename from src/main/resources/assets/js/app/create/UserTypesTreeGridItemViewer.ts rename to src/main/resources/_static/app/create/UserTypesTreeGridItemViewer.ts diff --git a/src/main/resources/assets/js/app/event/PrincipalServerChange.ts b/src/main/resources/_static/app/event/PrincipalServerChange.ts similarity index 100% rename from src/main/resources/assets/js/app/event/PrincipalServerChange.ts rename to src/main/resources/_static/app/event/PrincipalServerChange.ts diff --git a/src/main/resources/assets/js/app/event/PrincipalServerChangeItem.ts b/src/main/resources/_static/app/event/PrincipalServerChangeItem.ts similarity index 100% rename from src/main/resources/assets/js/app/event/PrincipalServerChangeItem.ts rename to src/main/resources/_static/app/event/PrincipalServerChangeItem.ts diff --git a/src/main/resources/assets/js/app/event/PrincipalServerEvent.ts b/src/main/resources/_static/app/event/PrincipalServerEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/PrincipalServerEvent.ts rename to src/main/resources/_static/app/event/PrincipalServerEvent.ts diff --git a/src/main/resources/assets/js/app/event/PrincipalServerEventsHandler.ts b/src/main/resources/_static/app/event/PrincipalServerEventsHandler.ts similarity index 100% rename from src/main/resources/assets/js/app/event/PrincipalServerEventsHandler.ts rename to src/main/resources/_static/app/event/PrincipalServerEventsHandler.ts diff --git a/src/main/resources/assets/js/app/event/ReportServerChange.ts b/src/main/resources/_static/app/event/ReportServerChange.ts similarity index 100% rename from src/main/resources/assets/js/app/event/ReportServerChange.ts rename to src/main/resources/_static/app/event/ReportServerChange.ts diff --git a/src/main/resources/assets/js/app/event/ReportServerChangeItem.ts b/src/main/resources/_static/app/event/ReportServerChangeItem.ts similarity index 100% rename from src/main/resources/assets/js/app/event/ReportServerChangeItem.ts rename to src/main/resources/_static/app/event/ReportServerChangeItem.ts diff --git a/src/main/resources/assets/js/app/event/ReportServerEvent.ts b/src/main/resources/_static/app/event/ReportServerEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/ReportServerEvent.ts rename to src/main/resources/_static/app/event/ReportServerEvent.ts diff --git a/src/main/resources/assets/js/app/event/UserFilteredDataScrollEvent.ts b/src/main/resources/_static/app/event/UserFilteredDataScrollEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UserFilteredDataScrollEvent.ts rename to src/main/resources/_static/app/event/UserFilteredDataScrollEvent.ts diff --git a/src/main/resources/assets/js/app/event/UserItemCreatedEvent.ts b/src/main/resources/_static/app/event/UserItemCreatedEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UserItemCreatedEvent.ts rename to src/main/resources/_static/app/event/UserItemCreatedEvent.ts diff --git a/src/main/resources/assets/js/app/event/UserItemDeletedEvent.ts b/src/main/resources/_static/app/event/UserItemDeletedEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UserItemDeletedEvent.ts rename to src/main/resources/_static/app/event/UserItemDeletedEvent.ts diff --git a/src/main/resources/assets/js/app/event/UserItemNamedEvent.ts b/src/main/resources/_static/app/event/UserItemNamedEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UserItemNamedEvent.ts rename to src/main/resources/_static/app/event/UserItemNamedEvent.ts diff --git a/src/main/resources/assets/js/app/event/UserItemUpdatedEvent.ts b/src/main/resources/_static/app/event/UserItemUpdatedEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UserItemUpdatedEvent.ts rename to src/main/resources/_static/app/event/UserItemUpdatedEvent.ts diff --git a/src/main/resources/assets/js/app/event/UserItemsStopScrollEvent.ts b/src/main/resources/_static/app/event/UserItemsStopScrollEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UserItemsStopScrollEvent.ts rename to src/main/resources/_static/app/event/UserItemsStopScrollEvent.ts diff --git a/src/main/resources/assets/js/app/event/UsersServerEventsListener.ts b/src/main/resources/_static/app/event/UsersServerEventsListener.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UsersServerEventsListener.ts rename to src/main/resources/_static/app/event/UsersServerEventsListener.ts diff --git a/src/main/resources/assets/js/app/event/UsersServerEventsTranslator.ts b/src/main/resources/_static/app/event/UsersServerEventsTranslator.ts similarity index 100% rename from src/main/resources/assets/js/app/event/UsersServerEventsTranslator.ts rename to src/main/resources/_static/app/event/UsersServerEventsTranslator.ts diff --git a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationComboBox.ts b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationComboBox.ts similarity index 100% rename from src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationComboBox.ts rename to src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationComboBox.ts diff --git a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationLoader.ts b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationLoader.ts similarity index 97% rename from src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationLoader.ts rename to src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationLoader.ts index 5cd460034..6be157b69 100644 --- a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationLoader.ts +++ b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationLoader.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {BaseLoader} from '@enonic/lib-admin-ui/util/loader/BaseLoader'; import {Application} from '@enonic/lib-admin-ui/application/Application'; import {ListIdProviderApplicationsRequest} from '../../resource/ListIdProviderApplicationsRequest'; diff --git a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionView.ts b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionView.ts similarity index 99% rename from src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionView.ts rename to src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionView.ts index 2be7d6f0b..8d051ff98 100644 --- a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionView.ts +++ b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionView.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {PropertyTree} from '@enonic/lib-admin-ui/data/PropertyTree'; import {Option} from '@enonic/lib-admin-ui/ui/selector/Option'; import {FormView} from '@enonic/lib-admin-ui/form/FormView'; diff --git a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionsView.ts b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionsView.ts similarity index 100% rename from src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionsView.ts rename to src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelectedOptionsView.ts diff --git a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelector.ts b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelector.ts similarity index 95% rename from src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelector.ts rename to src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelector.ts index 148fcd341..37ec1b8f4 100644 --- a/src/main/resources/assets/js/app/inputtype/authapplicationselector/AuthApplicationSelector.ts +++ b/src/main/resources/_static/app/inputtype/authapplicationselector/AuthApplicationSelector.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {PropertyArray} from '@enonic/lib-admin-ui/data/PropertyArray'; import {FormView} from '@enonic/lib-admin-ui/form/FormView'; import {Value} from '@enonic/lib-admin-ui/data/Value'; @@ -15,9 +15,6 @@ import {FormContext} from '@enonic/lib-admin-ui/form/FormContext'; import {AuthApplicationSelectedOptionView} from './AuthApplicationSelectedOptionView'; import {AuthApplicationComboBox} from './AuthApplicationComboBox'; import {BaseInputTypeManagingAdd} from '@enonic/lib-admin-ui/form/inputtype/support/BaseInputTypeManagingAdd'; -import {InputValidationRecording} from '@enonic/lib-admin-ui/form/inputtype/InputValidationRecording'; -import {Class} from '@enonic/lib-admin-ui/Class'; -import {InputTypeManager} from '@enonic/lib-admin-ui/form/inputtype/InputTypeManager'; import {Input} from '@enonic/lib-admin-ui/form/Input'; import {AuthApplicationSelectedOptionsView} from './AuthApplicationSelectedOptionsView'; @@ -202,5 +199,3 @@ export class AuthApplicationSelector return this.comboBox.giveFocus(); } } - -InputTypeManager.register(new Class('AuthApplicationSelector', AuthApplicationSelector)); diff --git a/src/main/resources/_static/app/inputtype/index.ts b/src/main/resources/_static/app/inputtype/index.ts new file mode 100644 index 000000000..f5b9aa588 --- /dev/null +++ b/src/main/resources/_static/app/inputtype/index.ts @@ -0,0 +1,2 @@ +export {AuthApplicationSelector} from './authapplicationselector/AuthApplicationSelector'; +export {PrincipalSelector} from './selector/PrincipalSelector'; diff --git a/src/main/resources/assets/js/app/inputtype/selector/PrincipalSelector.ts b/src/main/resources/_static/app/inputtype/selector/PrincipalSelector.ts similarity index 100% rename from src/main/resources/assets/js/app/inputtype/selector/PrincipalSelector.ts rename to src/main/resources/_static/app/inputtype/selector/PrincipalSelector.ts diff --git a/src/main/resources/assets/js/app/principal/FindPrincipalsRequest.ts b/src/main/resources/_static/app/principal/FindPrincipalsRequest.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/FindPrincipalsRequest.ts rename to src/main/resources/_static/app/principal/FindPrincipalsRequest.ts diff --git a/src/main/resources/assets/js/app/principal/GetPrincipalsByKeysRequest.ts b/src/main/resources/_static/app/principal/GetPrincipalsByKeysRequest.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/GetPrincipalsByKeysRequest.ts rename to src/main/resources/_static/app/principal/GetPrincipalsByKeysRequest.ts diff --git a/src/main/resources/assets/js/app/principal/Group.ts b/src/main/resources/_static/app/principal/Group.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/Group.ts rename to src/main/resources/_static/app/principal/Group.ts diff --git a/src/main/resources/assets/js/app/principal/GroupJson.ts b/src/main/resources/_static/app/principal/GroupJson.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/GroupJson.ts rename to src/main/resources/_static/app/principal/GroupJson.ts diff --git a/src/main/resources/assets/js/app/principal/IdProvider.ts b/src/main/resources/_static/app/principal/IdProvider.ts similarity index 99% rename from src/main/resources/assets/js/app/principal/IdProvider.ts rename to src/main/resources/_static/app/principal/IdProvider.ts index 8733492fc..77c57e96c 100644 --- a/src/main/resources/assets/js/app/principal/IdProvider.ts +++ b/src/main/resources/_static/app/principal/IdProvider.ts @@ -5,7 +5,7 @@ import {IdProviderKey} from '@enonic/lib-admin-ui/security/IdProviderKey'; import {IdProviderMode} from '@enonic/lib-admin-ui/security/IdProviderMode'; import {PrincipalType} from '@enonic/lib-admin-ui/security/PrincipalType'; import {UserItem, UserItemBuilder} from '@enonic/lib-admin-ui/security/UserItem'; -import * as Q from 'q'; +import Q from 'q'; import {ListPrincipalsData, ListPrincipalsRequest} from '../../graphql/principal/ListPrincipalsRequest'; import {IdProviderAccessControlList} from '../access/IdProviderAccessControlList'; import {IdProviderJson} from './IdProviderJson'; diff --git a/src/main/resources/assets/js/app/principal/IdProviderJson.ts b/src/main/resources/_static/app/principal/IdProviderJson.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/IdProviderJson.ts rename to src/main/resources/_static/app/principal/IdProviderJson.ts diff --git a/src/main/resources/assets/js/app/principal/Members.ts b/src/main/resources/_static/app/principal/Members.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/Members.ts rename to src/main/resources/_static/app/principal/Members.ts diff --git a/src/main/resources/assets/js/app/principal/MembersJson.ts b/src/main/resources/_static/app/principal/MembersJson.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/MembersJson.ts rename to src/main/resources/_static/app/principal/MembersJson.ts diff --git a/src/main/resources/assets/js/app/principal/PrincipalLoader.ts b/src/main/resources/_static/app/principal/PrincipalLoader.ts similarity index 98% rename from src/main/resources/assets/js/app/principal/PrincipalLoader.ts rename to src/main/resources/_static/app/principal/PrincipalLoader.ts index 51ef91a6d..c70a08e78 100644 --- a/src/main/resources/assets/js/app/principal/PrincipalLoader.ts +++ b/src/main/resources/_static/app/principal/PrincipalLoader.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {PrincipalLoader as BasePrincipalLoader} from '@enonic/lib-admin-ui/security/PrincipalLoader'; import {FindPrincipalsRequest} from './FindPrincipalsRequest'; import {GetPrincipalsByKeysRequest} from './GetPrincipalsByKeysRequest'; diff --git a/src/main/resources/assets/js/app/principal/PublicKeyJson.ts b/src/main/resources/_static/app/principal/PublicKeyJson.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/PublicKeyJson.ts rename to src/main/resources/_static/app/principal/PublicKeyJson.ts diff --git a/src/main/resources/assets/js/app/principal/Role.ts b/src/main/resources/_static/app/principal/Role.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/Role.ts rename to src/main/resources/_static/app/principal/Role.ts diff --git a/src/main/resources/assets/js/app/principal/RoleJson.ts b/src/main/resources/_static/app/principal/RoleJson.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/RoleJson.ts rename to src/main/resources/_static/app/principal/RoleJson.ts diff --git a/src/main/resources/assets/js/app/principal/User.ts b/src/main/resources/_static/app/principal/User.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/User.ts rename to src/main/resources/_static/app/principal/User.ts diff --git a/src/main/resources/assets/js/app/principal/UserJson.ts b/src/main/resources/_static/app/principal/UserJson.ts similarity index 100% rename from src/main/resources/assets/js/app/principal/UserJson.ts rename to src/main/resources/_static/app/principal/UserJson.ts diff --git a/src/main/resources/assets/js/app/report/Report.ts b/src/main/resources/_static/app/report/Report.ts similarity index 100% rename from src/main/resources/assets/js/app/report/Report.ts rename to src/main/resources/_static/app/report/Report.ts diff --git a/src/main/resources/assets/js/app/report/Repository.ts b/src/main/resources/_static/app/report/Repository.ts similarity index 100% rename from src/main/resources/assets/js/app/report/Repository.ts rename to src/main/resources/_static/app/report/Repository.ts diff --git a/src/main/resources/assets/js/app/report/RepositoryComboBox.ts b/src/main/resources/_static/app/report/RepositoryComboBox.ts similarity index 100% rename from src/main/resources/assets/js/app/report/RepositoryComboBox.ts rename to src/main/resources/_static/app/report/RepositoryComboBox.ts diff --git a/src/main/resources/assets/js/app/report/RepositoryLoader.ts b/src/main/resources/_static/app/report/RepositoryLoader.ts similarity index 98% rename from src/main/resources/assets/js/app/report/RepositoryLoader.ts rename to src/main/resources/_static/app/report/RepositoryLoader.ts index 429b02a6f..62210a79a 100644 --- a/src/main/resources/assets/js/app/report/RepositoryLoader.ts +++ b/src/main/resources/_static/app/report/RepositoryLoader.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {Repository} from './Repository'; import {ListRepositoriesRequest} from '../../graphql/repository/ListRepositoriesRequest'; import {BaseLoader} from '@enonic/lib-admin-ui/util/loader/BaseLoader'; diff --git a/src/main/resources/assets/js/app/report/RepositoryViewer.ts b/src/main/resources/_static/app/report/RepositoryViewer.ts similarity index 100% rename from src/main/resources/assets/js/app/report/RepositoryViewer.ts rename to src/main/resources/_static/app/report/RepositoryViewer.ts diff --git a/src/main/resources/assets/js/app/resource/ListIdProviderApplicationsRequest.ts b/src/main/resources/_static/app/resource/ListIdProviderApplicationsRequest.ts similarity index 100% rename from src/main/resources/assets/js/app/resource/ListIdProviderApplicationsRequest.ts rename to src/main/resources/_static/app/resource/ListIdProviderApplicationsRequest.ts diff --git a/src/main/resources/assets/js/app/view/MembersListing.ts b/src/main/resources/_static/app/view/MembersListing.ts similarity index 100% rename from src/main/resources/assets/js/app/view/MembersListing.ts rename to src/main/resources/_static/app/view/MembersListing.ts diff --git a/src/main/resources/assets/js/app/view/PublicKeysGrid.ts b/src/main/resources/_static/app/view/PublicKeysGrid.ts similarity index 100% rename from src/main/resources/assets/js/app/view/PublicKeysGrid.ts rename to src/main/resources/_static/app/view/PublicKeysGrid.ts diff --git a/src/main/resources/assets/js/app/view/UserItemStatisticsHeader.ts b/src/main/resources/_static/app/view/UserItemStatisticsHeader.ts similarity index 100% rename from src/main/resources/assets/js/app/view/UserItemStatisticsHeader.ts rename to src/main/resources/_static/app/view/UserItemStatisticsHeader.ts diff --git a/src/main/resources/assets/js/app/view/UserItemStatisticsPanel.ts b/src/main/resources/_static/app/view/UserItemStatisticsPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/view/UserItemStatisticsPanel.ts rename to src/main/resources/_static/app/view/UserItemStatisticsPanel.ts index e0107e4dc..ae98f5e45 100644 --- a/src/main/resources/assets/js/app/view/UserItemStatisticsPanel.ts +++ b/src/main/resources/_static/app/view/UserItemStatisticsPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {UserTreeGridItem, UserTreeGridItemType} from '../browse/UserTreeGridItem'; import {GetPrincipalByKeyRequest} from '../../graphql/principal/GetPrincipalByKeyRequest'; import {RepositoryComboBox} from '../report/RepositoryComboBox'; diff --git a/src/main/resources/assets/js/app/wizard/ChangeUserPasswordDialog.ts b/src/main/resources/_static/app/wizard/ChangeUserPasswordDialog.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/ChangeUserPasswordDialog.ts rename to src/main/resources/_static/app/wizard/ChangeUserPasswordDialog.ts diff --git a/src/main/resources/assets/js/app/wizard/GroupWizardPanel.ts b/src/main/resources/_static/app/wizard/GroupWizardPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/GroupWizardPanel.ts rename to src/main/resources/_static/app/wizard/GroupWizardPanel.ts index 053855d68..a2473501a 100644 --- a/src/main/resources/assets/js/app/wizard/GroupWizardPanel.ts +++ b/src/main/resources/_static/app/wizard/GroupWizardPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {MembersWizardPanel} from './MembersWizardPanel'; import {PrincipalWizardPanelParams} from './PrincipalWizardPanelParams'; import {CreateGroupRequest} from '../../graphql/principal/group/CreateGroupRequest'; diff --git a/src/main/resources/assets/js/app/wizard/IdProviderAccessControlComboBox.ts b/src/main/resources/_static/app/wizard/IdProviderAccessControlComboBox.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/IdProviderAccessControlComboBox.ts rename to src/main/resources/_static/app/wizard/IdProviderAccessControlComboBox.ts diff --git a/src/main/resources/assets/js/app/wizard/IdProviderAccessControlEntryView.ts b/src/main/resources/_static/app/wizard/IdProviderAccessControlEntryView.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/IdProviderAccessControlEntryView.ts rename to src/main/resources/_static/app/wizard/IdProviderAccessControlEntryView.ts diff --git a/src/main/resources/assets/js/app/wizard/IdProviderAccessSelector.ts b/src/main/resources/_static/app/wizard/IdProviderAccessSelector.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/IdProviderAccessSelector.ts rename to src/main/resources/_static/app/wizard/IdProviderAccessSelector.ts diff --git a/src/main/resources/assets/js/app/wizard/IdProviderWizardActions.ts b/src/main/resources/_static/app/wizard/IdProviderWizardActions.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/IdProviderWizardActions.ts rename to src/main/resources/_static/app/wizard/IdProviderWizardActions.ts diff --git a/src/main/resources/assets/js/app/wizard/IdProviderWizardDataLoader.ts b/src/main/resources/_static/app/wizard/IdProviderWizardDataLoader.ts similarity index 98% rename from src/main/resources/assets/js/app/wizard/IdProviderWizardDataLoader.ts rename to src/main/resources/_static/app/wizard/IdProviderWizardDataLoader.ts index bca9f3469..71a8f6149 100644 --- a/src/main/resources/assets/js/app/wizard/IdProviderWizardDataLoader.ts +++ b/src/main/resources/_static/app/wizard/IdProviderWizardDataLoader.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {IdProviderWizardPanelParams} from './IdProviderWizardPanelParams'; import {GetIdProviderByKeyRequest} from '../../graphql/idprovider/GetIdProviderByKeyRequest'; import {GetDefaultIdProviderRequest} from '../../graphql/idprovider/GetDefaultIdProviderRequest'; diff --git a/src/main/resources/assets/js/app/wizard/IdProviderWizardPanel.ts b/src/main/resources/_static/app/wizard/IdProviderWizardPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/IdProviderWizardPanel.ts rename to src/main/resources/_static/app/wizard/IdProviderWizardPanel.ts index 4c822fd5f..bff5e862d 100644 --- a/src/main/resources/assets/js/app/wizard/IdProviderWizardPanel.ts +++ b/src/main/resources/_static/app/wizard/IdProviderWizardPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {Router} from '../Router'; import {UserItemWizardPanel} from './UserItemWizardPanel'; import {SecurityWizardStepForm} from './SecurityWizardStepForm'; diff --git a/src/main/resources/assets/js/app/wizard/IdProviderWizardPanelParams.ts b/src/main/resources/_static/app/wizard/IdProviderWizardPanelParams.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/IdProviderWizardPanelParams.ts rename to src/main/resources/_static/app/wizard/IdProviderWizardPanelParams.ts diff --git a/src/main/resources/assets/js/app/wizard/IdProviderWizardStepForm.ts b/src/main/resources/_static/app/wizard/IdProviderWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/IdProviderWizardStepForm.ts rename to src/main/resources/_static/app/wizard/IdProviderWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/MembersWizardPanel.ts b/src/main/resources/_static/app/wizard/MembersWizardPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/MembersWizardPanel.ts rename to src/main/resources/_static/app/wizard/MembersWizardPanel.ts index cfa5114bb..d7a9a6dfc 100644 --- a/src/main/resources/assets/js/app/wizard/MembersWizardPanel.ts +++ b/src/main/resources/_static/app/wizard/MembersWizardPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {PrincipalDescriptionWizardStepForm} from './PrincipalDescriptionWizardStepForm'; import {PrincipalWizardPanel} from './PrincipalWizardPanel'; import {PrincipalWizardPanelParams} from './PrincipalWizardPanelParams'; diff --git a/src/main/resources/assets/js/app/wizard/MembersWizardStepForm.ts b/src/main/resources/_static/app/wizard/MembersWizardStepForm.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/MembersWizardStepForm.ts rename to src/main/resources/_static/app/wizard/MembersWizardStepForm.ts index ead7f8eda..dbe0284af 100644 --- a/src/main/resources/assets/js/app/wizard/MembersWizardStepForm.ts +++ b/src/main/resources/_static/app/wizard/MembersWizardStepForm.ts @@ -13,7 +13,7 @@ import {ObjectHelper} from '@enonic/lib-admin-ui/ObjectHelper'; import {UserItemWizardStepForm} from './UserItemWizardStepForm'; import {PrincipalLoader} from '../principal/PrincipalLoader'; import {Option} from '@enonic/lib-admin-ui/ui/selector/Option'; -import * as Q from 'q'; +import Q from 'q'; import {SelectedOption} from '@enonic/lib-admin-ui/ui/selector/combobox/SelectedOption'; import {RoleKeys} from '@enonic/lib-admin-ui/security/RoleKeys'; diff --git a/src/main/resources/assets/js/app/wizard/NewPublicKeyDialog.ts b/src/main/resources/_static/app/wizard/NewPublicKeyDialog.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/NewPublicKeyDialog.ts rename to src/main/resources/_static/app/wizard/NewPublicKeyDialog.ts index c35062d66..61e5e0cae 100644 --- a/src/main/resources/assets/js/app/wizard/NewPublicKeyDialog.ts +++ b/src/main/resources/_static/app/wizard/NewPublicKeyDialog.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {ModalDialog} from '@enonic/lib-admin-ui/ui/dialog/ModalDialog'; import {FormItem, FormItemBuilder} from '@enonic/lib-admin-ui/ui/form/FormItem'; import {Fieldset} from '@enonic/lib-admin-ui/ui/form/Fieldset'; diff --git a/src/main/resources/assets/js/app/wizard/OpenChangePasswordDialogEvent.ts b/src/main/resources/_static/app/wizard/OpenChangePasswordDialogEvent.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/OpenChangePasswordDialogEvent.ts rename to src/main/resources/_static/app/wizard/OpenChangePasswordDialogEvent.ts diff --git a/src/main/resources/assets/js/app/wizard/PasswordGenerator.ts b/src/main/resources/_static/app/wizard/PasswordGenerator.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/PasswordGenerator.ts rename to src/main/resources/_static/app/wizard/PasswordGenerator.ts diff --git a/src/main/resources/assets/js/app/wizard/PasswordStrengthBlock.ts b/src/main/resources/_static/app/wizard/PasswordStrengthBlock.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/PasswordStrengthBlock.ts rename to src/main/resources/_static/app/wizard/PasswordStrengthBlock.ts diff --git a/src/main/resources/assets/js/app/wizard/PrincipalDescriptionWizardStepForm.ts b/src/main/resources/_static/app/wizard/PrincipalDescriptionWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/PrincipalDescriptionWizardStepForm.ts rename to src/main/resources/_static/app/wizard/PrincipalDescriptionWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/PrincipalWizardDataLoader.ts b/src/main/resources/_static/app/wizard/PrincipalWizardDataLoader.ts similarity index 98% rename from src/main/resources/assets/js/app/wizard/PrincipalWizardDataLoader.ts rename to src/main/resources/_static/app/wizard/PrincipalWizardDataLoader.ts index 5446ed963..1a0a05971 100644 --- a/src/main/resources/assets/js/app/wizard/PrincipalWizardDataLoader.ts +++ b/src/main/resources/_static/app/wizard/PrincipalWizardDataLoader.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {PrincipalWizardPanelParams} from './PrincipalWizardPanelParams'; import {GetPrincipalByKeyRequest} from '../../graphql/principal/GetPrincipalByKeyRequest'; import {Principal} from '@enonic/lib-admin-ui/security/Principal'; diff --git a/src/main/resources/assets/js/app/wizard/PrincipalWizardPanel.ts b/src/main/resources/_static/app/wizard/PrincipalWizardPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/PrincipalWizardPanel.ts rename to src/main/resources/_static/app/wizard/PrincipalWizardPanel.ts index 670ce0de0..10623ca12 100644 --- a/src/main/resources/assets/js/app/wizard/PrincipalWizardPanel.ts +++ b/src/main/resources/_static/app/wizard/PrincipalWizardPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {UserItemWizardPanel} from './UserItemWizardPanel'; import {PrincipalWizardPanelParams} from './PrincipalWizardPanelParams'; import {Router} from '../Router'; diff --git a/src/main/resources/assets/js/app/wizard/PrincipalWizardPanelParams.ts b/src/main/resources/_static/app/wizard/PrincipalWizardPanelParams.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/PrincipalWizardPanelParams.ts rename to src/main/resources/_static/app/wizard/PrincipalWizardPanelParams.ts diff --git a/src/main/resources/assets/js/app/wizard/PublicKeyDetailsDialog.ts b/src/main/resources/_static/app/wizard/PublicKeyDetailsDialog.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/PublicKeyDetailsDialog.ts rename to src/main/resources/_static/app/wizard/PublicKeyDetailsDialog.ts diff --git a/src/main/resources/assets/js/app/wizard/RoleWizardPanel.ts b/src/main/resources/_static/app/wizard/RoleWizardPanel.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/RoleWizardPanel.ts rename to src/main/resources/_static/app/wizard/RoleWizardPanel.ts diff --git a/src/main/resources/assets/js/app/wizard/RolesWizardStepForm.ts b/src/main/resources/_static/app/wizard/RolesWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/RolesWizardStepForm.ts rename to src/main/resources/_static/app/wizard/RolesWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/SecurityWizardStepForm.ts b/src/main/resources/_static/app/wizard/SecurityWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/SecurityWizardStepForm.ts rename to src/main/resources/_static/app/wizard/SecurityWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/SetUserPasswordRequest.ts b/src/main/resources/_static/app/wizard/SetUserPasswordRequest.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/SetUserPasswordRequest.ts rename to src/main/resources/_static/app/wizard/SetUserPasswordRequest.ts diff --git a/src/main/resources/assets/js/app/wizard/UserEmailWizardStepForm.ts b/src/main/resources/_static/app/wizard/UserEmailWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/UserEmailWizardStepForm.ts rename to src/main/resources/_static/app/wizard/UserEmailWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/UserItemWizardPanel.ts b/src/main/resources/_static/app/wizard/UserItemWizardPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/UserItemWizardPanel.ts rename to src/main/resources/_static/app/wizard/UserItemWizardPanel.ts index 3c669d5d0..fc292d00f 100644 --- a/src/main/resources/assets/js/app/wizard/UserItemWizardPanel.ts +++ b/src/main/resources/_static/app/wizard/UserItemWizardPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {UserItemWizardActions} from './action/UserItemWizardActions'; import {UserItemWizardPanelParams} from './UserItemWizardPanelParams'; import {PrincipalServerEventsHandler} from '../event/PrincipalServerEventsHandler'; diff --git a/src/main/resources/assets/js/app/wizard/UserItemWizardPanelParams.ts b/src/main/resources/_static/app/wizard/UserItemWizardPanelParams.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/UserItemWizardPanelParams.ts rename to src/main/resources/_static/app/wizard/UserItemWizardPanelParams.ts diff --git a/src/main/resources/assets/js/app/wizard/UserItemWizardStepForm.ts b/src/main/resources/_static/app/wizard/UserItemWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/UserItemWizardStepForm.ts rename to src/main/resources/_static/app/wizard/UserItemWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/UserKeyDetailsDialog.ts b/src/main/resources/_static/app/wizard/UserKeyDetailsDialog.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/UserKeyDetailsDialog.ts rename to src/main/resources/_static/app/wizard/UserKeyDetailsDialog.ts diff --git a/src/main/resources/assets/js/app/wizard/UserMembershipsWizardStepForm.ts b/src/main/resources/_static/app/wizard/UserMembershipsWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/UserMembershipsWizardStepForm.ts rename to src/main/resources/_static/app/wizard/UserMembershipsWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/UserPasswordWizardStepForm.ts b/src/main/resources/_static/app/wizard/UserPasswordWizardStepForm.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/UserPasswordWizardStepForm.ts rename to src/main/resources/_static/app/wizard/UserPasswordWizardStepForm.ts diff --git a/src/main/resources/assets/js/app/wizard/UserWizardPanel.ts b/src/main/resources/_static/app/wizard/UserWizardPanel.ts similarity index 99% rename from src/main/resources/assets/js/app/wizard/UserWizardPanel.ts rename to src/main/resources/_static/app/wizard/UserWizardPanel.ts index 034b858df..610be7f56 100644 --- a/src/main/resources/assets/js/app/wizard/UserWizardPanel.ts +++ b/src/main/resources/_static/app/wizard/UserWizardPanel.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {PrincipalWizardPanel} from './PrincipalWizardPanel'; import {UserEmailWizardStepForm} from './UserEmailWizardStepForm'; import {UserPasswordWizardStepForm} from './UserPasswordWizardStepForm'; diff --git a/src/main/resources/assets/js/app/wizard/action/DeleteUserItemAction.ts b/src/main/resources/_static/app/wizard/action/DeleteUserItemAction.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/action/DeleteUserItemAction.ts rename to src/main/resources/_static/app/wizard/action/DeleteUserItemAction.ts diff --git a/src/main/resources/assets/js/app/wizard/action/UserItemWizardActions.ts b/src/main/resources/_static/app/wizard/action/UserItemWizardActions.ts similarity index 100% rename from src/main/resources/assets/js/app/wizard/action/UserItemWizardActions.ts rename to src/main/resources/_static/app/wizard/action/UserItemWizardActions.ts diff --git a/src/main/resources/assets/js/graphql/GraphQlRequest.ts b/src/main/resources/_static/graphql/GraphQlRequest.ts similarity index 99% rename from src/main/resources/assets/js/graphql/GraphQlRequest.ts rename to src/main/resources/_static/graphql/GraphQlRequest.ts index 894a0c07b..ab0449736 100644 --- a/src/main/resources/assets/js/graphql/GraphQlRequest.ts +++ b/src/main/resources/_static/graphql/GraphQlRequest.ts @@ -4,7 +4,7 @@ import {HttpRequest} from '@enonic/lib-admin-ui/rest/HttpRequest'; import {PostRequest} from '@enonic/lib-admin-ui/rest/PostRequest'; import {JsonResponse} from '@enonic/lib-admin-ui/rest/JsonResponse'; import {CONFIG} from '@enonic/lib-admin-ui/util/Config'; -import * as Q from 'q'; +import Q from 'q'; export interface GraphQlMutationResponse { error?: string; diff --git a/src/main/resources/assets/js/graphql/ListGraphQlRequest.ts b/src/main/resources/_static/graphql/ListGraphQlRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/ListGraphQlRequest.ts rename to src/main/resources/_static/graphql/ListGraphQlRequest.ts diff --git a/src/main/resources/assets/js/graphql/aggregation/UserItemAggregationHelper.ts b/src/main/resources/_static/graphql/aggregation/UserItemAggregationHelper.ts similarity index 100% rename from src/main/resources/assets/js/graphql/aggregation/UserItemAggregationHelper.ts rename to src/main/resources/_static/graphql/aggregation/UserItemAggregationHelper.ts diff --git a/src/main/resources/assets/js/graphql/aggregation/UserItemBucketAggregationJson.ts b/src/main/resources/_static/graphql/aggregation/UserItemBucketAggregationJson.ts similarity index 100% rename from src/main/resources/assets/js/graphql/aggregation/UserItemBucketAggregationJson.ts rename to src/main/resources/_static/graphql/aggregation/UserItemBucketAggregationJson.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/CreateIdProviderRequest.ts b/src/main/resources/_static/graphql/idprovider/CreateIdProviderRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/CreateIdProviderRequest.ts rename to src/main/resources/_static/graphql/idprovider/CreateIdProviderRequest.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/DeleteIdProviderRequest.ts b/src/main/resources/_static/graphql/idprovider/DeleteIdProviderRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/DeleteIdProviderRequest.ts rename to src/main/resources/_static/graphql/idprovider/DeleteIdProviderRequest.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/GetDefaultIdProviderRequest.ts b/src/main/resources/_static/graphql/idprovider/GetDefaultIdProviderRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/GetDefaultIdProviderRequest.ts rename to src/main/resources/_static/graphql/idprovider/GetDefaultIdProviderRequest.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/GetIdProviderByKeyRequest.ts b/src/main/resources/_static/graphql/idprovider/GetIdProviderByKeyRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/GetIdProviderByKeyRequest.ts rename to src/main/resources/_static/graphql/idprovider/GetIdProviderByKeyRequest.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/IdProviderListResult.ts b/src/main/resources/_static/graphql/idprovider/IdProviderListResult.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/IdProviderListResult.ts rename to src/main/resources/_static/graphql/idprovider/IdProviderListResult.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/ListIdProvidersRequest.ts b/src/main/resources/_static/graphql/idprovider/ListIdProvidersRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/ListIdProvidersRequest.ts rename to src/main/resources/_static/graphql/idprovider/ListIdProvidersRequest.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/SaveIdProviderRequest.ts b/src/main/resources/_static/graphql/idprovider/SaveIdProviderRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/SaveIdProviderRequest.ts rename to src/main/resources/_static/graphql/idprovider/SaveIdProviderRequest.ts diff --git a/src/main/resources/assets/js/graphql/idprovider/UpdateIdProviderRequest.ts b/src/main/resources/_static/graphql/idprovider/UpdateIdProviderRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/idprovider/UpdateIdProviderRequest.ts rename to src/main/resources/_static/graphql/idprovider/UpdateIdProviderRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/DeletePrincipalRequest.ts b/src/main/resources/_static/graphql/principal/DeletePrincipalRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/DeletePrincipalRequest.ts rename to src/main/resources/_static/graphql/principal/DeletePrincipalRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/GetPrincipalByKeyRequest.ts b/src/main/resources/_static/graphql/principal/GetPrincipalByKeyRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/GetPrincipalByKeyRequest.ts rename to src/main/resources/_static/graphql/principal/GetPrincipalByKeyRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/GetPrincipalsByKeysRequest.ts b/src/main/resources/_static/graphql/principal/GetPrincipalsByKeysRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/GetPrincipalsByKeysRequest.ts rename to src/main/resources/_static/graphql/principal/GetPrincipalsByKeysRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/GetPrincipalsExistenceRequest.ts b/src/main/resources/_static/graphql/principal/GetPrincipalsExistenceRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/GetPrincipalsExistenceRequest.ts rename to src/main/resources/_static/graphql/principal/GetPrincipalsExistenceRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/ListItemsRequest.ts b/src/main/resources/_static/graphql/principal/ListItemsRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/ListItemsRequest.ts rename to src/main/resources/_static/graphql/principal/ListItemsRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/ListPrincipalsNamesRequest.ts b/src/main/resources/_static/graphql/principal/ListPrincipalsNamesRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/ListPrincipalsNamesRequest.ts rename to src/main/resources/_static/graphql/principal/ListPrincipalsNamesRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/ListPrincipalsRequest.ts b/src/main/resources/_static/graphql/principal/ListPrincipalsRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/ListPrincipalsRequest.ts rename to src/main/resources/_static/graphql/principal/ListPrincipalsRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/ListTypesRequest.ts b/src/main/resources/_static/graphql/principal/ListTypesRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/ListTypesRequest.ts rename to src/main/resources/_static/graphql/principal/ListTypesRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/ListUserItemsRequest.ts b/src/main/resources/_static/graphql/principal/ListUserItemsRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/ListUserItemsRequest.ts rename to src/main/resources/_static/graphql/principal/ListUserItemsRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/group/CreateGroupRequest.ts b/src/main/resources/_static/graphql/principal/group/CreateGroupRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/group/CreateGroupRequest.ts rename to src/main/resources/_static/graphql/principal/group/CreateGroupRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/group/UpdateGroupRequest.ts b/src/main/resources/_static/graphql/principal/group/UpdateGroupRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/group/UpdateGroupRequest.ts rename to src/main/resources/_static/graphql/principal/group/UpdateGroupRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/role/CreateRoleRequest.ts b/src/main/resources/_static/graphql/principal/role/CreateRoleRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/role/CreateRoleRequest.ts rename to src/main/resources/_static/graphql/principal/role/CreateRoleRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/role/UpdateRoleRequest.ts b/src/main/resources/_static/graphql/principal/role/UpdateRoleRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/role/UpdateRoleRequest.ts rename to src/main/resources/_static/graphql/principal/role/UpdateRoleRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/user/AddPublicKeyRequest.ts b/src/main/resources/_static/graphql/principal/user/AddPublicKeyRequest.ts similarity index 98% rename from src/main/resources/assets/js/graphql/principal/user/AddPublicKeyRequest.ts rename to src/main/resources/_static/graphql/principal/user/AddPublicKeyRequest.ts index 1ac191f91..40570f85a 100644 --- a/src/main/resources/assets/js/graphql/principal/user/AddPublicKeyRequest.ts +++ b/src/main/resources/_static/graphql/principal/user/AddPublicKeyRequest.ts @@ -1,4 +1,4 @@ -import * as Q from 'q'; +import Q from 'q'; import {GraphQlMutationResponse, GraphQlRequest} from '../../GraphQlRequest'; import {PrincipalKey} from '@enonic/lib-admin-ui/security/PrincipalKey'; import {PublicKey} from '../../../app/browse/serviceaccount/PublicKey'; diff --git a/src/main/resources/assets/js/graphql/principal/user/CreateUserRequest.ts b/src/main/resources/_static/graphql/principal/user/CreateUserRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/user/CreateUserRequest.ts rename to src/main/resources/_static/graphql/principal/user/CreateUserRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/user/DeletePublicKeyRequest.ts b/src/main/resources/_static/graphql/principal/user/DeletePublicKeyRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/user/DeletePublicKeyRequest.ts rename to src/main/resources/_static/graphql/principal/user/DeletePublicKeyRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/user/UpdatePasswordRequest.ts b/src/main/resources/_static/graphql/principal/user/UpdatePasswordRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/user/UpdatePasswordRequest.ts rename to src/main/resources/_static/graphql/principal/user/UpdatePasswordRequest.ts diff --git a/src/main/resources/assets/js/graphql/principal/user/UpdateUserRequest.ts b/src/main/resources/_static/graphql/principal/user/UpdateUserRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/principal/user/UpdateUserRequest.ts rename to src/main/resources/_static/graphql/principal/user/UpdateUserRequest.ts diff --git a/src/main/resources/assets/js/graphql/repository/ListRepositoriesRequest.ts b/src/main/resources/_static/graphql/repository/ListRepositoriesRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/repository/ListRepositoriesRequest.ts rename to src/main/resources/_static/graphql/repository/ListRepositoriesRequest.ts diff --git a/src/main/resources/assets/js/graphql/useritem/DeleteUserItemJson.ts b/src/main/resources/_static/graphql/useritem/DeleteUserItemJson.ts similarity index 100% rename from src/main/resources/assets/js/graphql/useritem/DeleteUserItemJson.ts rename to src/main/resources/_static/graphql/useritem/DeleteUserItemJson.ts diff --git a/src/main/resources/assets/js/graphql/useritem/DeleteUserItemRequest.ts b/src/main/resources/_static/graphql/useritem/DeleteUserItemRequest.ts similarity index 100% rename from src/main/resources/assets/js/graphql/useritem/DeleteUserItemRequest.ts rename to src/main/resources/_static/graphql/useritem/DeleteUserItemRequest.ts diff --git a/src/main/resources/assets/js/graphql/useritem/DeleteUserItemResult.ts b/src/main/resources/_static/graphql/useritem/DeleteUserItemResult.ts similarity index 100% rename from src/main/resources/assets/js/graphql/useritem/DeleteUserItemResult.ts rename to src/main/resources/_static/graphql/useritem/DeleteUserItemResult.ts diff --git a/src/main/resources/assets/js/main.ts b/src/main/resources/_static/main.ts similarity index 70% rename from src/main/resources/assets/js/main.ts rename to src/main/resources/_static/main.ts index a8a18fe68..9f090610f 100644 --- a/src/main/resources/assets/js/main.ts +++ b/src/main/resources/_static/main.ts @@ -1,3 +1,21 @@ +import {Store} from '@enonic/lib-admin-ui/store/Store'; +import {StyleHelper} from '@enonic/lib-admin-ui/StyleHelper'; + +import '@enonic/lib-admin-ui/form/inputtype/support/NoInputTypeFoundView'; +import '@enonic/lib-admin-ui/form/inputtype/checkbox/Checkbox'; +import '@enonic/lib-admin-ui/form/inputtype/combobox/ComboBox'; +import '@enonic/lib-admin-ui/form/inputtype/time/Date'; +import '@enonic/lib-admin-ui/form/inputtype/time/DateTime'; +import '@enonic/lib-admin-ui/form/inputtype/time/DateTimeRange'; +import '@enonic/lib-admin-ui/form/inputtype/time/Time'; +import '@enonic/lib-admin-ui/form/inputtype/number/Double'; +import '@enonic/lib-admin-ui/form/inputtype/number/Long'; +import '@enonic/lib-admin-ui/form/inputtype/geo/GeoPoint'; +import '@enonic/lib-admin-ui/form/inputtype/principal/PrincipalSelector'; +import '@enonic/lib-admin-ui/form/inputtype/radiobutton/RadioButton'; +import '@enonic/lib-admin-ui/form/inputtype/text/TextArea'; +import '@enonic/lib-admin-ui/form/inputtype/text/TextLine'; + import {UserAppPanel} from './app/UserAppPanel'; import {ChangeUserPasswordDialog} from './app/wizard/ChangeUserPasswordDialog'; import {Router} from './app/Router'; @@ -5,6 +23,7 @@ import {ShowNewPrincipalDialogEvent} from './app/browse/ShowNewPrincipalDialogEv import {NewPrincipalDialog} from './app/create/NewPrincipalDialog'; import {PrincipalServerEventsHandler} from './app/event/PrincipalServerEventsHandler'; import {UsersServerEventsListener} from './app/event/UsersServerEventsListener'; + import {Body} from '@enonic/lib-admin-ui/dom/Body'; import {Application} from '@enonic/lib-admin-ui/app/Application'; import {Path} from '@enonic/lib-admin-ui/rest/Path'; @@ -14,17 +33,24 @@ import {TabbedAppBar} from '@enonic/lib-admin-ui/app/bar/TabbedAppBar'; import {AppHelper} from '@enonic/lib-admin-ui/util/AppHelper'; import {i18nInit} from '@enonic/lib-admin-ui/util/MessagesInitializer'; import {CONFIG} from '@enonic/lib-admin-ui/util/Config'; -import {PrincipalSelector} from './app/inputtype/selector/PrincipalSelector'; import {InputTypeManager} from '@enonic/lib-admin-ui/form/inputtype/InputTypeManager'; import {Class} from '@enonic/lib-admin-ui/Class'; +import { + AuthApplicationSelector, + PrincipalSelector +} from './app/inputtype/'; + +const hasJQuery = Store.instance().has('$'); +if (!hasJQuery) { + Store.instance().set('$', $); +} + +StyleHelper.setCurrentPrefix(StyleHelper.ADMIN_PREFIX); const body = Body.get(); -// Dynamically import and execute all input types, since they are used -// on-demand, when parsing XML schemas and has not real usage in app -declare let require: { context: (directory: string, useSubdirectories: boolean, filter: RegExp) => void }; -const importAll = r => r.keys().forEach(r); -importAll(require.context('./app/inputtype', true, /^(?!\.[\/\\]ui).*/)); +InputTypeManager.register(new Class('AuthApplicationSelector', AuthApplicationSelector)); +InputTypeManager.register(new Class('PrincipalSelector', PrincipalSelector)); function getApplication(): Application { const assetsUri: string = CONFIG.getString('assetsUri'); @@ -88,5 +114,3 @@ function startApplication() { await i18nInit(CONFIG.getString('services.i18nUrl')); startApplication(); })(); - -InputTypeManager.register(new Class('PrincipalSelector', PrincipalSelector), true); diff --git a/src/main/resources/_static/tsconfig.json b/src/main/resources/_static/tsconfig.json new file mode 100644 index 000000000..3130191fc --- /dev/null +++ b/src/main/resources/_static/tsconfig.json @@ -0,0 +1,41 @@ +{ // https://www.typescriptlang.org/tsconfig + "compilerOptions": { + "baseUrl": ".", + "declaration": false, + "esModuleInterop": true, // Needed for the 'q' npm module + "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "target": "es5", + "moduleResolution": "node", + "lib": [ + "DOM", + "ES2020", + "ES2015.Promise" + ], + "paths": {}, + "rootDir": ".", + "skipLibCheck": true, + + // WARNING: Whether or not we want sourcemaps depends upon process.env.NODE_ENV, + // so this is set in tsup/static.ts + // "inlineSourceMap": false, + // "inlineSources": false, + // "sourceMap": true, + + // WARNING: This causes sourcemaps to fail! Must be set in tsup/static.ts instead + // "target": "ES2020", // Modern browsers + + "types": [ + "hasher", + "q", + "nanoid", + "owasp-password-strength-test" + ], + }, + "exclude": [ + "./**/*.d.ts" + ], + "include": [ + "./**/*.ts" + ], +} diff --git a/src/main/resources/assets/js/util/CryptoWorker.ts b/src/main/resources/_static/util/CryptoWorker.ts similarity index 62% rename from src/main/resources/assets/js/util/CryptoWorker.ts rename to src/main/resources/_static/util/CryptoWorker.ts index 49d391609..bb7af2a8c 100644 --- a/src/main/resources/assets/js/util/CryptoWorker.ts +++ b/src/main/resources/_static/util/CryptoWorker.ts @@ -6,8 +6,7 @@ export class CryptoWorker { static getCryptoWorker(): Worker { if (!CryptoWorker.cryptoWorker) { - const assetsUri: string = CONFIG.getString('assetsUri'); - CryptoWorker.cryptoWorker = new Worker(`${assetsUri}/js/crypto-worker.js`); + CryptoWorker.cryptoWorker = new Worker(CONFIG.getString('cryptoWorkerUrl')); } return CryptoWorker.cryptoWorker; } diff --git a/src/main/resources/assets/js/util/UrlHelper.ts b/src/main/resources/_static/util/UrlHelper.ts similarity index 100% rename from src/main/resources/assets/js/util/UrlHelper.ts rename to src/main/resources/_static/util/UrlHelper.ts diff --git a/src/main/resources/assets/js/worker/RSAKeysWorker.ts b/src/main/resources/_static/worker/RSAKeysWorker.ts similarity index 99% rename from src/main/resources/assets/js/worker/RSAKeysWorker.ts rename to src/main/resources/_static/worker/RSAKeysWorker.ts index 44c1efdcb..e492ea202 100644 --- a/src/main/resources/assets/js/worker/RSAKeysWorker.ts +++ b/src/main/resources/_static/worker/RSAKeysWorker.ts @@ -40,5 +40,3 @@ async function exportPublicKey(key) { self.onmessage = (e: MessageEvent) => { generateRSAKeys(); }; - -export {}; diff --git a/src/main/resources/admin/tools/main/main.html b/src/main/resources/admin/tools/main/main.html index d268093c2..39a52e750 100644 --- a/src/main/resources/admin/tools/main/main.html +++ b/src/main/resources/admin/tools/main/main.html @@ -1,6 +1,15 @@ + + + + + + + + + @@ -32,17 +41,14 @@ - - - - - - + + + diff --git a/src/main/resources/admin/tools/main/main.js b/src/main/resources/admin/tools/main/main.js deleted file mode 100644 index 3a5d2efa5..000000000 --- a/src/main/resources/admin/tools/main/main.js +++ /dev/null @@ -1,29 +0,0 @@ -const admin = require('/lib/xp/admin'); -const mustache = require('/lib/mustache'); -const portal = require('/lib/xp/portal'); -const i18n = require('/lib/xp/i18n'); - -function handleGet() { - const view = resolve('./main.html'); - - const params = { - assetsUri: portal.assetUrl({path: ''}), - appName: i18n.localize({ - key: 'admin.tool.displayName', - bundles: ['i18n/phrases'], - locale: admin.getLocales() - }), - launcherPath: admin.getLauncherPath(), - configServiceUrl: portal.serviceUrl({service: 'config'}) - }; - - return { - contentType: 'text/html', - body: mustache.render(view, params), - headers: { - 'Content-Security-Policy': 'default-src \'self\'; script-src \'self\' \'unsafe-eval\'; style-src \'self\' \'unsafe-inline\'; object-src \'none\'; img-src \'self\' data:' - } - }; -} - -exports.get = handleGet; diff --git a/src/main/resources/admin/tools/main/main.ts b/src/main/resources/admin/tools/main/main.ts new file mode 100644 index 000000000..4eb3d7e76 --- /dev/null +++ b/src/main/resources/admin/tools/main/main.ts @@ -0,0 +1,72 @@ +import type { + Request, + Response, +} from '/types'; + + +import { + getLauncherPath, + getLocales +} from '/lib/xp/admin'; +// @ts-expect-error Cannot find module '/lib/mustache' or its corresponding type declarations.ts(2307) +import mustache from '/lib/mustache'; +// @ts-expect-error Cannot find module '/lib/router' or its corresponding type declarations.ts(2307) +import Router from '/lib/router'; +import { + assetUrl, + serviceUrl +} from '/lib/xp/portal'; +import {localize} from '/lib/xp/i18n'; +import {immutableGetter, getAdminUrl, getAdminNodeModuleUrl} from '/lib/users/urlHelper'; +import { + // FILEPATH_MANIFEST_CJS, + FILEPATH_MANIFEST_NODE_MODULES, + GETTER_ROOT, +} from '/constants'; + +const TOOL_NAME = 'main'; +const VIEW = resolve('./main.html'); + +// @ts-expect-error A function with a name starting with an uppercase letter should only be used as a constructor +const router = Router(); + +router.all(`/${GETTER_ROOT}/{path:.+}`, (r: Request) => { + return immutableGetter(r); +}); + +function get(_request: Request): Response { + const params = { + appUsersBundleUrl: getAdminUrl({ + path: 'main.js' + }, TOOL_NAME), + assetsUri: assetUrl({path: ''}), + appName: localize({ + key: 'admin.tool.displayName', + bundles: ['i18n/phrases'], + locale: getLocales() + }), + configServiceUrl: serviceUrl({service: 'config'}), + dompurifyUrl: getAdminNodeModuleUrl('dompurify/dist/purify.min.js', TOOL_NAME), + signalsUrl: getAdminNodeModuleUrl('signals/dist/signals.min.js', TOOL_NAME), + hasherUrl: getAdminNodeModuleUrl('hasher/dist/js/hasher.min.js', TOOL_NAME), + jqueryUrl: getAdminNodeModuleUrl('jquery/dist/jquery.min.js', TOOL_NAME), + jqueryUiUrl: getAdminNodeModuleUrl('jquery-ui-dist/jquery-ui.min.js', TOOL_NAME), + mousetrapUrl: getAdminNodeModuleUrl('mousetrap/mousetrap.min.js', TOOL_NAME), + owaspUrl: getAdminNodeModuleUrl('owasp-password-strength-test/owasp-password-strength-test.js', TOOL_NAME), + qUrl: getAdminNodeModuleUrl('q/q.js', TOOL_NAME), + legacySlickgridUrl: getAdminNodeModuleUrl('@enonic/legacy-slickgrid/index.js', TOOL_NAME), + launcherPath: getLauncherPath(), + }; + + return { + contentType: 'text/html', + body: mustache.render(VIEW, params), + headers: { + 'content-security-policy': 'default-src \'self\'; script-src \'self\' \'unsafe-eval\'; style-src \'self\' \'unsafe-inline\'; object-src \'none\'; img-src \'self\' data:' + } + }; +} + +router.get('/?', (r: Request) => get(r)); + +export const all = (r: Request) => router.dispatch(r); diff --git a/src/main/resources/assets/styles/main.less b/src/main/resources/assets/styles/main.less index 53da5cfce..7cf545bc8 100644 --- a/src/main/resources/assets/styles/main.less +++ b/src/main/resources/assets/styles/main.less @@ -1,6 +1,8 @@ @_CLS_PREFIX: xp-admin-; -@import "~enonic-admin-artifacts"; +//@import "~enonic-admin-artifacts"; +@import 'enonic-admin-artifacts/index'; + @import "../icons/icons"; @import "animation"; @import "create/new-principal-dialog"; diff --git a/src/main/resources/assets/tsconfig.json b/src/main/resources/assets/tsconfig.json new file mode 100644 index 000000000..e495448da --- /dev/null +++ b/src/main/resources/assets/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "esModuleInterop": true, // Needed for the 'q' npm module + "module": "commonjs", + "lib": [ + "DOM", + "ES2020", + "ES2015.Promise" + ], + "moduleResolution": "node", + "paths": {}, + "rootDir": ".", + "skipLibCheck": true, + "target": "es5", // Modern browsers + "types": [ + "hasher", + "q", + "nanoid", + "owasp-password-strength-test" + ], + }, + "include": [ + "./**/*.ts" + ], +} diff --git a/src/main/resources/constants.ts b/src/main/resources/constants.ts new file mode 100644 index 000000000..fcc2a3f03 --- /dev/null +++ b/src/main/resources/constants.ts @@ -0,0 +1,4 @@ +export const GETTER_ROOT = '_static'; +export const FILEPATH_MANIFEST_CJS = `/${GETTER_ROOT}/manifest.cjs.json`; +// export const FILEPATH_MANIFEST_ESM = `/${GETTER_ROOT}/manifest.esm.json`; +export const FILEPATH_MANIFEST_NODE_MODULES = `/${GETTER_ROOT}/node_modules-manifest.json`; diff --git a/src/main/resources/lib/groups.js b/src/main/resources/lib/groups.js deleted file mode 100644 index 97bf5df10..000000000 --- a/src/main/resources/lib/groups.js +++ /dev/null @@ -1,73 +0,0 @@ -var common = require('./common'); -var principals = require('./principals'); -var authLib = require('/lib/xp/auth'); - -exports.create = function createGroup(params) { - var key = common.required(params, 'key'); - var idProviderKey = common.idProviderFromKey(key); - var name = common.nameFromKey(key); - var displayName = common.required(params, 'displayName'); - - var createdGroup = authLib.createGroup({ - idProvider: idProviderKey, - name: name, - displayName: displayName, - description: params.description - }); - - var ms = params.members; - if (ms && ms.length > 0) { - principals.addMembers(key, ms); - } - - populateMembers(createdGroup); - - principals.updateMemberships(key, params.memberships); - - populateMemberships(createdGroup); - - return createdGroup; -}; - -exports.update = function updateGroup(params) { - var key = common.required(params, 'key'); - var displayName = common.required(params, 'displayName'); - - var updatedGroup = authLib.modifyGroup({ - key: key, - editor: function(group) { - var newGroup = group; - newGroup.displayName = displayName; - newGroup.description = params.description; - return newGroup; - } - }); - - principals.updateMembers(key, params.addMembers, params.removeMembers); - - populateMembers(updatedGroup); - - principals.updateMemberships( - key, - params.addMemberships, - params.removeMemberships - ); - - populateMemberships(updatedGroup); - - return updatedGroup; -}; - -function populateMembers(group) { - // eslint-disable-next-line no-param-reassign - group.member = principals - .getMembers(group.key || group._id) - .map(function(member) { - return member.key; - }); -} - -function populateMemberships(group) { - // eslint-disable-next-line no-param-reassign - group.memberships = principals.getMemberships(group.key || group._id); -} diff --git a/src/main/resources/lib/idproviders.js b/src/main/resources/lib/idproviders.js deleted file mode 100644 index a559cd9ea..000000000 --- a/src/main/resources/lib/idproviders.js +++ /dev/null @@ -1,52 +0,0 @@ -var common = require('./common'); -var authLib = require('./auth'); - -var DEFAULT_KEY = 'default'; - -module.exports = { - getByKey: function(key) { - return authLib.getIdProvider({key: key}); - }, - list: authLib.getIdProviders, - getDefault: function () { - return {key: 'default'}; - }, - create: function(params) { - var name = common.required(params, 'key'); - - return authLib.createIdProvider({ - name: common.prettifyName(name), - displayName: params.displayName, - description: params.description, - idProviderConfig: params.idProviderConfig, - permissions: params.permissions || [] - }); - }, - update: function(params) { - var key = common.required(params, 'key'); - - return authLib.modifyIdProvider({ - key: key, - editor: function (idProvider) { - var newIdProvider = idProvider; - newIdProvider.displayName = params.displayName; - newIdProvider.description = params.description; - newIdProvider.idProviderConfig = params.idProviderConfig; - return newIdProvider; - }, - permissions: params.permissions || [] - }); - }, - delete: function(keys) { - return authLib.deleteIdProviders({keys: keys}); - }, - getIdProviderMode: function(applicationKey) { - return authLib.getIdProviderMode({key:applicationKey}); - }, - getPermissions: function(key) { - if (key === DEFAULT_KEY) { - return authLib.defaultPermissions(); - } - return authLib.getPermissions({key: key}); - } -}; diff --git a/src/main/resources/lib/principals.js b/src/main/resources/lib/principals.js deleted file mode 100644 index dab3adc72..000000000 --- a/src/main/resources/lib/principals.js +++ /dev/null @@ -1,154 +0,0 @@ -var common = require('./common'); -var authLib = require('/lib/xp/auth'); - -module.exports = { - getByKeys: function (keys) { - var noKeys = keys == null || (keys instanceof Array && keys.length === 0); - - // users and groups have their keys as _id, but roles have them stored as key - var principals = noKeys ? [] : common.queryAll({ - query: - common.createQueryByField('_id', keys) + - ' OR ' + - common.createQueryByField('key', keys) - }).hits; - - return keys instanceof Array ? principals : common.singleOrArray(principals); - }, - getMemberships: function (key, transitive) { - return authLib.getMemberships(key, transitive); - }, - addMemberships: function(key, memberships) { - var addMms = [].concat(memberships).map(function(current) { - module.exports.addMembers(current, key); - return current; - }); - return addMms; - }, - removeMemberships: function(key, memberships) { - var removeMms = [].concat(memberships).map(function(current) { - module.exports.removeMembers(current, key); - return current; - }); - return removeMms; - }, - updateMemberships: function(key, addMms, removeMms) { - if (addMms && addMms.length > 0) { - module.exports.addMemberships(key, addMms); - } - if (removeMms && removeMms.length > 0) { - module.exports.removeMemberships(key, removeMms); - } - }, - getMembers: function(key) { - return authLib.getMembers(key); - }, - addMembers: function(key, members) { - try { - authLib.addMembers(key, members); - } catch (e) { - log.error( - 'Could not add members ' + - JSON.stringify(members) + - ' to [' + - key + - ']', - e - ); - } - return members; - }, - removeMembers: function(key, members) { - try { - authLib.removeMembers(key, members); - } catch (e) { - log.error( - 'Could not remove members ' + - JSON.stringify(members) + - ' from [' + - key + - ']', - e - ); - } - return members; - }, - updateMembers: function(key, addMs, removeMs) { - if (addMs && addMs.length > 0) { - module.exports.addMembers(key, addMs); - } - if (removeMs && removeMs.length > 0) { - module.exports.removeMembers(key, removeMs); - } - }, - list: function (idProviderKey, types, query, start, count, sort) { - return common.queryAll({ - query: createPrincipalQuery(idProviderKey, types, query), - start: start, - count: count, - sort: sort - }); - }, - delete: function(keys) { - return keys.map(function(key) { - try { - var deleted = authLib.deletePrincipal(key); - return { - key: key, - deleted: deleted, - reason: deleted ? '' : 'Principal [' + key + '] could not be deleted' - }; - } catch (e) { - return { - key: key, - deleted: false, - reason: e.message - }; - } - }); - }, - Type: common.PrincipalType -}; - -function createPrincipalQuery(idProviderKey, types, query) { - var q = query ? textQuery(query) : ''; - if (!types) { - q += (q ? ' AND ' : '') + idProviderQuery(idProviderKey); - } else { - var tq = ''; - types.forEach(function(type, index) { - var add; - switch (type) { - case common.PrincipalType.ROLE: - add = rolesQuery(); - break; - case common.PrincipalType.GROUP: - case common.PrincipalType.USER: - add = idProviderQuery(idProviderKey, type); - break; - default: // none - } - tq += (index > 0 ? ' OR ' : '') + add; - }); - q += q ? ' AND (' + tq + ')' : tq; - } - return q; -} - -function textQuery(query) { - var q = '"_allText,displayName","' + query + '","AND"'; - return '(fulltext(' + q + ') OR ngram(' + q + '))'; -} - -function rolesQuery() { - return '_parentPath="/identity/roles"'; -} - -function idProviderQuery(key, type) { - return ( - '(userStoreKey="' + - key + - '"' + - (type ? 'AND principalType="' + type + '")' : ')') - ); -} diff --git a/src/main/resources/lib/useritems.js b/src/main/resources/lib/useritems.js deleted file mode 100644 index 735849d0f..000000000 --- a/src/main/resources/lib/useritems.js +++ /dev/null @@ -1,87 +0,0 @@ -var common = require('./common'); - -module.exports = { - list: function (types, query, itemIds, start, count) { - var result = common.queryAll({ - query: createUserItemsQuery(query, types, itemIds), - start: start, - count: count, - aggregations: { - principalType: { - terms: { - field: 'principalType' - } - } - } - }); - - processIdProviderAggregation(result); - - return result; - }, - Type: common.UserItemType -}; - -function processIdProviderAggregation(result) { - if (!result || !result.aggregations || !result.aggregations.principalType || !result.aggregations.principalType.buckets) { - return; - } - - var aggregationBuckets = result.aggregations.principalType.buckets; - - var principalsCount = 0; - aggregationBuckets.forEach(function (bucket) { - principalsCount += bucket.docCount; - }); - - var idProvidersCount = result.total - principalsCount; - - if (idProvidersCount > 0) { - aggregationBuckets.push({key: 'id_provider', docCount: '' + idProvidersCount}); - } -} - -function createUserItemsQuery(query, types, itemIds) { - var q = createTypesQuery(types); - if (query) { - q = createTextQuery(query) + ' AND ' + q; - } - - if (itemIds && itemIds.length > 0) { - var itemsIdsQuery = ''; - - itemIds.forEach(function (id, index) { - itemsIdsQuery += (index > 0 ? ' OR ' : '') + '_id="' + id + '" OR _name="' + id + '"'; - }); - - q += q ? ' AND (' + itemsIdsQuery + ')' : itemsIdsQuery; - } - - return q; -} - -function createTextQuery(query) { - var q = '"_allText,displayName","' + query + '","AND"'; - return '(fulltext(' + q + ') OR ngram(' + q + '))'; -} - -function createTypesQuery(types) { - var newTypes = types || common.UserItemType.all(); - var query = newTypes - .map(function(type) { - switch (type) { - case common.UserItemType.ROLE: - case common.UserItemType.GROUP: - case common.UserItemType.USER: - return 'principalType = "' + type + '"'; - case common.UserItemType.ID_PROVIDER: - return '(_parentPath = "/identity" AND _path != "/identity/roles")'; - default: - return null; - } - }) - .filter(function(typeQuery) { - return typeQuery != null; - }); - return '(' + query.join(' OR ') + ')'; -} diff --git a/src/main/resources/lib/users.js b/src/main/resources/lib/users.js deleted file mode 100644 index 438fa6b00..000000000 --- a/src/main/resources/lib/users.js +++ /dev/null @@ -1,126 +0,0 @@ -var common = require('./common'); -var principals = require('./principals'); -var authLib = require('/lib/xp/auth'); -var utilLib = require('/lib/util'); - -exports.create = function createUser(params) { - var key = common.required(params, 'key'); - var idProviderKey = common.idProviderFromKey(key); - var name = common.required(params, 'login'); - var displayName = common.required(params, 'displayName'); - var email = common.required(params, 'email'); - - var createdUser = authLib.createUser({ - idProvider: idProviderKey, - name: name, - displayName: displayName, - email: email, - }); - - var mms = params.memberships; - if (mms && mms.length > 0) { - principals.addMemberships(key, mms); - } - - var password = common.required(params, 'password'); - exports.updatePwd(key, password); - - populateMemberships(createdUser); - - return createdUser; -}; - -exports.update = function updateUser(params) { - var key = common.required(params, 'key'); - var displayName = common.required(params, 'displayName'); - - var updatedUser = authLib.modifyUser({ - key: key, - editor: function (user) { - var newUser = user; - newUser.displayName = displayName; - newUser.email = params.email; - newUser.login = params.login; - return newUser; - } - }); - - principals.updateMemberships( - key, - params.addMemberships, - params.removeMemberships - ); - - populateMemberships(updatedUser); - - return updatedUser; -}; - -exports.updatePwd = function (key, pwd) { - var password = pwd.replace(/\s/g, ''); - try { - authLib.changePassword({ - userKey: key, - password: password - }); - return true; - } catch (e) { - log.error('Could not update password for [' + key + ']'); - return false; - } -}; - -exports.removePublicKey = function (params) { - const userKey = common.required(params, 'userKey'); - const kid = common.required(params, 'kid'); - - const updatedProfile = authLib.modifyProfile({ - key: userKey, - editor: function (profile) { - const publicKeys = utilLib.forceArray(profile.publicKeys); - profile.publicKeys = publicKeys.filter(key => key.kid !== kid); - return profile; - } - }); - - return utilLib.forceArray(updatedProfile.publicKeys).filter(key => key.kid === kid).length === 0; -}; - -exports.addPublicKey = function (params) { - const userKey = common.required(params, 'userKey'); - const publicKey = common.required(params, 'publicKey'); - const label = params.label; - - const kidGenerator = __.newBean('com.enonic.xp.app.users.handler.KidGeneratorHandler'); - const kid = kidGenerator.generateKid(publicKey); - - const updatedProfile = authLib.modifyProfile({ - key: userKey, - editor: function (profile) { - const publicKeys = utilLib.forceArray(profile.publicKeys); - - const existingKeys = publicKeys.filter(key => key.kid === kid); - if (existingKeys.length > 0) { - throw new Error(`Public key with kid ${kid} already exists for user ${userKey}`); - } - - publicKeys.push({ - kid, - publicKey, - algorithm: 'RSA', - label, - creationTime: new Date().toISOString(), - }); - - profile.publicKeys = publicKeys; - return profile; - } - }); - - return utilLib.forceArray(updatedProfile.publicKeys).filter(key => key.kid === kid)[0]; -}; - -function populateMemberships(user) { - // eslint-disable-next-line no-param-reassign - user.memberships = principals.getMemberships(user.key || user._id); -} diff --git a/src/main/resources/lib/auth.js b/src/main/resources/lib/users/auth.ts similarity index 77% rename from src/main/resources/lib/auth.js rename to src/main/resources/lib/users/auth.ts index 7d72e56d3..a3abe2e7c 100644 --- a/src/main/resources/lib/auth.js +++ b/src/main/resources/lib/users/auth.ts @@ -1,6 +1,6 @@ -var authLib = require('/lib/xp/auth'); +import {hasRole} from '/lib/xp/auth'; -var Roles = { +const Roles = { ADMIN: 'system.admin', EVERYONE: 'system.everyone', AUTHENTICATED: 'system.authenticated', @@ -13,7 +13,7 @@ var Roles = { }; function required(params, name) { - var value = params[name]; + const value = params[name]; if (value === undefined) { throw "Parameter '" + name + "' is required"; } @@ -31,21 +31,21 @@ function nullOrValue(value) { * @param {string} params.key IdProvider key. * @returns {object} the id provider specified, or null if it doesn't exist. */ -exports.getIdProvider = function (params) { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetIdProviderHandler'); +export function getIdProvider(params) { + const bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetIdProviderHandler'); bean.setIdProviderKey(required(params, 'key')); return __.toNativeObject(bean.getIdProvider()); -}; +} /** * Returns the list of all the id providers. * * @returns {object[]} Array of id providers. */ -exports.getIdProviders = function () { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetIdProvidersHandler'); +export function getIdProviders() { + let bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetIdProvidersHandler'); return __.toNativeObject(bean.getIdProviders()); -}; +} /** * Returns a string representation of the ID provider mode. @@ -54,11 +54,11 @@ exports.getIdProviders = function () { * @param {string} params.key Application key of the ID Provider application. * @returns {string} The ID provider mode. */ -exports.getIdProviderMode = function (params) { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetIdProviderModeHandler'); +export function getIdProviderMode(params) { + let bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetIdProviderModeHandler'); bean.setApplicationKey(required(params, 'key')); return bean.getIdProviderMode(); -}; +} /** * Returns the id provider permissions. @@ -67,21 +67,21 @@ exports.getIdProviderMode = function (params) { * @param {string} params.key Key of the id provider to fetch permissions for. * @returns {object[]} Returns the list of principals with access level. */ -exports.getPermissions = function (params) { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetPermissionsHandler'); +export function getPermissions(params) { + let bean = __.newBean('com.enonic.xp.app.users.lib.auth.GetPermissionsHandler'); bean.setIdProviderKey(required(params, 'key')); return __.toNativeObject(bean.getPermissions()); -}; +} /** * Returns default id provider permissions. * * @returns {object[]} Returns the list of principals with access level. */ -exports.defaultPermissions = function () { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.DefaultPermissionsHandler'); +export function defaultPermissions() { + let bean = __.newBean('com.enonic.xp.app.users.lib.auth.DefaultPermissionsHandler'); return __.toNativeObject(bean.defaultPermissions()); -}; +} /** * Creates an id provider. @@ -92,8 +92,8 @@ exports.defaultPermissions = function () { * @param {object} [params.idProviderConfig] ID Provider configuration. * @param {object} [params.permissions] Id provider permissions. */ -exports.createIdProvider = function (params) { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.CreateIdProviderHandler'); +export function createIdProvider(params) { + let bean = __.newBean('com.enonic.xp.app.users.lib.auth.CreateIdProviderHandler'); bean.setName(required(params, 'name')); bean.setDisplayName(nullOrValue(params.displayName)); @@ -102,7 +102,7 @@ exports.createIdProvider = function (params) { bean.setPermissions(__.toScriptValue(params.permissions)); return __.toNativeObject(bean.createIdProvider()); -}; +} /** * Update an id provider. @@ -113,15 +113,15 @@ exports.createIdProvider = function (params) { * @param {object} [params.permissions] Id provider permissions. * @returns {object} The updated id provider. */ -exports.modifyIdProvider = function (params) { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.ModifyIdProviderHandler'); +export function modifyIdProvider(params) { + let bean = __.newBean('com.enonic.xp.app.users.lib.auth.ModifyIdProviderHandler'); bean.setIdProviderKey(required(params, 'key')); bean.setEditor(__.toScriptValue(required(params, 'editor'))); bean.setPermissions(__.toScriptValue(params.permissions)); return __.toNativeObject(bean.modifyIdProvider()); -}; +} /** * Delete the id provider by the key. @@ -130,12 +130,12 @@ exports.modifyIdProvider = function (params) { * @param {string} params.keys Array of id provider keys to delete. * @returns {object} the id providers specified, or null if it doesn't exist. */ -exports.deleteIdProviders = function (params) { - var bean = __.newBean('com.enonic.xp.app.users.lib.auth.DeleteIdProvidersHandler'); +export function deleteIdProviders(params) { + let bean = __.newBean('com.enonic.xp.app.users.lib.auth.DeleteIdProvidersHandler'); bean.setIdProviderKeys(__.toScriptValue(required(params, 'keys'))); return __.toNativeObject(bean.deleteIdProviders()); -}; +} -exports.isAdmin = function() { - return authLib.hasRole(Roles.ADMIN); -}; +export function isAdmin() { + return hasRole(Roles.ADMIN); +} diff --git a/src/main/resources/lib/common.js b/src/main/resources/lib/users/common.ts similarity index 53% rename from src/main/resources/lib/common.js rename to src/main/resources/lib/users/common.ts index a6ad1a82c..d46d6783c 100644 --- a/src/main/resources/lib/common.js +++ b/src/main/resources/lib/users/common.ts @@ -1,51 +1,56 @@ -var nodeLib = require('/lib/xp/node'); -var namePrettyfier = Java.type('com.enonic.xp.name.NamePrettyfier'); +import type { + Aggregations, + QueryNodeParams +} from '/lib/xp/node'; -var REPO_NAME = 'system-repo'; -var REPO_BRANCH = 'master'; -var MAX_COUNT = -1; -var SYSTEM_ADMIN = 'role:system.admin'; -var UserItemType = exports.UserItemType = { - ROLE: 'ROLE', - USER: 'USER', - GROUP: 'GROUP', - ID_PROVIDER: 'ID_PROVIDER' -}; -exports.UserItemType.all = function () { - return [ - UserItemType.ROLE, - UserItemType.USER, - UserItemType.GROUP, - UserItemType.ID_PROVIDER - ]; -}; +import {connect} from '/lib/xp/node'; + + +const namePrettyfier = Java.type('com.enonic.xp.name.NamePrettyfier'); + +const REPO_NAME = 'system-repo'; +const REPO_BRANCH = 'master'; +const MAX_COUNT = -1; +const SYSTEM_ADMIN = 'role:system.admin'; -var PrincipalType = exports.PrincipalType = { +export const enum UserItemType { + ROLE = 'ROLE', + USER = 'USER', + GROUP = 'GROUP', + ID_PROVIDER = 'ID_PROVIDER' +} + +export const ALL_USER_ITEM_TYPES = [ + UserItemType.ROLE, + UserItemType.USER, + UserItemType.GROUP, + UserItemType.ID_PROVIDER +]; + +export const PrincipalType = { ROLE: 'ROLE', USER: 'USER', - GROUP: 'GROUP' -}; -exports.PrincipalType.all = function () { - return [PrincipalType.ROLE, PrincipalType.USER, PrincipalType.GROUP]; + GROUP: 'GROUP', + all: () => { + return [PrincipalType.ROLE, PrincipalType.USER, PrincipalType.GROUP]; + } }; -exports.singleOrArray = function (value) { +export function singleOrArray(value) { return value && value.length === 1 ? value[0] : value; -}; +} -function isString(str) { +export function isString(str) { return (typeof str === 'string') || (str instanceof String); } -exports.isString = isString; - -exports.refresh = function (repo) { +export function refresh(repo) { newConnection(repo).refresh('SEARCH'); -}; +} -exports.required = function (params, name, skipTrimming) { - var value = params[name]; +export function required(params, name, skipTrimming?: boolean) { + let value = params[name]; if (value === undefined || value === null) { throw new Error("Parameter '" + name + "' is required"); } @@ -53,25 +58,26 @@ exports.required = function (params, name, skipTrimming) { return value.trim(); } return value; -}; +} -exports.default = function (params, name, defaultValue) { - var value = params[name]; +export default function (params, name, defaultValue) { + let value = params[name]; if (value === undefined || value === null) { return defaultValue; } return value; -}; +} -exports.getByIds = function (ids, repo) { +export function getByIds(ids, repo?: string) { return newConnection(repo).get(ids); -}; +} -exports.delete = function (ids, repo) { +function _delete(ids, repo) { return newConnection(repo).delete(ids); -}; +} +export {_delete as delete}; -exports.keysToPaths = function (keys) { +export function keysToPaths(keys) { return keys.map(function (key) { if (isIdProvider(key)) { return '/identity/' + idProviderFromKey(key); @@ -97,29 +103,29 @@ exports.keysToPaths = function (keys) { } return ''; }); -}; +} -exports.isUser = function isUser(key) { - return exports.typeFromKey(key).toUpperCase() === PrincipalType.USER; -}; +export function isUser(key) { + return typeFromKey(key).toUpperCase() === PrincipalType.USER; +} -exports.isGroup = function isGroup(key) { - return exports.typeFromKey(key).toUpperCase() === PrincipalType.GROUP; -}; +export function isGroup(key) { + return typeFromKey(key).toUpperCase() === PrincipalType.GROUP; +} -exports.isRole = function isRole(key) { - return exports.typeFromKey(key).toUpperCase() === PrincipalType.ROLE; -}; +export function isRole(key) { + return typeFromKey(key).toUpperCase() === PrincipalType.ROLE; +} -exports.isIdProvider = function isIdProvider(key) { +export function isIdProvider(key) { return splitKey(key).length === 1; -}; +} -exports.isSystemAdmin = function isSystemAdmin(key) { +export function isSystemAdmin(key) { return key === SYSTEM_ADMIN; } -exports.createQueryByField = function (field, values) { +export function createQueryByField(field, values) { if (!values || !field) { return null; } @@ -127,7 +133,7 @@ exports.createQueryByField = function (field, values) { return String(field) + ' IN (' + serializeValues(values) + ')'; } return String(field) + '=' + serializeValue(values); -}; +} function serializeValues(values) { return values ? values.map(serializeValue).join(',') : ''; @@ -137,8 +143,8 @@ function serializeValue(value) { return typeof value === 'string' ? '"' + value + '"' : value; } -exports.extensionFromMimeType = function (mimeType) { - var ext = ''; +export function extensionFromMimeType(mimeType) { + let ext = ''; if (mimeType.indexOf('image/png') > -1) { ext = '.png'; } else if ( @@ -152,104 +158,106 @@ exports.extensionFromMimeType = function (mimeType) { ext = '.svg'; } return ext; -}; +} function splitKey(key) { - var parts = key && key.split(':'); - var isRoleType = + let parts = key && key.split(':'); + let isRoleType = parts && parts.length === 2 && parts[0].toUpperCase() === PrincipalType.ROLE; - var isIdProviderType = parts && parts.length === 1; + let isIdProviderType = parts && parts.length === 1; if (!isRoleType && !isIdProviderType && !(parts && parts.length === 3)) { throw new Error('Invalid principal key [' + key + ']'); } return parts; } -exports.idProviderFromKey = function idProviderFromKey(key) { - var parts = splitKey(key); +export function idProviderFromKey(key) { + let parts = splitKey(key); if (parts[0].toUpperCase() === PrincipalType.ROLE) { throw new Error( "Principal keys of type role can't have idprovider [" + key + ']' ); } return parts.length === 1 ? parts[0] : parts[1]; -}; +} -exports.nameFromKey = function nameFromKey(key) { - var parts = splitKey(key); +export function nameFromKey(key) { + let parts = splitKey(key); if (parts.length === 1) { throw new Error("Key don't have name [" + key + ']'); } return parts[0].toUpperCase() !== PrincipalType.ROLE ? parts[2] : parts[1]; -}; +} -exports.typeFromKey = function typeFromKey(key) { - var parts = splitKey(key); +export function typeFromKey(key) { + let parts = splitKey(key); if (parts.length === 1) { throw new Error("Key don't have type [" + key + ']'); } return parts[0]; -}; +} -exports.prettifyName = function (text) { +export function prettifyName(text) { return namePrettyfier.create(text); -}; +} -exports.querySingle = function (query, repo) { - var results = queryAll({ +export function querySingle(query, repo) { + let results = queryAll({ start: 0, count: 1, query: query }, repo); return results.total === 1 ? results.hits[0] : null; -}; +} -exports.create = function (params, repo) { +export function create(params, repo) { return newConnection(repo).create(params); -}; +} -exports.update = function (params, repo) { +export function update(params, repo) { return newConnection(repo).modify(params); -}; +} -exports.queryAll = function queryAll(params, repo) { - var start = params.start || 0; - var count = params.count == null ? MAX_COUNT : params.count; - - var repoConn = newConnection(repo); - var queryResult = repoConn.query({ - start: start, - count: count, - query: params.query, - sort: params.sort, - aggregations: params.aggregations +export function queryAll({ + aggregations, + count, + query, + sort, + start = 0 +}: { + aggregations?: AggregationInput + count?: number + query?: QueryNodeParams['query'] + sort?: QueryNodeParams['sort'] + start?: number +}, repo?: string) { + const finalCount = count == null ? MAX_COUNT : count; + const repoConn = newConnection(repo); + const queryResult = repoConn.query({ + start, + count: finalCount, + query, + sort, + aggregations }); - - var hits = []; - if (queryResult.count > 0) { - var ids = queryResult.hits.map(function (hit) { - return hit.id; - }); - hits = repoConn.get(ids); - } - + const hits = queryResult.count > 0 + ? [].concat(repoConn.get(queryResult.hits.map((hit) => hit.id))) + : []; return { total: queryResult.total, - start: start, - count: count, - hits: [].concat(hits), + start, + count, + hits, aggregations: queryResult.aggregations }; -}; +} -function newConnection(repo, branch) { - return nodeLib.connect({ +export function newConnection(repo: string, branch?: string) { + return connect({ repoId: repo || REPO_NAME, branch: branch || REPO_BRANCH }); } - -exports.newConnection = newConnection; diff --git a/src/main/resources/lib/users/groups.ts b/src/main/resources/lib/users/groups.ts new file mode 100644 index 000000000..5acc325ad --- /dev/null +++ b/src/main/resources/lib/users/groups.ts @@ -0,0 +1,85 @@ +import { + idProviderFromKey, + nameFromKey, + required +} from './common'; +import { + addMembers, + getMembers, + getMemberships, + updateMembers, + updateMemberships +} from './principals'; +import { + createGroup, + modifyGroup +} from '/lib/xp/auth'; + +export function create(params) { + let key = required(params, 'key'); + let idProviderKey = idProviderFromKey(key); + let name = nameFromKey(key); + let displayName = required(params, 'displayName'); + + let createdGroup = createGroup({ + idProvider: idProviderKey, + name: name, + displayName: displayName, + description: params.description + }); + + let ms = params.members; + if (ms && ms.length > 0) { + addMembers(key, ms); + } + + populateMembers(createdGroup); + + updateMemberships(key, params.memberships); + + populateMemberships(createdGroup); + + return createdGroup; +} + +export function update(params) { + let key = required(params, 'key'); + let displayName = required(params, 'displayName'); + + let updatedGroup = modifyGroup({ + key: key, + editor: function (group) { + let newGroup = group; + newGroup.displayName = displayName; + newGroup.description = params.description; + return newGroup; + } + }); + + updateMembers(key, params.addMembers, params.removeMembers); + + populateMembers(updatedGroup); + + updateMemberships( + key, + params.addMemberships, + params.removeMemberships + ); + + populateMemberships(updatedGroup); + + return updatedGroup; +} + +function populateMembers(group) { + // eslint-disable-next-line no-param-reassign + group.member = getMembers(group.key || group._id) + .map(function (member) { + return member.key; + }); +} + +function populateMemberships(group) { + // eslint-disable-next-line no-param-reassign + group.memberships = getMemberships(group.key || group._id); +} diff --git a/src/main/resources/lib/users/idproviders.ts b/src/main/resources/lib/users/idproviders.ts new file mode 100644 index 000000000..39e178290 --- /dev/null +++ b/src/main/resources/lib/users/idproviders.ts @@ -0,0 +1,70 @@ +import { + prettifyName, + required +} from './common'; +import { + createIdProvider, + defaultPermissions, + deleteIdProviders, + getIdProvider, + getIdProviderMode as _getIdProviderMode, + getIdProviders, + getPermissions as _getPermissions, + modifyIdProvider +} from './auth'; + +const DEFAULT_KEY = 'default'; + +export function getByKey(key) { + return getIdProvider({key: key}); +} + +export const list = getIdProviders; + +export function getDefault() { + return {key: 'default'}; +} + +export function create(params) { + let name = required(params, 'key'); + + return createIdProvider({ + name: prettifyName(name), + displayName: params.displayName, + description: params.description, + idProviderConfig: params.idProviderConfig, + permissions: params.permissions || [] + }); +} + +export function update(params) { + let key = required(params, 'key'); + + return modifyIdProvider({ + key: key, + editor: function (idProvider) { + let newIdProvider = idProvider; + newIdProvider.displayName = params.displayName; + newIdProvider.description = params.description; + newIdProvider.idProviderConfig = params.idProviderConfig; + return newIdProvider; + }, + permissions: params.permissions || [] + }); +} + +function _delete(keys) { + return deleteIdProviders({keys: keys}); +} +export {_delete as delete}; + +export function getIdProviderMode(applicationKey) { + return _getIdProviderMode({key:applicationKey}); +} + +export function getPermissions(key) { + if (key === DEFAULT_KEY) { + return defaultPermissions(); + } + return _getPermissions({key: key}); +} diff --git a/src/main/resources/lib/users/ioResource.ts b/src/main/resources/lib/users/ioResource.ts new file mode 100644 index 000000000..7c378d59d --- /dev/null +++ b/src/main/resources/lib/users/ioResource.ts @@ -0,0 +1,38 @@ +import { + getResource, + readText +} from '/lib/xp/io'; + + +export function readResource(filename: string) { + const resource = getResource(filename); + if (!resource || !resource.exists()) { + throw new Error(`Empty or not found: ${filename}`); + } + let content: string; + try { + content = readText(resource.getStream()); + // log.debug('readResource: filename:%s content:%s', filename, content); + } catch (e) { + log.error(e.message); + throw new Error(`Couldn't read resource: ${filename}`); + } + return content; +} + +function jsonParseResource(filename: string) { + const content = readResource(filename); + let obj: object; + try { + obj = JSON.parse(content); + log.debug('jsonParseResource obj:%s', JSON.stringify(obj, null, 4)); + } catch (e) { + log.error(e.message); + log.info("Content dump from '" + filename + "':\n" + content); + throw new Error(`couldn't parse as JSON content of resource: ${filename}`); + } + return obj; +} + + +export default jsonParseResource; diff --git a/src/main/resources/lib/permissionReports.js b/src/main/resources/lib/users/permissionReports.ts similarity index 52% rename from src/main/resources/lib/permissionReports.js rename to src/main/resources/lib/users/permissionReports.ts index 46f18d71d..a344ce7ff 100644 --- a/src/main/resources/lib/permissionReports.js +++ b/src/main/resources/lib/users/permissionReports.ts @@ -1,18 +1,23 @@ -var principals = require('./principals'); -var common = require('./common'); - -var PERMISSIONS = ['READ', 'CREATE', 'MODIFY', 'DELETE', 'PUBLISH', 'READ_PERMISSIONS', 'WRITE_PERMISSIONS']; - -function generateReport(principalKey, repositoryId, branch) { - var principalKeys = getPrincipalKeys(principalKey); - var isSystemAdmin = hasSystemAdminRole(principalKeys); - var filters = isSystemAdmin ? null : makeRepoNodesQueryFilters(principalKeys); - var nodes = queryRepositoryNodes(repositoryId, branch, filters); - - var reportLine = 'Path, Read, Create, Modify, Delete, Publish, ReadPerm., WritePerm.'; - var tempFile = Java.type('java.io.File').createTempFile("perm-report-", ".csv"); - var Files = Java.type('com.google.common.io.Files'); - var charset = Java.type('java.nio.charset.Charset').forName("UTF-8"); +import {getMemberships} from './principals'; +import { + isRole, + isSystemAdmin, + isUser, + newConnection +} from './common'; + +const PERMISSIONS = ['READ', 'CREATE', 'MODIFY', 'DELETE', 'PUBLISH', 'READ_PERMISSIONS', 'WRITE_PERMISSIONS']; + +export function generateReport(principalKey, repositoryId, branch) { + let principalKeys = getPrincipalKeys(principalKey); + let isSystemAdmin = hasSystemAdminRole(principalKeys); + let filters = isSystemAdmin ? null : makeRepoNodesQueryFilters(principalKeys); + let nodes = queryRepositoryNodes(repositoryId, branch, filters); + + let reportLine = 'Path, Read, Create, Modify, Delete, Publish, ReadPerm., WritePerm.'; + let tempFile = Java.type('java.io.File').createTempFile('perm-report-', '.csv'); + let Files = Java.type('com.google.common.io.Files'); + let charset = Java.type('java.nio.charset.Charset').forName('UTF-8'); Files.append(reportLine, tempFile, charset); nodes.forEach(function (node) { @@ -20,23 +25,23 @@ function generateReport(principalKey, repositoryId, branch) { Files.append(reportLine, tempFile, charset); }); - var bytes = Files.toByteArray(tempFile); + let bytes = Files.toByteArray(tempFile); tempFile.delete(); return bytes; } function getPrincipalKeys(principalKey) { - var principalKeys = [principalKey]; + let principalKeys = [principalKey]; - if (!common.isRole(principalKey)) { - var membershipKeys = principals.getMemberships(principalKey, true).map(function (m) { + if (!isRole(principalKey)) { + let membershipKeys = getMemberships(principalKey, true).map(function (m) { return m.key; }); principalKeys = principalKeys.concat(membershipKeys); } - if (common.isUser(principalKey)) { + if (isUser(principalKey)) { principalKeys.push('role:system.everyone'); if (principalKey != 'user:system:anonymous') { principalKeys.push('role:system.authenticated'); @@ -46,44 +51,43 @@ function getPrincipalKeys(principalKey) { return principalKeys; } -var queryRepositoryNodes = function (repositoryId, branch, filters) { - var repoConn = common.newConnection(repositoryId, branch); +function queryRepositoryNodes(repositoryId, branch, filters) { + let repoConn = newConnection(repositoryId, branch); return repoConn.query({ count: -1, // TODO Batch - query: `_path LIKE '/content*'`, + query: '_path LIKE \'/content*\'', filters: filters }).hits.map(function (nodeHit) { - var node = repoConn.get(nodeHit.id); + let node = repoConn.get(nodeHit.id); const path = node._path.substr(8); // remove starting '/content' return { _path: path.length === 0 ? '/' : path, _permissions: node._permissions }; }); -}; +} function makeRepoNodesQueryFilters(principalKeys) { return { hasValue: { - field: "_permissions.read", + field: '_permissions.read', values: principalKeys } - } + }; } function hasSystemAdminRole(principalKeys) { return principalKeys.some(function (principalKey) { - return common.isSystemAdmin(principalKey); - }) + return isSystemAdmin(principalKey); + }); } -var generateReportLine = function (node, memKeys) { - - var allow = {}; - var deny = {}; - for (var i = 0; i < node._permissions.length; i++) { - var perm = node._permissions[i]; +function generateReportLine(node, memKeys) { + let allow = {}; + let deny = {}; + for (let i = 0; i < node._permissions.length; i++) { // eslint-disable-line @typescript-eslint/prefer-for-of + const perm = node._permissions[i]; if (memKeys.indexOf(perm.principal) >= 0) { PERMISSIONS.forEach(function (pt) { if (perm.allow.indexOf(pt) !== -1) { @@ -95,23 +99,19 @@ var generateReportLine = function (node, memKeys) { }); } } - var line = [node._path]; + let line = [node._path]; PERMISSIONS.forEach(function (pt) { line.push(allow[pt] && !deny[pt] ? 'X' : ''); }); return line.join(','); -}; +} -var generateSystemAdminReportLine = function (node) { - var line = [node._path]; +function generateSystemAdminReportLine(node) { + let line = [node._path]; PERMISSIONS.forEach(function () { line.push('X'); }); return line.join(','); -}; - -module.exports = { - generateReport: generateReport -}; +} diff --git a/src/main/resources/lib/users/principals.ts b/src/main/resources/lib/users/principals.ts new file mode 100644 index 000000000..6de682887 --- /dev/null +++ b/src/main/resources/lib/users/principals.ts @@ -0,0 +1,177 @@ +import { + createQueryByField, + PrincipalType, + queryAll, + singleOrArray +} from './common'; +import { + deletePrincipal, + getMemberships as _getMemberships, + getMembers as _getMembers, + removeMembers as _removeMembers, + addMembers as _addMembers +} from '/lib/xp/auth'; + + +export function getByKeys(keys) { + let noKeys = keys == null || (keys instanceof Array && keys.length === 0); + + // users and groups have their keys as _id, but roles have them stored as key + let principals = noKeys ? [] : queryAll({ + query: + createQueryByField('_id', keys) + + ' OR ' + + createQueryByField('key', keys) + }).hits; + + return keys instanceof Array ? principals : singleOrArray(principals); +} + +export function getMemberships(key, transitive?: boolean) { + return _getMemberships(key, transitive); +} + +export function addMemberships(key, memberships) { + let addMms = [].concat(memberships).map(function (current) { + addMembers(current, key); + return current; + }); + return addMms; +} + +export function removeMemberships(key, memberships: string|string[]) { + let removeMms = [].concat(memberships).map(function (current) { + removeMembers(current, key); + return current; + }); + return removeMms; +} + +export function updateMemberships(key, addMms, removeMms?: string|string[]) { + if (addMms && addMms.length > 0) { + addMemberships(key, addMms); + } + if (removeMms && removeMms.length > 0) { + removeMemberships(key, removeMms); + } +} + +export function getMembers(key) { + return _getMembers(key); +} + +export function addMembers(key, members) { + try { + _addMembers(key, members); + } catch (e) { + log.error( + 'Could not add members ' + + JSON.stringify(members) + + ' to [' + + key + + ']', + e + ); + } + return members; +} + +export function removeMembers(key, members) { + try { + _removeMembers(key, members); + } catch (e) { + log.error( + 'Could not remove members ' + + JSON.stringify(members) + + ' from [' + + key + + ']', + e + ); + } + return members; +} + +export function updateMembers(key, addMs, removeMs) { + if (addMs && addMs.length > 0) { + addMembers(key, addMs); + } + if (removeMs && removeMs.length > 0) { + removeMembers(key, removeMs); + } +} + +export function list(idProviderKey, types, query, start, count, sort) { + return queryAll({ + query: createPrincipalQuery(idProviderKey, types, query), + start: start, + count: count, + sort: sort + }); +} + +function _delete(keys) { + return keys.map(function (key) { + try { + let deleted = deletePrincipal(key); + return { + key: key, + deleted: deleted, + reason: deleted ? '' : 'Principal [' + key + '] could not be deleted' + }; + } catch (e) { + return { + key: key, + deleted: false, + reason: e.message + }; + } + }); +} +export {_delete as delete}; + +export const Type = PrincipalType; + + +function createPrincipalQuery(idProviderKey, types, query) { + let q = query ? textQuery(query) : ''; + if (!types) { + q += (q ? ' AND ' : '') + idProviderQuery(idProviderKey); + } else { + let tq = ''; + types.forEach(function (type, index) { + let add; + switch (type) { + case PrincipalType.ROLE: + add = rolesQuery(); + break; + case PrincipalType.GROUP: + case PrincipalType.USER: + add = idProviderQuery(idProviderKey, type); + break; + default: // none + } + tq += (index > 0 ? ' OR ' : '') + add; + }); + q += q ? ' AND (' + tq + ')' : tq; + } + return q; +} + +function textQuery(query) { + let q = '"_allText,displayName","' + query + '","AND"'; + return '(fulltext(' + q + ') OR ngram(' + q + '))'; +} + +function rolesQuery() { + return '_parentPath="/identity/roles"'; +} + +function idProviderQuery(key, type?: string) { + return ( + '(userStoreKey="' + + key + + '"' + + (type ? 'AND principalType="' + type + '")' : ')') + ); +} diff --git a/src/main/resources/lib/repositories.js b/src/main/resources/lib/users/repositories.ts similarity index 58% rename from src/main/resources/lib/repositories.js rename to src/main/resources/lib/users/repositories.ts index ef24d07a6..78a58466a 100644 --- a/src/main/resources/lib/repositories.js +++ b/src/main/resources/lib/users/repositories.ts @@ -1,18 +1,21 @@ -var common = require('./common'); +import { + getByIds, + queryAll +} from './common'; -exports.getById = function (id) { - return common.getByIds(id) -}; +export function getById(id) { + return getByIds(id); +} -exports.list = function (search, start, count, sort) { - var queryResult = common.queryAll({ +export function list(search, start, count, sort) { + let queryResult = queryAll({ query: createRepoQuery(search), start: start, count: count, sort: sort }); return queryResult.hits; -}; +} function createRepoQuery(search) { return '_parentPath="/repository"' + (search ? ' AND ngram("_name","' + search + '")' : ''); diff --git a/src/main/resources/lib/roles.js b/src/main/resources/lib/users/roles.ts similarity index 50% rename from src/main/resources/lib/roles.js rename to src/main/resources/lib/users/roles.ts index 1d9ad37c3..b359441a0 100644 --- a/src/main/resources/lib/roles.js +++ b/src/main/resources/lib/users/roles.ts @@ -1,52 +1,63 @@ -var common = require('./common'); -var principals = require('./principals'); -var authLib = require('/lib/xp/auth'); +import { + nameFromKey, + required +} from './common'; +import { + addMembers, + getMembers, + updateMembers +} from './principals'; +import { + createRole, + modifyRole +} from '/lib/xp/auth'; -exports.create = function createRole(params) { - var key = common.required(params, 'key'); - var name = common.nameFromKey(key); - var displayName = common.required(params, 'displayName'); - var createdRole = authLib.createRole({ +export function create(params) { + let key = required(params, 'key'); + let name = nameFromKey(key); + let displayName = required(params, 'displayName'); + + let createdRole = createRole({ name: name, displayName: displayName, description: params.description }); - var members = params.members; + let members = params.members; if (members && members.length > 0) { - principals.addMembers(key, members); + addMembers(key, members); } populateMembers(createdRole); return createdRole; -}; +} -exports.update = function updateRole(params) { - var key = common.required(params, 'key'); - var displayName = common.required(params, 'displayName'); +export function update(params) { + let key = required(params, 'key'); + let displayName = required(params, 'displayName'); if (isSuperUserToBeRemovedFromAdmins(key, params.removeMembers)) { throw new Error('Can\'t remove Super User from Administrators'); } - var modifiedRole = authLib.modifyRole({ + let modifiedRole = modifyRole({ key: key, - editor: function(role) { - var newRole = role; + editor: function (role) { + let newRole = role; newRole.displayName = displayName; newRole.description = params.description; return newRole; } }); - principals.updateMembers(key, params.addMembers, params.removeMembers); + updateMembers(key, params.addMembers, params.removeMembers); populateMembers(modifiedRole); return modifiedRole; -}; +} function isSuperUserToBeRemovedFromAdmins(key, removeMembers) { return key === 'role:system.admin' && !!removeMembers && removeMembers.some((member) => member === 'user:system:su'); @@ -54,9 +65,8 @@ function isSuperUserToBeRemovedFromAdmins(key, removeMembers) { function populateMembers(role) { // eslint-disable-next-line no-param-reassign - role.member = principals - .getMembers(role.key || role._id) - .map(function(member) { + role.member = getMembers(role.key || role._id) + .map(function (member) { return member.key; }); } diff --git a/src/main/resources/lib/users/runMode.ts b/src/main/resources/lib/users/runMode.ts new file mode 100644 index 000000000..3c692207a --- /dev/null +++ b/src/main/resources/lib/users/runMode.ts @@ -0,0 +1,9 @@ +declare const Java: { + type: (_classPath: string) => { + get: () => string + } +}; + +export const XP_RUN_MODE = `${Java.type('com.enonic.xp.server.RunMode').get()}`; // PROD || DEV +export const IS_DEV_MODE = XP_RUN_MODE === 'DEV'; +export const IS_PROD_MODE = XP_RUN_MODE === 'PROD'; diff --git a/src/main/resources/lib/users/urlHelper.ts b/src/main/resources/lib/users/urlHelper.ts new file mode 100644 index 000000000..19e989d55 --- /dev/null +++ b/src/main/resources/lib/users/urlHelper.ts @@ -0,0 +1,75 @@ +import type {Request, Response} from '/types'; + +// @ts-expect-error TS2307: Cannot find module '/lib/enonic/static' or its corresponding type declarations. +import {buildGetter} from '/lib/enonic/static'; +import {getToolUrl} from '/lib/xp/admin'; +import { + FILEPATH_MANIFEST_CJS, + FILEPATH_MANIFEST_NODE_MODULES, + GETTER_ROOT +} from '/constants'; +import ioResource from './ioResource'; +import {IS_DEV_MODE} from './runMode'; + + +interface UrlPostfixParams { + manifestPath?: string + path: string, +} + +type UrlParams = UrlPostfixParams & {urlPrefix: string}; + + +const manifests = { + [FILEPATH_MANIFEST_CJS]: ioResource(FILEPATH_MANIFEST_CJS), + // [FILEPATH_MANIFEST_ESM]: ioResource(FILEPATH_MANIFEST_ESM), + [FILEPATH_MANIFEST_NODE_MODULES]: ioResource(FILEPATH_MANIFEST_NODE_MODULES), +}; + +const getImmutableUrl = ({ + manifestPath = FILEPATH_MANIFEST_CJS, + path, + urlPrefix +}: UrlParams) => { + if (IS_DEV_MODE) { + manifests[manifestPath] = ioResource(manifestPath); + } + + return `${urlPrefix}/${GETTER_ROOT}/${manifests[manifestPath][path]}`; +}; + +export const getAdminUrl = ({ + manifestPath = FILEPATH_MANIFEST_CJS, + path, +}: UrlPostfixParams, tool: string) => { + const urlPrefix = getToolUrl(app.name, tool); + + return getImmutableUrl({ + manifestPath, + path, + urlPrefix + }); +}; + +export const getAdminNodeModuleUrl = (path: string, tool: string) => getAdminUrl({ + manifestPath: FILEPATH_MANIFEST_NODE_MODULES, + path, +}, tool); + +export const immutableGetter = buildGetter({ + etag: false, // default is true in production and false in development + getCleanPath: (request: Request) => { + log.debug('request:%s', JSON.stringify(request, null, 4)); + log.debug('contextPath:%s', request.contextPath); + log.debug('rawPath:%s', request.rawPath); + + const prefix = request.contextPath; + let cleanPath = prefix ? request.rawPath.substring(prefix.length) : request.rawPath; + cleanPath = cleanPath.replace(`${GETTER_ROOT}/`, ''); + + log.debug('cleanPath:%s', cleanPath); + + return cleanPath; + }, + root: GETTER_ROOT +}) as (_request: Request) => Response; diff --git a/src/main/resources/lib/users/useritems.ts b/src/main/resources/lib/users/useritems.ts new file mode 100644 index 000000000..acc5cbb13 --- /dev/null +++ b/src/main/resources/lib/users/useritems.ts @@ -0,0 +1,105 @@ +import type {QueryNodeParams} from '/lib/xp/node'; + + +import { + ALL_USER_ITEM_TYPES, + queryAll, + UserItemType, +} from './common'; + + +export function list( + types: UserItemType[], + query: string, + itemIds?: string[], + start?: QueryNodeParams['start'], + count?: QueryNodeParams['count'] +) { + const result = queryAll({ + query: createUserItemsQuery(query, types, itemIds), + start, + count, + aggregations: { + principalType: { + terms: { + field: 'principalType' + } + } + } + }); + + processIdProviderAggregation(result); + + return result; +} + +// export const Type = UserItemType; + + +function processIdProviderAggregation(result) { + if (!result || !result.aggregations || !result.aggregations.principalType || !result.aggregations.principalType.buckets) { + return; + } + + let aggregationBuckets = result.aggregations.principalType.buckets; + + let principalsCount = 0; + aggregationBuckets.forEach(function (bucket) { + principalsCount += bucket.docCount; + }); + + let idProvidersCount = result.total - principalsCount; + + if (idProvidersCount > 0) { + aggregationBuckets.push({key: 'id_provider', docCount: '' + idProvidersCount}); + } +} + +function createUserItemsQuery( + query: string, + types?: UserItemType[], + itemIds?: string[] +) { + let q = createTypesQuery(types); + if (query) { + q = createTextQuery(query) + ' AND ' + q; + } + + if (itemIds && itemIds.length > 0) { + let itemsIdsQuery = ''; + + itemIds.forEach(function (id, index) { + itemsIdsQuery += (index > 0 ? ' OR ' : '') + '_id="' + id + '" OR _name="' + id + '"'; + }); + + q += q ? ' AND (' + itemsIdsQuery + ')' : itemsIdsQuery; + } + + return q; +} + +function createTextQuery(query: string) { + const q = '"_allText,displayName","' + query + '","AND"'; + return '(fulltext(' + q + ') OR ngram(' + q + '))'; +} + +function createTypesQuery(types?: UserItemType[]) { + const newTypes = types || ALL_USER_ITEM_TYPES; + let query = newTypes + .map(function (type) { + switch (type) { + case UserItemType.ROLE: + case UserItemType.GROUP: + case UserItemType.USER: + return 'principalType = "' + type + '"'; + case UserItemType.ID_PROVIDER: + return '(_parentPath = "/identity" AND _path != "/identity/roles")'; + default: + return null; + } + }) + .filter(function (typeQuery) { + return typeQuery != null; + }); + return '(' + query.join(' OR ') + ')'; +} diff --git a/src/main/resources/lib/users/users.ts b/src/main/resources/lib/users/users.ts new file mode 100644 index 000000000..13f297489 --- /dev/null +++ b/src/main/resources/lib/users/users.ts @@ -0,0 +1,140 @@ +import { + idProviderFromKey, + required +} from './common'; +import { + addMemberships, + getMemberships, + updateMemberships +} from './principals'; +import { + changePassword, + createUser, + modifyProfile, + modifyUser +} from '/lib/xp/auth'; +import {forceArray} from '/lib/users/util'; + +export function create(params) { + let key = required(params, 'key'); + let idProviderKey = idProviderFromKey(key); + let name = required(params, 'login'); + let displayName = required(params, 'displayName'); + let email = required(params, 'email'); + + let createdUser = createUser({ + idProvider: idProviderKey, + name: name, + displayName: displayName, + email: email, + }); + + let mms = params.memberships; + if (mms && mms.length > 0) { + addMemberships(key, mms); + } + + let password = required(params, 'password'); + updatePwd(key, password); + + populateMemberships(createdUser); + + return createdUser; +} + +export function update(params) { + let key = required(params, 'key'); + let displayName = required(params, 'displayName'); + + let updatedUser = modifyUser({ + key: key, + editor: function (user) { + let newUser = user; + newUser.displayName = displayName; + newUser.email = params.email; + newUser.login = params.login; + return newUser; + } + }); + + updateMemberships( + key, + params.addMemberships, + params.removeMemberships + ); + + populateMemberships(updatedUser); + + return updatedUser; +} + +export function updatePwd(key, pwd) { + let password = pwd.replace(/\s/g, ''); + try { + changePassword({ + userKey: key, + password: password + }); + return true; + } catch (e) { + log.error('Could not update password for [' + key + ']'); + return false; + } +} + +export function removePublicKey(params) { + const userKey = required(params, 'userKey'); + const kid = required(params, 'kid'); + + const updatedProfile = modifyProfile({ + key: userKey, + editor: function (profile) { + const publicKeys = forceArray(profile.publicKeys); + profile.publicKeys = publicKeys.filter(key => key.kid !== kid); + return profile; + } + }); + + return forceArray(updatedProfile.publicKeys).filter(key => key.kid === kid).length === 0; +} + +export function addPublicKey(params) { + const userKey = required(params, 'userKey'); + const publicKey = required(params, 'publicKey'); + const label = params.label; + + const kidGenerator = __.newBean<{ + generateKid: (publicKey: string) => string + }>('com.enonic.xp.app.users.handler.KidGeneratorHandler'); + const kid = kidGenerator.generateKid(publicKey); + + const updatedProfile = modifyProfile({ + key: userKey, + editor: function (profile) { + const publicKeys = forceArray(profile.publicKeys); + + const existingKeys = publicKeys.filter(key => key.kid === kid); + if (existingKeys.length > 0) { + throw new Error(`Public key with kid ${kid} already exists for user ${userKey}`); + } + + publicKeys.push({ + kid, + publicKey, + algorithm: 'RSA', + label, + creationTime: new Date().toISOString(), + }); + + profile.publicKeys = publicKeys; + return profile; + } + }); + + return forceArray(updatedProfile.publicKeys).filter(key => key.kid === kid)[0]; +} + +function populateMemberships(user) { + // eslint-disable-next-line no-param-reassign + user.memberships = getMemberships(user.key || user._id); +} diff --git a/src/main/resources/lib/util.js b/src/main/resources/lib/users/util.ts similarity index 71% rename from src/main/resources/lib/util.js rename to src/main/resources/lib/users/util.ts index 260a7ad21..9df0da08b 100644 --- a/src/main/resources/lib/util.js +++ b/src/main/resources/lib/users/util.ts @@ -1,4 +1,4 @@ -exports.forceArray = function (data) { +export function forceArray(data: T|T[]): T[] { if (data) { if (Array.isArray(data)) { return data; @@ -6,4 +6,4 @@ exports.forceArray = function (data) { return [data]; } return []; -}; +} diff --git a/src/main/resources/services/config/config.js b/src/main/resources/services/config/config.js deleted file mode 100644 index 2663a326a..000000000 --- a/src/main/resources/services/config/config.js +++ /dev/null @@ -1,27 +0,0 @@ -/*global app, require*/ - -var admin = require('/lib/xp/admin'); -var portal = require('/lib/xp/portal'); - -function handleGet() { - return { - status: 200, - contentType: 'application/json', - body: { - adminUrl: admin.getBaseUri(), - appId: app.name, - assetsUri: portal.assetUrl({path: ''}), - toolUri: admin.getToolUrl( - app.name, - 'main' - ), - services: { - graphQlUrl: portal.serviceUrl({ service: 'graphql'}), - reportServiceUrl: portal.serviceUrl({service: 'permissionReport'}), - i18nUrl: portal.serviceUrl({service: 'i18n'}), - } - } - }; -} - -exports.get = handleGet; diff --git a/src/main/resources/services/config/config.ts b/src/main/resources/services/config/config.ts new file mode 100644 index 000000000..3fafe747d --- /dev/null +++ b/src/main/resources/services/config/config.ts @@ -0,0 +1,35 @@ +import { + getBaseUri, + getToolUrl +} from '/lib/xp/admin'; +import { + assetUrl, + serviceUrl +} from '/lib/xp/portal'; +import {getAdminUrl} from '/lib/users/urlHelper'; + +const TOOL_NAME = 'main'; + +export function get() { + return { + status: 200, + contentType: 'application/json', + body: { + adminUrl: getBaseUri(), + appId: app.name, + assetsUri: assetUrl({path: ''}), + toolUri: getToolUrl( + app.name, + TOOL_NAME + ), + cryptoWorkerUrl: getAdminUrl({ + path: 'worker/RSAKeysWorker.js' + }, TOOL_NAME), + services: { + graphQlUrl: serviceUrl({service: 'graphql'}), + reportServiceUrl: serviceUrl({service: 'permissionReport'}), + i18nUrl: serviceUrl({service: 'i18n'}), + } + } + }; +} diff --git a/src/main/resources/services/graphql/constants.ts b/src/main/resources/services/graphql/constants.ts new file mode 100644 index 000000000..80070b122 --- /dev/null +++ b/src/main/resources/services/graphql/constants.ts @@ -0,0 +1,65 @@ +// Single common enum to avoid name collisions +const enum UniqNames { + Aggregation = 'Aggregation', + Bucket = 'Bucket', + IdProvider = 'IdProvider', + IdProviderAccess = 'IdProviderAccess', + IdProviderAccessControlEntry = 'IdProviderAccessControlEntry', + IdProviderAccessControlInput = 'IdProviderAccessControlInput', + IdProviderConfig = 'IdProviderConfig', + IdProviderConfigInput = 'IdProviderConfigInput', + IdProviderDelete = 'IdProviderDelete', + IdProviderMode = 'IdProviderMode', + Mutation = 'Mutation', + PageInfo = 'PageInfo', + Permission = 'Permission', + Principal = 'Principal', + PrincipalAccessControlEntry = 'PrincipalAccessControlEntry', + PrincipalDelete = 'PrincipalDelete', + PrincipalInput = 'PrincipalInput', + PrincipalType = 'PrincipalType', + PublicKey = 'PublicKey', + Query = 'Query', + Repository = 'Repository', + SortMode = 'SortMode', + Types = 'Types', + UserItem = 'UserItem', + UserItemType = 'UserItemType' +} + +export const enum EnumTypeNames { + IdProviderAccess = UniqNames.IdProviderAccess, + IdProviderMode = UniqNames.IdProviderMode, + Permission = UniqNames.Permission, + PrincipalType = UniqNames.PrincipalType, + SortMode = UniqNames.SortMode, + UserItemType = UniqNames.UserItemType +} + +export const enum InterfaceTypeNames { + UserItem = UniqNames.UserItem +} + +export const enum ObjectTypeNames { + Aggregation = UniqNames.Aggregation, + Bucket = UniqNames.Bucket, + IdProvider = UniqNames.IdProvider, + IdProviderAccessControlEntry = UniqNames.IdProviderAccessControlEntry, + IdProviderConfig = UniqNames.IdProviderConfig, + IdProviderDelete = UniqNames.IdProviderDelete, + Mutation = UniqNames.Mutation, + PageInfo = UniqNames.PageInfo, + Principal = UniqNames.Principal, + PrincipalAccessControlEntry = UniqNames.PrincipalAccessControlEntry, + PrincipalDelete = UniqNames.PrincipalDelete, + PublicKey = UniqNames.PublicKey, + Repository = UniqNames.Repository, + Query = UniqNames.Query, + Types = UniqNames.Types +} + +export const enum InputTypeNames { + IdProviderAccessControlInput = UniqNames.IdProviderAccessControlInput, + IdProviderConfigInput = UniqNames.IdProviderConfigInput, + PrincipalInput = UniqNames.PrincipalInput +} diff --git a/src/main/resources/services/graphql/graphql.js b/src/main/resources/services/graphql/graphql.js deleted file mode 100644 index b840e982c..000000000 --- a/src/main/resources/services/graphql/graphql.js +++ /dev/null @@ -1,23 +0,0 @@ -//TODO Remove GraphQLSchemaSynchronizer for Enonic XP 6.13 - -var graphQl = require('/lib/graphql'); -var schemaGenerator = require('./schemaUtil').schemaGenerator; - -Java.type('com.enonic.xp.app.users.GraphQLSchemaSynchronizer').sync(__.toScriptValue(function() { - var graphQlSchema = require('./schema'); - var schema = schemaGenerator.createSchema(graphQlSchema); - - exports.post = function(req) { - var body = JSON.parse(req.body); - var operation = body.query || body.mutation; - if (!operation) { - throw new Error('`query` or `mutation` param is missing.'); - } - var result = graphQl.execute(schema, operation, body.variables); - return { - contentType: 'application/json', - body: result - }; - }; -})); - diff --git a/src/main/resources/services/graphql/graphql.ts b/src/main/resources/services/graphql/graphql.ts new file mode 100644 index 000000000..2d49974a2 --- /dev/null +++ b/src/main/resources/services/graphql/graphql.ts @@ -0,0 +1,24 @@ +//TODO Remove GraphQLSchemaSynchronizer for Enonic XP 6.13 + +// @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +import {execute} from '/lib/graphql'; +import {schemaGenerator} from './schemaUtil'; +import * as graphQlSchema from './schema'; + +let schema; +Java.type('com.enonic.xp.app.users.GraphQLSchemaSynchronizer').sync(__.toScriptValue(function () { + schema = schemaGenerator.createSchema(graphQlSchema); +})); + +export function post(req) { + let body = JSON.parse(req.body); + let operation = body.query || body.mutation; + if (!operation) { + throw new Error('`query` or `mutation` param is missing.'); + } + let result = execute(schema, operation, body.variables); + return { + contentType: 'application/json', + body: result + }; +} diff --git a/src/main/resources/services/graphql/schema/index.js b/src/main/resources/services/graphql/schema/index.js deleted file mode 100644 index e158dccd2..000000000 --- a/src/main/resources/services/graphql/schema/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - query: require('./query'), - mutation: require('./mutation') -}; diff --git a/src/main/resources/services/graphql/schema/index.ts b/src/main/resources/services/graphql/schema/index.ts new file mode 100644 index 000000000..6197a1b1c --- /dev/null +++ b/src/main/resources/services/graphql/schema/index.ts @@ -0,0 +1,2 @@ +export {default as mutation} from './mutation'; +export {default as query} from './query'; diff --git a/src/main/resources/services/graphql/schema/mutation.js b/src/main/resources/services/graphql/schema/mutation.js deleted file mode 100644 index 03626530a..000000000 --- a/src/main/resources/services/graphql/schema/mutation.js +++ /dev/null @@ -1,257 +0,0 @@ -var graphQl = require('/lib/graphql'); - -var idproviders = require('/lib/idproviders'); -var principals = require('/lib/principals'); -var users = require('/lib/users'); -var groups = require('/lib/groups'); -var roles = require('/lib/roles'); - -var schemaGenerator = require('../schemaUtil').schemaGenerator; - -var graphQlObjectTypes = require('../types').objects; -var graphQlInputTypes = require('../types').inputs; - -module.exports = schemaGenerator.createObjectType({ - name: 'Mutation', - fields: { - // Principal - deletePrincipals: { - type: graphQl.list(graphQlObjectTypes.PrincipalDeleteType), - args: { - keys: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return principals.delete(env.args.keys); - } - }, - - // User - createUser: { - type: graphQlObjectTypes.PrincipalType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - email: graphQl.nonNull(graphQl.GraphQLString), - login: graphQl.nonNull(graphQl.GraphQLString), - password: graphQl.nonNull(graphQl.GraphQLString), - memberships: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return users.create({ - key: env.args.key, - displayName: env.args.displayName, - email: env.args.email, - login: env.args.login, - password: env.args.password, - memberships: env.args.memberships - }); - } - }, - updateUser: { - type: graphQlObjectTypes.PrincipalType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - email: graphQl.nonNull(graphQl.GraphQLString), - login: graphQl.nonNull(graphQl.GraphQLString), - addMemberships: graphQl.list(graphQl.GraphQLString), - removeMemberships: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return users.update({ - key: env.args.key, - displayName: env.args.displayName, - email: env.args.email, - login: env.args.login, - addMemberships: env.args.addMemberships, - removeMemberships: env.args.removeMemberships - }); - } - }, - updatePwd: { - type: graphQl.GraphQLBoolean, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - password: graphQl.nonNull(graphQl.GraphQLString) - }, - resolve: function(env) { - return users.updatePwd(env.args.key, env.args.password); - } - }, - removePublicKey: { - type: graphQl.GraphQLBoolean, - args: { - userKey: graphQl.nonNull(graphQl.GraphQLString), - kid: graphQl.nonNull(graphQl.GraphQLString), - }, - resolve: function (env) { - return users.removePublicKey({ - userKey: env.args.userKey, - kid: env.args.kid, - }); - } - }, - addPublicKey: { - type: graphQlObjectTypes.PublicKeyType, - args: { - userKey: graphQl.nonNull(graphQl.GraphQLString), - publicKey: graphQl.nonNull(graphQl.GraphQLString), - label: graphQl.nonNull(graphQl.GraphQLString), - }, - resolve: function (env) { - return users.addPublicKey({ - userKey: env.args.userKey, - publicKey: env.args.publicKey, - label: env.args.label, - }); - } - }, - - // Group - createGroup: { - type: graphQlObjectTypes.PrincipalType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - description: graphQl.GraphQLString, - members: graphQl.list(graphQl.GraphQLString), - memberships: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return groups.create({ - key: env.args.key, - displayName: env.args.displayName, - description: env.args.description, - members: env.args.members, - memberships: env.args.memberships - }); - } - }, - updateGroup: { - type: graphQlObjectTypes.PrincipalType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - description: graphQl.GraphQLString, - addMembers: graphQl.list(graphQl.GraphQLString), - removeMembers: graphQl.list(graphQl.GraphQLString), - addMemberships: graphQl.list(graphQl.GraphQLString), - removeMemberships: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return groups.update({ - key: env.args.key, - displayName: env.args.displayName, - description: env.args.description, - addMembers: env.args.addMembers, - removeMembers: env.args.removeMembers, - addMemberships: env.args.addMemberships, - removeMemberships: env.args.removeMemberships - }); - } - }, - - // Role - createRole: { - type: graphQlObjectTypes.PrincipalType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - description: graphQl.GraphQLString, - members: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return roles.create({ - key: env.args.key, - displayName: env.args.displayName, - description: env.args.description, - members: env.args.members - }); - } - }, - updateRole: { - type: graphQlObjectTypes.PrincipalType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - description: graphQl.GraphQLString, - addMembers: graphQl.list(graphQl.GraphQLString), - removeMembers: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return roles.update({ - key: env.args.key, - displayName: env.args.displayName, - description: env.args.description, - addMembers: env.args.addMembers, - removeMembers: env.args.removeMembers - }); - } - }, - - // IdProvider - createIdProvider: { - type: graphQlObjectTypes.IdProviderType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - description: graphQl.GraphQLString, - idProviderConfig: graphQlInputTypes.IdProviderConfigInput, - permissions: graphQl.list( - graphQlInputTypes.IdProviderAccessControlInput - ) - }, - resolve: function(env) { - var idProviderConfig = env.args.idProviderConfig; - if (idProviderConfig) { - // parse config as there's no graphql type for it - idProviderConfig.config = JSON.parse(idProviderConfig.config); - } - - return idproviders.create({ - key: env.args.key, - displayName: env.args.displayName, - description: env.args.description, - idProviderConfig: idProviderConfig, - permissions: env.args.permissions - }); - } - }, - updateIdProvider: { - type: graphQlObjectTypes.IdProviderType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - displayName: graphQl.nonNull(graphQl.GraphQLString), - description: graphQl.GraphQLString, - idProviderConfig: graphQlInputTypes.IdProviderConfigInput, - permissions: graphQl.list( - graphQlInputTypes.IdProviderAccessControlInput - ) - }, - resolve: function(env) { - var idProviderConfig = env.args.idProviderConfig; - if (idProviderConfig) { - // parse config as there's no graphql type for it - idProviderConfig.config = JSON.parse(idProviderConfig.config); - } - - return idproviders.update({ - key: env.args.key, - displayName: env.args.displayName, - description: env.args.description, - idProviderConfig: idProviderConfig, - permissions: env.args.permissions - }); - } - }, - deleteIdProviders: { - type: graphQl.list(graphQlObjectTypes.IdProviderDeleteType), - args: { - keys: graphQl.list(graphQl.GraphQLString) - }, - resolve: function(env) { - return idproviders.delete(env.args.keys); - } - } - } -}); diff --git a/src/main/resources/services/graphql/schema/mutation.ts b/src/main/resources/services/graphql/schema/mutation.ts new file mode 100644 index 000000000..aa2310968 --- /dev/null +++ b/src/main/resources/services/graphql/schema/mutation.ts @@ -0,0 +1,289 @@ +import { + GraphQLBoolean, + GraphQLString, + list, + nonNull + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; + +import { + create as createIdProvider, + delete as deleteIdProvider, + update as updateIdProvider +} from '/lib/users/idproviders'; +import {delete as deletePrincipals} from '/lib/users/principals'; +import { + addPublicKey, + create as createUser, + removePublicKey, + update as updateUser, + updatePwd +} from '/lib/users/users'; +import { + create as createGroup, + update as updateGroup, +} from '/lib/users/groups'; +import { + create as createRole, + update as updateRole +} from '/lib/users/roles'; +import {ObjectTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../schemaUtil'; +import { + IdProviderDeleteType, + IdProviderType, + PrincipalDeleteType, + PrincipalType, + PublicKeyType +} from '../types/objects'; +import { + IdProviderAccessControlInput, + IdProviderConfigInput +} from '../types/inputs'; + + +const mutation = schemaGenerator.createObjectType({ + name: ObjectTypeNames.Mutation, + fields: { + // Principal + deletePrincipals: { + type: list(PrincipalDeleteType), + args: { + keys: list(GraphQLString) + }, + resolve: function (env) { + return deletePrincipals(env.args.keys); + } + }, + + // User + createUser: { + type: PrincipalType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + email: nonNull(GraphQLString), + login: nonNull(GraphQLString), + password: nonNull(GraphQLString), + memberships: list(GraphQLString) + }, + resolve: function (env) { + return createUser({ + key: env.args.key, + displayName: env.args.displayName, + email: env.args.email, + login: env.args.login, + password: env.args.password, + memberships: env.args.memberships + }); + } + }, + updateUser: { + type: PrincipalType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + email: nonNull(GraphQLString), + login: nonNull(GraphQLString), + addMemberships: list(GraphQLString), + removeMemberships: list(GraphQLString) + }, + resolve: function (env) { + return updateUser({ + key: env.args.key, + displayName: env.args.displayName, + email: env.args.email, + login: env.args.login, + addMemberships: env.args.addMemberships, + removeMemberships: env.args.removeMemberships + }); + } + }, + updatePwd: { + type: GraphQLBoolean, + args: { + key: nonNull(GraphQLString), + password: nonNull(GraphQLString) + }, + resolve: function (env) { + return updatePwd(env.args.key, env.args.password); + } + }, + removePublicKey: { + type: GraphQLBoolean, + args: { + userKey: nonNull(GraphQLString), + kid: nonNull(GraphQLString), + }, + resolve: function (env) { + return removePublicKey({ + userKey: env.args.userKey, + kid: env.args.kid, + }); + } + }, + addPublicKey: { + type: PublicKeyType, + args: { + userKey: nonNull(GraphQLString), + publicKey: nonNull(GraphQLString), + label: nonNull(GraphQLString), + }, + resolve: function (env) { + return addPublicKey({ + userKey: env.args.userKey, + publicKey: env.args.publicKey, + label: env.args.label, + }); + } + }, + + // Group + createGroup: { + type: PrincipalType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + description: GraphQLString, + members: list(GraphQLString), + memberships: list(GraphQLString) + }, + resolve: function (env) { + return createGroup({ + key: env.args.key, + displayName: env.args.displayName, + description: env.args.description, + members: env.args.members, + memberships: env.args.memberships + }); + } + }, + updateGroup: { + type: PrincipalType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + description: GraphQLString, + addMembers: list(GraphQLString), + removeMembers: list(GraphQLString), + addMemberships: list(GraphQLString), + removeMemberships: list(GraphQLString) + }, + resolve: function (env) { + return updateGroup({ + key: env.args.key, + displayName: env.args.displayName, + description: env.args.description, + addMembers: env.args.addMembers, + removeMembers: env.args.removeMembers, + addMemberships: env.args.addMemberships, + removeMemberships: env.args.removeMemberships + }); + } + }, + + // Role + createRole: { + type: PrincipalType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + description: GraphQLString, + members: list(GraphQLString) + }, + resolve: function (env) { + return createRole({ + key: env.args.key, + displayName: env.args.displayName, + description: env.args.description, + members: env.args.members + }); + } + }, + updateRole: { + type: PrincipalType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + description: GraphQLString, + addMembers: list(GraphQLString), + removeMembers: list(GraphQLString) + }, + resolve: function (env) { + return updateRole({ + key: env.args.key, + displayName: env.args.displayName, + description: env.args.description, + addMembers: env.args.addMembers, + removeMembers: env.args.removeMembers + }); + } + }, + + // IdProvider + createIdProvider: { + type: IdProviderType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + description: GraphQLString, + idProviderConfig: IdProviderConfigInput, + permissions: list( + IdProviderAccessControlInput + ) + }, + resolve: function (env) { + let idProviderConfig = env.args.idProviderConfig; + if (idProviderConfig) { + // parse config as there's no graphql type for it + idProviderConfig.config = JSON.parse(idProviderConfig.config); + } + + return createIdProvider({ + key: env.args.key, + displayName: env.args.displayName, + description: env.args.description, + idProviderConfig: idProviderConfig, + permissions: env.args.permissions + }); + } + }, + updateIdProvider: { + type: IdProviderType, + args: { + key: nonNull(GraphQLString), + displayName: nonNull(GraphQLString), + description: GraphQLString, + idProviderConfig: IdProviderConfigInput, + permissions: list( + IdProviderAccessControlInput + ) + }, + resolve: function (env) { + let idProviderConfig = env.args.idProviderConfig; + if (idProviderConfig) { + // parse config as there's no graphql type for it + idProviderConfig.config = JSON.parse(idProviderConfig.config); + } + + return updateIdProvider({ + key: env.args.key, + displayName: env.args.displayName, + description: env.args.description, + idProviderConfig: idProviderConfig, + permissions: env.args.permissions + }); + } + }, + deleteIdProviders: { + type: list(IdProviderDeleteType), + args: { + keys: list(GraphQLString) + }, + resolve: function (env) { + return deleteIdProvider(env.args.keys); + } + } + } +}); +export default mutation; diff --git a/src/main/resources/services/graphql/schema/query.js b/src/main/resources/services/graphql/schema/query.js deleted file mode 100644 index a507231c2..000000000 --- a/src/main/resources/services/graphql/schema/query.js +++ /dev/null @@ -1,153 +0,0 @@ -var graphQl = require('/lib/graphql'); -var authLib = require('/lib/auth'); - -var idproviders = require('/lib/idproviders'); -var principals = require('/lib/principals'); -var useritems = require('/lib/useritems'); -var repositories = require('/lib/repositories'); - -var schemaGenerator = require('../schemaUtil').schemaGenerator; - -var graphQlObjectTypes = require('../types').objects; -var graphQlEnums = require('../types').enums; - - -function getUserItems(args, types) { - var query = args.query; - var itemIds = args.itemIds; - var count = args.count || 0; - var start = args.start || 0; - return useritems.list(types, query, itemIds, start, count); -} - -module.exports = schemaGenerator.createObjectType({ - name: 'Query', - fields: { - idProviders: { - type: graphQl.list(graphQlObjectTypes.IdProviderType), - resolve: function () { - return idproviders.list(); - } - }, - idProvider: { - type: graphQlObjectTypes.IdProviderType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString) - }, - resolve: function (env) { - var key = env.args.key; - return idproviders.getByKey(key); - } - }, - defaultIdProvider: { - type: graphQlObjectTypes.IdProviderType, - resolve: function () { - return idproviders.getDefault(); - } - }, - principalsConnection: { - type: graphQlObjectTypes.PrincipalConnectionType, - args: { - idprovider: graphQl.GraphQLString, - types: graphQl.list(graphQlEnums.PrincipalTypeEnum), - query: graphQl.GraphQLString, - start: graphQl.GraphQLInt, - count: graphQl.GraphQLInt, - sort: graphQl.GraphQLString - }, - resolve: function (env) { - var idprovider = env.args.idprovider || 'system'; - var types = env.args.types || principals.Type.all(); - var query = env.args.query; - var start = env.args.start; - var count = env.args.count; - var sort = env.args.sort; - return principals.list( - idprovider, - types, - query, - start, - count, - sort - ); - } - }, - principal: { - type: graphQlObjectTypes.PrincipalType, - args: { - key: graphQl.nonNull(graphQl.GraphQLString), - }, - resolve: function (env) { - var key = env.args.key; - return principals.getByKeys(key); - } - }, - principals: { - type: graphQl.list(graphQlObjectTypes.PrincipalType), - args: { - keys: graphQl.nonNull(graphQl.list(graphQl.GraphQLString)) - }, - resolve: function (env) { - var keys = env.args.keys; - return principals.getByKeys(keys); - } - }, - userItemsConnection: { - type: graphQlObjectTypes.UserItemConnectionType, - args: { - types: graphQl.list(graphQlEnums.UserItemTypeEnum), - query: graphQl.GraphQLString, - itemIds: graphQl.list(graphQl.GraphQLString), - start: graphQl.GraphQLInt, - count: graphQl.GraphQLInt - }, - resolve: function (env) { - return getUserItems(env.args, env.args.types); - } - }, - types: { - type: graphQlObjectTypes.TypesType, - args: { - query: graphQl.GraphQLString, - itemIds: graphQl.list(graphQl.GraphQLString), - start: graphQl.GraphQLInt, - count: graphQl.GraphQLInt - }, - resolve: function (env) { - return getUserItems(env.args, null); - } - }, - repository: { - type: graphQlObjectTypes.RepositoryType, - args: { - id: graphQl.nonNull(graphQl.GraphQLString) - }, - resolve: function (env) { - if (!authLib.isAdmin()) { - throw new Error('You don\'t have permission to access this resource'); - } - var id = env.args.id; - return repositories.getById(id); - } - }, - repositories: { - type: graphQl.list(graphQlObjectTypes.RepositoryType), - args: { - query: graphQl.GraphQLString, - start: graphQl.GraphQLInt, - count: graphQl.GraphQLInt, - sort: graphQlEnums.SortModeEnum - }, - resolve: function (env) { - if (!authLib.isAdmin()) { - throw new Error('You don\'t have permission to access this resource'); - } - var query = env.args.query; - var start = env.args.start; - var count = env.args.count; - var sort = env.args.sort; - return repositories.list(query, start, count, sort); - } - } - } -}); diff --git a/src/main/resources/services/graphql/schema/query.ts b/src/main/resources/services/graphql/schema/query.ts new file mode 100644 index 000000000..45db7d99d --- /dev/null +++ b/src/main/resources/services/graphql/schema/query.ts @@ -0,0 +1,193 @@ +import type {QueryNodeParams} from '/lib/xp/node'; + + +import { + GraphQLInt, + // Json as GraphQLJson, + GraphQLString, + list, + nonNull + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; +import {isAdmin} from '/lib/users/auth'; +import {UserItemType} from '/lib/users/common'; +import { + getByKey, + getDefault, + list as listIdProviders +} from '/lib/users/idproviders'; +import { + getByKeys as getPrincipalsByKeys, + list as listPrincipals, + Type +} from '/lib/users/principals'; +import {list as listUserItems} from '/lib/users/useritems'; +import { + getById as getRepositoryById, + list as listRepositories +} from '/lib/users/repositories'; +import {ObjectTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../schemaUtil'; +import {TypesType} from '../types/objects/types'; +import { + PrincipalTypeEnum, + SortModeEnum, + UserItemTypeEnum +} from '../types/enums'; +import { + IdProviderType, + PrincipalConnectionType, + PrincipalType, + RepositoryType, + UserItemConnectionType +} from '../types/objects'; + + +function getUserItems({ + count = 0, + start = 0, + query, + itemIds +}: { + // Required + itemIds: string[] + // Optional + count?: QueryNodeParams['count'] + query?: string + start?: QueryNodeParams['start'] +}, types?: UserItemType[]) { + return listUserItems(types, query, itemIds, start, count); +} + +const query = schemaGenerator.createObjectType({ + name: ObjectTypeNames.Query, + fields: { + idProviders: { + type: list(IdProviderType), + resolve() { + return listIdProviders(); + } + }, + idProvider: { + type: IdProviderType, + args: { + key: nonNull(GraphQLString) + }, + resolve(env) { + let key = env.args.key; + return getByKey(key); + } + }, + defaultIdProvider: { + type: IdProviderType, + resolve() { + return getDefault(); + } + }, + principalsConnection: { + type: PrincipalConnectionType, + args: { + idprovider: GraphQLString, + types: list(PrincipalTypeEnum), + query: GraphQLString, + start: GraphQLInt, + count: GraphQLInt, + sort: GraphQLString + }, + resolve(env) { + let idprovider = env.args.idprovider || 'system'; + let types = env.args.types || Type.all(); + let query = env.args.query; + let start = env.args.start; + let count = env.args.count; + let sort = env.args.sort; + return listPrincipals( + idprovider, + types, + query, + start, + count, + sort + ); + } + }, + principal: { + type: PrincipalType, + args: { + key: nonNull(GraphQLString), + }, + resolve(env) { + let key = env.args.key; + return getPrincipalsByKeys(key); + } + }, + principals: { + type: list(PrincipalType), + args: { + keys: nonNull(list(GraphQLString)) + }, + resolve(env) { + let keys = env.args.keys; + return getPrincipalsByKeys(keys); + } + }, + userItemsConnection: { + type: UserItemConnectionType, + args: { + types: list(UserItemTypeEnum), + query: GraphQLString, + itemIds: list(GraphQLString), + start: GraphQLInt, + count: GraphQLInt + }, + resolve(env) { + return getUserItems(env.args, env.args.types); + } + }, + repository: { + type: RepositoryType, + args: { + id: nonNull(GraphQLString) + }, + resolve(env) { + if (!isAdmin()) { + throw new Error('You don\'t have permission to access this resource'); + } + let id = env.args.id; + return getRepositoryById(id); + } + }, + repositories: { + type: list(RepositoryType), + args: { + query: GraphQLString, + start: GraphQLInt, + count: GraphQLInt, + sort: SortModeEnum + }, + resolve(env) { + if (!isAdmin()) { + throw new Error('You don\'t have permission to access this resource'); + } + let query = env.args.query; + let start = env.args.start; + let count = env.args.count; + let sort = env.args.sort; + return listRepositories(query, start, count, sort); + } + }, + types: { + type: TypesType, + args: { + query: GraphQLString, + itemIds: list(GraphQLString), + start: GraphQLInt, + count: GraphQLInt + }, + resolve({args}) { + return getUserItems(args, null); + } + }, + } +}); +export default query; diff --git a/src/main/resources/services/graphql/schemaUtil.js b/src/main/resources/services/graphql/schemaUtil.js deleted file mode 100644 index 7218fc5d5..000000000 --- a/src/main/resources/services/graphql/schemaUtil.js +++ /dev/null @@ -1,6 +0,0 @@ -var graphqlLib = require('/lib/graphql'); - -// singleton -var schemaGenerator = graphqlLib.newSchemaGenerator(); - -exports.schemaGenerator = schemaGenerator; diff --git a/src/main/resources/services/graphql/schemaUtil.ts b/src/main/resources/services/graphql/schemaUtil.ts new file mode 100644 index 000000000..d466347e5 --- /dev/null +++ b/src/main/resources/services/graphql/schemaUtil.ts @@ -0,0 +1,5 @@ +// @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +import {newSchemaGenerator} from '/lib/graphql'; + +// singleton +export const schemaGenerator = newSchemaGenerator(); diff --git a/src/main/resources/services/graphql/types/enums.js b/src/main/resources/services/graphql/types/enums.ts similarity index 61% rename from src/main/resources/services/graphql/types/enums.js rename to src/main/resources/services/graphql/types/enums.ts index 119aaa046..c4ae72cc1 100644 --- a/src/main/resources/services/graphql/types/enums.js +++ b/src/main/resources/services/graphql/types/enums.ts @@ -1,7 +1,8 @@ -var schemaGenerator = require('../schemaUtil').schemaGenerator; +import {EnumTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../schemaUtil'; -exports.IdProviderModeEnum = schemaGenerator.createEnumType({ - name: 'IdProviderMode', +export const IdProviderModeEnum = schemaGenerator.createEnumType({ + name: EnumTypeNames.IdProviderMode, description: 'Enumeration of Id provider modes', values: { LOCAL: 'LOCAL', @@ -10,8 +11,8 @@ exports.IdProviderModeEnum = schemaGenerator.createEnumType({ } }); -exports.SortModeEnum = schemaGenerator.createEnumType({ - name: 'SortMode', +export const SortModeEnum = schemaGenerator.createEnumType({ + name: EnumTypeNames.SortMode, description: 'Enumeration of sort modes', values: { ASC: 'ASC', @@ -19,8 +20,8 @@ exports.SortModeEnum = schemaGenerator.createEnumType({ } }); -exports.UserItemTypeEnum = schemaGenerator.createEnumType({ - name: 'UserItemType', +export const UserItemTypeEnum = schemaGenerator.createEnumType({ + name: EnumTypeNames.UserItemType, description: 'Enumeration of user item types', values: { ID_PROVIDER: 'ID_PROVIDER', @@ -30,8 +31,8 @@ exports.UserItemTypeEnum = schemaGenerator.createEnumType({ } }); -exports.PrincipalTypeEnum = schemaGenerator.createEnumType({ - name: 'PrincipalType', +export const PrincipalTypeEnum = schemaGenerator.createEnumType({ + name: EnumTypeNames.PrincipalType, description: 'Enumeration of principal types', values: { USER: 'USER', @@ -40,8 +41,8 @@ exports.PrincipalTypeEnum = schemaGenerator.createEnumType({ } }); -exports.PermissionEnum = schemaGenerator.createEnumType({ - name: 'Permission', +export const PermissionEnum = schemaGenerator.createEnumType({ + name: EnumTypeNames.Permission, description: 'Enumeration of permissions', values: { READ: 'READ', @@ -54,8 +55,8 @@ exports.PermissionEnum = schemaGenerator.createEnumType({ } }); -exports.IdProviderAccessEnum = schemaGenerator.createEnumType({ - name: 'IdProviderAccess', +export const IdProviderAccessEnum = schemaGenerator.createEnumType({ + name: EnumTypeNames.IdProviderAccess, description: 'Enumeration of id provider access permissions', values: { READ: 'READ', diff --git a/src/main/resources/services/graphql/types/index.js b/src/main/resources/services/graphql/types/index.js deleted file mode 100644 index 280a1951a..000000000 --- a/src/main/resources/services/graphql/types/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - enums: require('./enums'), - inputs: require('./inputs'), - objects: require('./objects') -}; diff --git a/src/main/resources/services/graphql/types/index.ts b/src/main/resources/services/graphql/types/index.ts new file mode 100644 index 000000000..ffb800e83 --- /dev/null +++ b/src/main/resources/services/graphql/types/index.ts @@ -0,0 +1,49 @@ +import { + IdProviderAccessEnum, + IdProviderModeEnum, + PermissionEnum, + PrincipalTypeEnum, + SortModeEnum, + UserItemTypeEnum, +} from './enums'; +import { + IdProviderAccessControlInput, + IdProviderConfigInput +} from './inputs'; +import { + IdProviderDeleteType, + IdProviderType, + PrincipalConnectionType, + PrincipalDeleteType, + PrincipalType, + PublicKeyType, + RepositoryType, + TypesType, + UserItemConnectionType +} from './objects'; + +export default { + enums: { + IdProviderAccessEnum, + IdProviderModeEnum, + PermissionEnum, + PrincipalTypeEnum, + SortModeEnum, + UserItemTypeEnum + }, + inputs: { + IdProviderAccessControlInput, + IdProviderConfigInput + }, + objects: { + IdProviderDeleteType, + IdProviderType, + PrincipalConnectionType, + PrincipalDeleteType, + PrincipalType, + PublicKeyType, + RepositoryType, + TypesType, + UserItemConnectionType + } +}; diff --git a/src/main/resources/services/graphql/types/inputs.js b/src/main/resources/services/graphql/types/inputs.js deleted file mode 100644 index c86415c64..000000000 --- a/src/main/resources/services/graphql/types/inputs.js +++ /dev/null @@ -1,45 +0,0 @@ -var graphQl = require('/lib/graphql'); - -var schemaGenerator = require('../schemaUtil').schemaGenerator; - -var graphQlEnums = require('./enums'); - -// eslint-disable-next-line no-unused-vars -var PrincipalInput = schemaGenerator.createInputObjectType({ - name: 'PrincipalInput', - description: 'Input definition for principal', - fields: { - key: { - type: graphQl.nonNull(graphQl.GraphQLString) - }, - displayName: { - type: graphQl.nonNull(graphQl.GraphQLString) - } - } -}); - -exports.IdProviderAccessControlInput = schemaGenerator.createInputObjectType({ - name: 'IdProviderAccessControlInput', - description: 'Input definition for id provider access control entry', - fields: { - principal: { - type: graphQl.nonNull(graphQl.GraphQLString) - }, - access: { - type: graphQl.nonNull(graphQlEnums.IdProviderAccessEnum) - } - } -}); - -exports.IdProviderConfigInput = schemaGenerator.createInputObjectType({ - name: 'IdProviderConfigInput', - description: 'Input definition for id provider auth config', - fields: { - applicationKey: { - type: graphQl.nonNull(graphQl.GraphQLString) - }, - config: { - type: graphQl.GraphQLString - } - } -}); diff --git a/src/main/resources/services/graphql/types/inputs.ts b/src/main/resources/services/graphql/types/inputs.ts new file mode 100644 index 000000000..8f66cf00e --- /dev/null +++ b/src/main/resources/services/graphql/types/inputs.ts @@ -0,0 +1,49 @@ +import { + GraphQLString, + nonNull + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; +import {InputTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../schemaUtil'; +import {IdProviderAccessEnum} from './enums'; + + +// TODO: ASFAIK, not used anywhere? +// schemaGenerator.createInputObjectType({ +// name: InputTypeNames.PrincipalInput, +// description: 'Input definition for principal', +// fields: { +// key: { +// type: nonNull(GraphQLString) +// }, +// displayName: { +// type: nonNull(GraphQLString) +// } +// } +// }); + +export const IdProviderAccessControlInput = schemaGenerator.createInputObjectType({ + name: InputTypeNames.IdProviderAccessControlInput, + description: 'Input definition for id provider access control entry', + fields: { + principal: { + type: nonNull(GraphQLString) + }, + access: { + type: nonNull(IdProviderAccessEnum) + } + } +}); + +export const IdProviderConfigInput = schemaGenerator.createInputObjectType({ + name: InputTypeNames.IdProviderConfigInput, + description: 'Input definition for id provider auth config', + fields: { + applicationKey: { + type: nonNull(GraphQLString) + }, + config: { + type: GraphQLString + } + } +}); diff --git a/src/main/resources/services/graphql/types/objects/aggregations.js b/src/main/resources/services/graphql/types/objects/aggregations.js deleted file mode 100644 index 5c82f491e..000000000 --- a/src/main/resources/services/graphql/types/objects/aggregations.js +++ /dev/null @@ -1,50 +0,0 @@ -var graphQl = require('/lib/graphql'); - -var schemaGenerator = require('../../schemaUtil').schemaGenerator; - -var BucketType = schemaGenerator.createObjectType({ - name: 'Bucket', - description: 'Aggregated result for specific key', - fields: { - key: { - type: graphQl.GraphQLString - }, - docCount: { - type: graphQl.GraphQLInt - } - } -}); - -var AggregationType = schemaGenerator.createObjectType({ - name: 'Aggregation', - description: 'List of buckets', - fields: { - name: { - type: graphQl.GraphQLString - }, - buckets: { - type: graphQl.list(BucketType), - resolve: function(env) { - return env.source.aggregation; - } - } - } -}); -exports.AggregationType = AggregationType; - -exports.createAggregationsFiled = function createAggregationsFiled() { - return { - type: graphQl.list(AggregationType), - resolve: function(env) { - var aggregations = env.source.aggregations; - var aggs = []; - Object.keys(aggregations).forEach(function(key) { - aggs.push({ - name: key, - aggregation: aggregations[key].buckets - }); - }); - return aggs; - } - }; -}; diff --git a/src/main/resources/services/graphql/types/objects/aggregations.ts b/src/main/resources/services/graphql/types/objects/aggregations.ts new file mode 100644 index 000000000..2648efc39 --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/aggregations.ts @@ -0,0 +1,55 @@ +import { + GraphQLInt, + GraphQLString, + list + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; +import {ObjectTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../../schemaUtil'; + + +const BucketType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.Bucket, + description: 'Aggregated result for specific key', + fields: { + key: { + type: GraphQLString + }, + docCount: { + type: GraphQLInt + } + } +}); + +export const AggregationType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.Aggregation, + description: 'List of buckets', + fields: { + name: { + type: GraphQLString + }, + buckets: { + type: list(BucketType), + resolve: function (env) { + return env.source.aggregation; + } + } + } +}); + +export function createAggregationsField() { + return { + type: list(AggregationType), + resolve: function (env) { + let aggregations = env.source.aggregations; + let aggs = []; + Object.keys(aggregations).forEach(function (key) { + aggs.push({ + name: key, + aggregation: aggregations[key].buckets + }); + }); + return aggs; + } + }; +} diff --git a/src/main/resources/services/graphql/types/objects/connection.js b/src/main/resources/services/graphql/types/objects/connection.js deleted file mode 100644 index 219fcf312..000000000 --- a/src/main/resources/services/graphql/types/objects/connection.js +++ /dev/null @@ -1,85 +0,0 @@ -var graphQl = require('/lib/graphql'); -var graphQlUtils = require('../../utils'); -var createAggregationsFiled = require('./aggregations').createAggregationsFiled; -var schemaGenerator = require('../../schemaUtil').schemaGenerator; - -var pageInfoType = schemaGenerator.createObjectType({ - name: 'PageInfo', - fields: { - startCursor: { - type: graphQl.nonNull(graphQl.GraphQLInt), - resolve: function(env) { - return graphQlUtils.toInt(env.source.startCursor); - } - }, - endCursor: { - type: graphQl.nonNull(graphQl.GraphQLInt), - resolve: function(env) { - return graphQlUtils.toInt(env.source.endCursor); - } - }, - hasNext: { - type: graphQl.nonNull(graphQl.GraphQLBoolean) - } - } -}); - -function createEdgeType(name, type) { - return schemaGenerator.createObjectType({ - name: name + 'Edge', - fields: { - node: { - type: graphQl.nonNull(type) - }, - cursor: { - type: graphQl.nonNull(graphQl.GraphQLInt), - resolve: function(env) { - return graphQlUtils.toInt(env.source.cursor); - } - } - } - }); -} - -exports.createConnectionType = function(name, type) { - return schemaGenerator.createObjectType({ - name: name + 'Connection', - fields: { - totalCount: { - type: graphQl.nonNull(graphQl.GraphQLInt), - resolve: function(env) { - return env.source.total; - } - }, - edges: { - type: graphQl.list(createEdgeType(name, type)), - resolve: function(env) { - var hits = env.source.hits; - var edges = []; - for (var i = 0; i < hits.length; i++) { - edges.push({ - node: hits[i], - cursor: env.source.start + i - }); - } - return edges; - } - }, - aggregations: createAggregationsFiled(), - pageInfo: { - type: pageInfoType, - resolve: function(env) { - return { - startCursor: env.source.start, - endCursor: - env.source.start + - (env.source.count === 0 ? 0 : env.source.count - 1), - hasNext: - env.source.start + env.source.count < - env.source.total - }; - } - } - } - }); -}; diff --git a/src/main/resources/services/graphql/types/objects/connection.ts b/src/main/resources/services/graphql/types/objects/connection.ts new file mode 100644 index 000000000..4b624e7f6 --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/connection.ts @@ -0,0 +1,96 @@ +import { + InterfaceTypeNames, + ObjectTypeNames +} from '/services/graphql/constants'; + +import { + GraphQLBoolean, + GraphQLInt, + list, + nonNull + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; +import {createAggregationsField} from './aggregations'; +import {schemaGenerator} from '../../schemaUtil'; + + +const pageInfoType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.PageInfo, + fields: { + startCursor: { + type: nonNull(GraphQLInt), + resolve: function (env) { + return env.source.startCursor.intValue(); + } + }, + endCursor: { + type: nonNull(GraphQLInt), + resolve: function (env) { + return env.source.endCursor.intValue(); + } + }, + hasNext: { + type: nonNull(GraphQLBoolean) + } + } +}); + +function createEdgeType(name: InterfaceTypeNames|ObjectTypeNames, type) { + return schemaGenerator.createObjectType({ + name: name + 'Edge', + fields: { + node: { + type: nonNull(type) + }, + cursor: { + type: nonNull(GraphQLInt), + resolve: function (env) { + return env.source.cursor.intValue(); + } + } + } + }); +} + +export function createConnectionType(name: InterfaceTypeNames|ObjectTypeNames, type) { + return schemaGenerator.createObjectType({ + name: name + 'Connection', + fields: { + totalCount: { + type: nonNull(GraphQLInt), + resolve: function (env) { + return env.source.total; + } + }, + edges: { + type: list(createEdgeType(name, type)), + resolve: function (env) { + let hits = env.source.hits; + let edges = []; + for (let i = 0; i < hits.length; i++) { + edges.push({ + node: hits[i], + cursor: env.source.start + i + }); + } + return edges; + } + }, + aggregations: createAggregationsField(), + pageInfo: { + type: pageInfoType, + resolve: function (env) { + return { + startCursor: env.source.start, + endCursor: + env.source.start + + (env.source.count === 0 ? 0 : env.source.count - 1), + hasNext: + env.source.start + env.source.count < + env.source.total + }; + } + } + } + }); +} diff --git a/src/main/resources/services/graphql/types/objects/idProvider.js b/src/main/resources/services/graphql/types/objects/idProvider.js deleted file mode 100644 index 4303b353b..000000000 --- a/src/main/resources/services/graphql/types/objects/idProvider.js +++ /dev/null @@ -1,117 +0,0 @@ -var graphQl = require('/lib/graphql'); - -var graphQlEnums = require('../enums'); - -var graphQlUserItem = require('./userItem'); - -var idprovidersLib = require('/lib/idproviders'); - -var schemaGenerator = require('../../schemaUtil').schemaGenerator; - -var IdProviderAccessControlEntryType = schemaGenerator.createObjectType({ - name: 'IdProviderAccessControlEntry', - description: 'Domain representation of id provider access control entry', - fields: { - principal: { - type: graphQl.reference('Principal') - }, - access: { - type: graphQlEnums.IdProviderAccessEnum - } - } -}); - -exports.IdProviderConfig = schemaGenerator.createObjectType({ - name: 'IdProviderConfig', - description: 'Domain representation of auth config for id provider', - fields: { - applicationKey: { - type: graphQl.GraphQLString - }, - config: { - type: graphQl.GraphQLString, - resolve: function(env) { - return JSON.stringify(env.source.config); - // TODO Create object type for property array - } - } - } -}); - -exports.IdProviderType = schemaGenerator.createObjectType({ - name: 'IdProvider', - description: 'Domain representation of an id provider', - interfaces: [graphQlUserItem.UserItemType], - fields: { - key: { - type: graphQl.GraphQLString, - resolve: function(env) { - return env.source.key || env.source._name; - } - }, - name: { - type: graphQl.GraphQLString, - resolve: function(env) { - return env.source.key || env.source._name; - } - }, - path: { - type: graphQl.GraphQLString, - resolve: function(env) { - return '/identity/' + (env.source.key || env.source._name); - } - }, - displayName: { - type: graphQl.GraphQLString - }, - description: { - type: graphQl.GraphQLString - }, - idProviderConfig: { - type: exports.IdProviderConfig - }, - idProviderMode: { - type: graphQlEnums.IdProviderModeEnum, - resolve: function(env) { - var idProviderKey = - env.source.idProviderConfig && - env.source.idProviderConfig.applicationKey; - return idProviderKey - ? idprovidersLib.getIdProviderMode(idProviderKey) - : null; - } - }, - permissions: { - type: graphQl.list(IdProviderAccessControlEntryType), - resolve: function(env) { - return idprovidersLib.getPermissions(env.source.key); - } - }, - modifiedTime: { - type: graphQl.GraphQLString, - resolve: function(env) { - return env.source._timestamp; - } - } - } -}); -graphQlUserItem.typeResolverMap.idProviderType = exports.IdProviderType; - -exports.IdProviderDeleteType = schemaGenerator.createObjectType({ - name: 'IdProviderDelete', - description: 'Result of an idProvider delete operation', - fields: { - key: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source.idProviderKey; - } - }, - deleted: { - type: graphQl.GraphQLBoolean - }, - reason: { - type: graphQl.GraphQLString - } - } -}); diff --git a/src/main/resources/services/graphql/types/objects/idProvider.ts b/src/main/resources/services/graphql/types/objects/idProvider.ts new file mode 100644 index 000000000..d42fccd20 --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/idProvider.ts @@ -0,0 +1,133 @@ +import { + GraphQLBoolean, + GraphQLString, + list, + reference + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; +import { + IdProviderAccessEnum, + IdProviderModeEnum +} from '../enums'; +import { + UserItemType, + typeResolverMap +} from './userItem'; +import { + getIdProviderMode, + getPermissions +} from '/lib/users/idproviders'; +import {ObjectTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../../schemaUtil'; + + +const IdProviderAccessControlEntryType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.IdProviderAccessControlEntry, + description: 'Domain representation of id provider access control entry', + fields: { + principal: { + type: reference(ObjectTypeNames.Principal) + }, + access: { + type: IdProviderAccessEnum + } + } +}); + +export const IdProviderConfig = schemaGenerator.createObjectType({ + name: ObjectTypeNames.IdProviderConfig, + description: 'Domain representation of auth config for id provider', + fields: { + applicationKey: { + type: GraphQLString + }, + config: { + type: GraphQLString, + resolve: function (env) { + return JSON.stringify(env.source.config); + // TODO Create object type for property array + } + } + } +}); + +export const IdProviderType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.IdProvider, + description: 'Domain representation of an id provider', + interfaces: [UserItemType], + // interfaces: [reference('UserItem')], + fields: { + key: { + type: GraphQLString, + resolve({source}) { + return source.key || source._name; + } + }, + name: { + type: GraphQLString, + resolve({source}) { + return source.key || source._name; + } + }, + path: { + type: GraphQLString, + resolve({source}) { + return '/identity/' + (source.key || source._name); + } + }, + displayName: { + type: GraphQLString + }, + description: { + type: GraphQLString + }, + idProviderConfig: { + type: IdProviderConfig + }, + idProviderMode: { + type: IdProviderModeEnum, + resolve({source}) { + let idProviderKey = + source.idProviderConfig && + source.idProviderConfig.applicationKey; + return idProviderKey + ? getIdProviderMode(idProviderKey) + : null; + } + }, + permissions: { + type: list(IdProviderAccessControlEntryType), + resolve({source}) { + return getPermissions(source.key); + } + }, + modifiedTime: { + type: GraphQLString, + resolve({source}) { + return source._timestamp; + } + } + } +}); + +// NOTE: This populates the typeResolverMap which is used inside the UserItem typeResolver +typeResolverMap.idProviderType = IdProviderType; + +export const IdProviderDeleteType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.IdProviderDelete, + description: 'Result of an idProvider delete operation', + fields: { + key: { + type: GraphQLString, + resolve({source}) { + return source.idProviderKey; + } + }, + deleted: { + type: GraphQLBoolean + }, + reason: { + type: GraphQLString + } + } +}); diff --git a/src/main/resources/services/graphql/types/objects/index.js b/src/main/resources/services/graphql/types/objects/index.js deleted file mode 100644 index fe6797c63..000000000 --- a/src/main/resources/services/graphql/types/objects/index.js +++ /dev/null @@ -1,25 +0,0 @@ -var graphQlConnection = require('./connection'); - -var graphQlIdProvider = require('./idProvider'); -var graphQlPrincipal = require('./principal'); -var graphQlUserItem = require('./userItem'); -var graphQlTypes = require('./types'); -var graphQlRepository = require('./repository'); - -module.exports = { - IdProviderType: graphQlIdProvider.IdProviderType, - IdProviderDeleteType: graphQlIdProvider.IdProviderDeleteType, - PrincipalType: graphQlPrincipal.PrincipalType, - PrincipalDeleteType: graphQlPrincipal.PrincipalDeleteType, - TypesType: graphQlTypes.TypesType, - PrincipalConnectionType: graphQlConnection.createConnectionType( - 'Principal', - graphQlPrincipal.PrincipalType - ), - UserItemConnectionType: graphQlConnection.createConnectionType( - 'UserItem', - graphQlUserItem.UserItemType - ), - RepositoryType: graphQlRepository.RepositoryType, - PublicKeyType: graphQlPrincipal.PublicKeyType, -}; diff --git a/src/main/resources/services/graphql/types/objects/index.ts b/src/main/resources/services/graphql/types/objects/index.ts new file mode 100644 index 000000000..fd7ce34f2 --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/index.ts @@ -0,0 +1,30 @@ +import { + InterfaceTypeNames, + ObjectTypeNames +} from '/services/graphql/constants'; +import {createConnectionType} from './connection'; +import {PrincipalType} from './principal'; +import {UserItemType} from './userItem'; + +export { + IdProviderDeleteType, + IdProviderType +} from './idProvider'; +export { + PrincipalDeleteType, + PublicKeyType +} from './principal'; +export {TypesType} from './types'; +export {RepositoryType} from './repository'; + +export {PrincipalType}; + +export const PrincipalConnectionType = createConnectionType( + ObjectTypeNames.Principal, + PrincipalType +); + +export const UserItemConnectionType = createConnectionType( + InterfaceTypeNames.UserItem, + UserItemType +); diff --git a/src/main/resources/services/graphql/types/objects/principal.js b/src/main/resources/services/graphql/types/objects/principal.js deleted file mode 100644 index 0042a922c..000000000 --- a/src/main/resources/services/graphql/types/objects/principal.js +++ /dev/null @@ -1,148 +0,0 @@ -var graphQl = require('/lib/graphql'); - -var principals = require('/lib/principals'); - -var schemaGenerator = require('../../schemaUtil').schemaGenerator; - -var graphQlEnums = require('../enums'); -var graphQlUtils = require('../../utils'); - -var graphQlUserItem = require('./userItem'); -var utilLib = require('/lib/util'); - -exports.PublicKeyType = schemaGenerator.createObjectType({ - name: 'PublicKey', - description: 'Public key for a user', - fields: { - kid: { - type: graphQl.GraphQLString, - }, - publicKey: { - type: graphQl.GraphQLString, - }, - label: { - type: graphQl.GraphQLString, - }, - creationTime: { - type: graphQl.GraphQLString, - } - } -}); - -var PrincipalAccessControlEntryType = schemaGenerator.createObjectType({ - name: 'PrincipalAccessControlEntry', - description: 'Domain representation of access control entry', - fields: { - principal: { - type: graphQl.reference('Principal'), - resolve: function (env) { - return principals.getByKeys(env.source.principal); - } - }, - allow: { - type: graphQl.list(graphQlEnums.PermissionEnum) - }, - deny: { - type: graphQl.list(graphQlEnums.PermissionEnum) - } - } -}); - -exports.PrincipalType = schemaGenerator.createObjectType({ - name: 'Principal', - description: 'Domain representation of a principal', - interfaces: [graphQlUserItem.UserItemType], - fields: { - key: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source.key || env.source._id; - } - }, - name: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source._name; - } - }, - path: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source._path; - } - }, - displayName: { - type: graphQl.GraphQLString - }, - description: { - type: graphQl.GraphQLString - }, - principalType: { - type: graphQlEnums.PrincipalTypeEnum - }, - idProviderKey: { - type: graphQl.GraphQLString - }, - permissions: { - type: graphQl.list(PrincipalAccessControlEntryType), - resolve: function (env) { - return env.source._permissions || []; - } - }, - login: { - type: graphQl.GraphQLString - }, - email: { - type: graphQl.GraphQLString - }, - memberships: { - type: graphQl.list(graphQl.reference('Principal')), - args: { - transitive: graphQl.GraphQLBoolean - }, - resolve: function (env) { - var key = env.source.key || env.source._id; - var transitive = env.args.transitive; - return graphQlUtils.toArray(principals.getMemberships(key, transitive)); - } - }, - members: { - type: graphQl.list(graphQl.GraphQLString), - resolve: function (env) { - return graphQlUtils.toArray(env.source.member); - } - }, - modifiedTime: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source._timestamp; - } - }, - publicKeys: { - type: graphQl.list(exports.PublicKeyType), - resolve: function (env) { - return env.source.profile ? utilLib.forceArray(env.source.profile.publicKeys) : []; - } - } - } -}); -graphQlUserItem.typeResolverMap.principalType = exports.PrincipalType; - -exports.PrincipalDeleteType = schemaGenerator.createObjectType({ - name: 'PrincipalDelete', - description: 'Result of a principal delete operation', - fields: { - key: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source.key; - } - }, - deleted: { - type: graphQl.GraphQLBoolean - }, - reason: { - type: graphQl.GraphQLString - } - } -}); diff --git a/src/main/resources/services/graphql/types/objects/principal.ts b/src/main/resources/services/graphql/types/objects/principal.ts new file mode 100644 index 000000000..4d6c3400e --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/principal.ts @@ -0,0 +1,167 @@ +import { + GraphQLBoolean, + GraphQLString, + list, + reference + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; + +import { + getByKeys, + getMemberships +} from '/lib/users/principals'; + +import {schemaGenerator} from '../../schemaUtil'; + +import { + PermissionEnum, + PrincipalTypeEnum +} from '../enums'; +import {toArray} from '../../utils'; +import {ObjectTypeNames} from '/services/graphql/constants'; +import { + UserItemType, + typeResolverMap +} from './userItem'; +import {forceArray} from '/lib/users/util'; + + +export const PublicKeyType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.PublicKey, + description: 'Public key for a user', + fields: { + kid: { + type: GraphQLString, + }, + publicKey: { + type: GraphQLString, + }, + label: { + type: GraphQLString, + }, + creationTime: { + type: GraphQLString, + } + } +}); + +let PrincipalAccessControlEntryType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.PrincipalAccessControlEntry, + description: 'Domain representation of access control entry', + fields: { + principal: { + type: reference(ObjectTypeNames.Principal), + resolve: function (env) { + return getByKeys(env.source.principal); + } + }, + allow: { + type: list(PermissionEnum) + }, + deny: { + type: list(PermissionEnum) + } + } +}); + +export const PrincipalType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.Principal, + description: 'Domain representation of a principal', + interfaces: [UserItemType], + // interfaces: [reference('UserItem')], // TODO constant + fields: { + key: { + type: GraphQLString, + resolve: function (env) { + return env.source.key || env.source._id; + } + }, + name: { + type: GraphQLString, + resolve: function (env) { + return env.source._name; + } + }, + path: { + type: GraphQLString, + resolve: function (env) { + return env.source._path; + } + }, + displayName: { + type: GraphQLString + }, + description: { + type: GraphQLString + }, + principalType: { + type: PrincipalTypeEnum + }, + idProviderKey: { + type: GraphQLString + }, + permissions: { + type: list(PrincipalAccessControlEntryType), + resolve: function (env) { + return env.source._permissions || []; + } + }, + login: { + type: GraphQLString + }, + email: { + type: GraphQLString + }, + memberships: { + type: list(reference(ObjectTypeNames.Principal)), + args: { + transitive: GraphQLBoolean + }, + resolve: function (env) { + let key = env.source.key || env.source._id; + let transitive = env.args.transitive; + return toArray(getMemberships(key, transitive)); + } + }, + members: { + type: list(GraphQLString), + resolve: function (env) { + return toArray(env.source.member); + } + }, + modifiedTime: { + type: GraphQLString, + resolve: function (env) { + return env.source._timestamp; + } + }, + publicKeys: { + type: list(PublicKeyType), + resolve: function (env) { + return env.source.profile ? forceArray(env.source.profile.publicKeys) : []; + } + } + } +}); + +// NOTE: This populates the typeResolverMap which is used inside the UserItem typeResolver +typeResolverMap.principalType = PrincipalType; + +export const PrincipalDeleteType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.PrincipalDelete, + description: 'Result of a principal delete operation', + fields: { + key: { + type: GraphQLString, + resolve(env) { + return env.source.key; + } + }, + deleted: { + type: GraphQLBoolean + }, + reason: { + type: GraphQLString + } + } +}); diff --git a/src/main/resources/services/graphql/types/objects/repository.js b/src/main/resources/services/graphql/types/objects/repository.js deleted file mode 100644 index 3d2644416..000000000 --- a/src/main/resources/services/graphql/types/objects/repository.js +++ /dev/null @@ -1,29 +0,0 @@ -var graphQl = require('/lib/graphql'); -var graphQlUtils = require('../../utils'); - -var schemaGenerator = require('../../schemaUtil').schemaGenerator; - -exports.RepositoryType = schemaGenerator.createObjectType({ - name: 'Repository', - description: 'Domain representation of a repository', - fields: { - id: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source._id; - } - }, - name: { - type: graphQl.GraphQLString, - resolve: function (env) { - return env.source._name; - } - }, - branches: { - type: graphQl.list(graphQl.GraphQLString), - resolve: function (env) { - return graphQlUtils.toArray(env.source.branches); - } - } - } -}); diff --git a/src/main/resources/services/graphql/types/objects/repository.ts b/src/main/resources/services/graphql/types/objects/repository.ts new file mode 100644 index 000000000..8d1299505 --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/repository.ts @@ -0,0 +1,34 @@ +import { + GraphQLString, + list + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; +import {toArray} from '../../utils'; +import {ObjectTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../../schemaUtil'; + + +export const RepositoryType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.Repository, + description: 'Domain representation of a repository', + fields: { + id: { + type: GraphQLString, + resolve: function (env) { + return env.source._id; + } + }, + name: { + type: GraphQLString, + resolve: function (env) { + return env.source._name; + } + }, + branches: { + type: list(GraphQLString), + resolve: function (env) { + return toArray(env.source.branches); + } + } + } +}); diff --git a/src/main/resources/services/graphql/types/objects/types.js b/src/main/resources/services/graphql/types/objects/types.js deleted file mode 100644 index 42b142a75..000000000 --- a/src/main/resources/services/graphql/types/objects/types.js +++ /dev/null @@ -1,31 +0,0 @@ -var graphQl = require('/lib/graphql'); - -var graphQlAggregations = require('./aggregations'); - -var schemaGenerator = require('../../schemaUtil').schemaGenerator; - -exports.TypesType = schemaGenerator.createObjectType({ - name: 'Types', - fields: { - totalCount: { - type: graphQl.nonNull(graphQl.GraphQLInt), - resolve: function(env) { - return env.source.total; - } - }, - aggregations: { - type: graphQl.list(graphQlAggregations.AggregationType), - resolve: function(env) { - var aggregations = env.source.aggregations; - var aggs = []; - Object.keys(aggregations).forEach(function(key) { - aggs.push({ - name: key, - aggregation: aggregations[key].buckets - }); - }); - return aggs; - } - } - } -}); diff --git a/src/main/resources/services/graphql/types/objects/types.ts b/src/main/resources/services/graphql/types/objects/types.ts new file mode 100644 index 000000000..124f317aa --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/types.ts @@ -0,0 +1,36 @@ +import { + GraphQLInt, + list, + nonNull + // @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +} from '/lib/graphql'; +import {AggregationType} from './aggregations'; +import {ObjectTypeNames} from '/services/graphql/constants'; +import {schemaGenerator} from '../../schemaUtil'; + + +export const TypesType = schemaGenerator.createObjectType({ + name: ObjectTypeNames.Types, + fields: { + totalCount: { + type: nonNull(GraphQLInt), + resolve({source}) { + return source.total; + } + }, + aggregations: { + type: list(AggregationType), + resolve(env) { + let aggregations = env.source.aggregations; + let aggs = []; + Object.keys(aggregations).forEach(function (key) { + aggs.push({ + name: key, + aggregation: aggregations[key].buckets + }); + }); + return aggs; + } + } + } +}); diff --git a/src/main/resources/services/graphql/types/objects/userItem.js b/src/main/resources/services/graphql/types/objects/userItem.js deleted file mode 100644 index 11ec725c2..000000000 --- a/src/main/resources/services/graphql/types/objects/userItem.js +++ /dev/null @@ -1,38 +0,0 @@ -var graphQl = require('/lib/graphql'); - -var schemaGenerator = require('../../schemaUtil').schemaGenerator; - -exports.typeResolverMap = { - principalType: null, - idProviderType: null -}; - -exports.UserItemType = schemaGenerator.createInterfaceType({ - name: 'UserItem', - description: 'User item is a base entity for every principal or id provider', - typeResolver: function(source) { - return source.principalType - ? exports.typeResolverMap.principalType - : exports.typeResolverMap.idProviderType; - }, - fields: { - key: { - type: graphQl.GraphQLString - }, - name: { - type: graphQl.GraphQLString - }, - path: { - type: graphQl.GraphQLString - }, - displayName: { - type: graphQl.GraphQLString - }, - description: { - type: graphQl.GraphQLString - }, - modifiedTime: { - type: graphQl.GraphQLString - } - } -}); diff --git a/src/main/resources/services/graphql/types/objects/userItem.ts b/src/main/resources/services/graphql/types/objects/userItem.ts new file mode 100644 index 000000000..9f0ab1b4a --- /dev/null +++ b/src/main/resources/services/graphql/types/objects/userItem.ts @@ -0,0 +1,52 @@ +// @ts-expect-error Cannot find module '/lib/graphql' or its corresponding type declarations.ts(2307) +import {GraphQLString} from '/lib/graphql'; +import {schemaGenerator} from '../../schemaUtil'; +import {InterfaceTypeNames} from '/services/graphql/constants'; + + +// When creating an ObjectType, it references which interfaces it's in. +// Either +// 1. The interface type must already be created +// (which means it's already in the schema) +// and it's javascript pointer can be used directly. +// Or +// 2. A graphql reference to a "future" type can be used, +// but then one must remember to actually add the interfacetype later on. +// +// TypeResolvers must return actual ObjectTypes, not references. +// This object is populated after the ObjectTypes are created, +// so it's ready when the typeResolver is called. +export const typeResolverMap = { + principalType: null, + idProviderType: null +}; + +export const UserItemType = schemaGenerator.createInterfaceType({ + name: InterfaceTypeNames.UserItem, + description: 'User item is a base entity for every principal or id provider', + typeResolver: function (source) { + return source.principalType + ? typeResolverMap.principalType + : typeResolverMap.idProviderType; + }, + fields: { + key: { + type: GraphQLString + }, + name: { + type: GraphQLString + }, + path: { + type: GraphQLString + }, + displayName: { + type: GraphQLString + }, + description: { + type: GraphQLString + }, + modifiedTime: { + type: GraphQLString + } + } +}); diff --git a/src/main/resources/services/graphql/utils.js b/src/main/resources/services/graphql/utils.js deleted file mode 100644 index 3ed71b380..000000000 --- a/src/main/resources/services/graphql/utils.js +++ /dev/null @@ -1,13 +0,0 @@ -exports.toArray = function(object) { - if (!object) { - return []; - } - if (object.constructor === Array) { - return object; - } - return [object]; -}; - -exports.toInt = function(number, defaultValue) { - return number == null ? defaultValue.intValue() : number.intValue(); -}; diff --git a/src/main/resources/services/graphql/utils.ts b/src/main/resources/services/graphql/utils.ts new file mode 100644 index 000000000..e634c512d --- /dev/null +++ b/src/main/resources/services/graphql/utils.ts @@ -0,0 +1,9 @@ +export function toArray(object) { + if (!object) { + return []; + } + if (object.constructor === Array) { + return object; + } + return [object]; +} diff --git a/src/main/resources/services/i18n/i18n.js b/src/main/resources/services/i18n/i18n.js deleted file mode 100644 index 05662a87b..000000000 --- a/src/main/resources/services/i18n/i18n.js +++ /dev/null @@ -1,21 +0,0 @@ -var i18n = require('/lib/xp/i18n'); -var admin = require('/lib/xp/admin'); - -exports.get = function () { - - return { - status: 200, - contentType: 'application/json', - body: getPhrases() - } -}; - -var getPhrases = function() { - var locales = admin.getLocales(); - var bundle = i18n.getPhrases(locales, ['i18n/common']); - var phrases = i18n.getPhrases(locales, ['i18n/phrases']); - - for (var key in phrases) { bundle[key] = phrases[key] } - - return bundle; -}; diff --git a/src/main/resources/services/i18n/i18n.ts b/src/main/resources/services/i18n/i18n.ts new file mode 100644 index 000000000..244b341ca --- /dev/null +++ b/src/main/resources/services/i18n/i18n.ts @@ -0,0 +1,14 @@ +import {getLocales} from '/lib/xp/admin'; +import {getPhrases} from '/lib/xp/i18n'; + +export function get() { + const locales = getLocales(); + const body = getPhrases(locales, ['i18n/common']); + const phrases = getPhrases(locales, ['i18n/phrases']); + for (let key in phrases) { body[key] = phrases[key]; } + return { + status: 200, + contentType: 'application/json', + body + }; +} diff --git a/src/main/resources/services/permissionReport/permissionReport.js b/src/main/resources/services/permissionReport/permissionReport.js deleted file mode 100644 index 51a9746b3..000000000 --- a/src/main/resources/services/permissionReport/permissionReport.js +++ /dev/null @@ -1,15 +0,0 @@ -var permissionReports = require('/lib/permissionReports'); - -exports.get = function (req) { - var principalKey = req.params.principalKey; - var repositoryId = req.params.repositoryId; - var branch = req.params.branch; - - var report = permissionReports.generateReport(principalKey, repositoryId, branch); - - return { - contentType: 'text/csv', - status: report ? 200 : 404, - body: report ? report : 'Not found' - }; -}; diff --git a/src/main/resources/services/permissionReport/permissionReport.ts b/src/main/resources/services/permissionReport/permissionReport.ts new file mode 100644 index 000000000..842f4ae0e --- /dev/null +++ b/src/main/resources/services/permissionReport/permissionReport.ts @@ -0,0 +1,15 @@ +import {generateReport} from '/lib/users/permissionReports'; + +export function get(req) { + let principalKey = req.params.principalKey; + let repositoryId = req.params.repositoryId; + let branch = req.params.branch; + + let report = generateReport(principalKey, repositoryId, branch); + + return { + contentType: 'text/csv', + status: report ? 200 : 404, + body: report ? report : 'Not found' + }; +} diff --git a/src/main/resources/tsconfig.json b/src/main/resources/tsconfig.json new file mode 100644 index 000000000..54f39c872 --- /dev/null +++ b/src/main/resources/tsconfig.json @@ -0,0 +1,38 @@ +{ + // This file is used by your code editor and the build system, + // for TypeScript files except for those under ./assets/ and ./static/ + // https://www.typescriptlang.org/tsconfig + "compilerOptions": { + "baseUrl": ".", + "declaration": false, + "lib": [ + "ES5" + ], + "paths": { + "/lib/xp/*": ["../../../node_modules/@enonic-types/lib-*"], + "/*": ["./*"] + }, + "rootDir": ".", + "skipLibCheck": true, + // "typeRoots": [ + // "node_modules/@types", + // "node_modules/@enonic-types" + // ], + "sourceMap": true, // Important to get correct line numbers? + + // We set target in tsup.config.ts instead + // "target": "es5", + + "types": [ + "@enonic-types/global" + // "global" // When typeRoots is set the prefix @enonic-types/ must be removed. + ] + }, + "exclude": [ + "./assets/**/*", + "./_static/**/*", + ], + "include": [ + "./**/*.ts" + ] +} diff --git a/src/main/resources/types/PageContributions.d.ts b/src/main/resources/types/PageContributions.d.ts new file mode 100644 index 000000000..7bb74133b --- /dev/null +++ b/src/main/resources/types/PageContributions.d.ts @@ -0,0 +1,6 @@ +export interface PageContributions { + headBegin?: string[] + headEnd?: string[] + bodyBegin?: string[] + bodyEnd?: string[] +} diff --git a/src/main/resources/types/Request.d.ts b/src/main/resources/types/Request.d.ts new file mode 100644 index 000000000..1d7fe1446 --- /dev/null +++ b/src/main/resources/types/Request.d.ts @@ -0,0 +1,41 @@ +export type StringObject = Record; + +export interface DefaultHeaders extends Headers { + accept?: string + 'accept-charset'?: string + 'accept-encoding'?: string + authorization?: string + cookies?: string + 'if-none-match'?: string + language?: string + 'user-agent'?: string +} + +export type Method = 'GET'|'POST'|'HEAD'|'PUT'|'DELETE'|'PATCH' + +export type Mode = 'edit'|'inline'|'live'|'preview' + +export type Request< + Body = string, + Cookies extends StringObject = StringObject, + Headers extends StringObject = DefaultHeaders, + Params extends StringObject = StringObject, + PathParams extends StringObject = StringObject +> = { + body?: Body + branch?: string + contextPath?: string + cookies?: Cookies + headers?: Headers + host?: string + method?: Method + mode?: Mode + params?: Params + path?: string + pathParams?: PathParams + port?: string|number + rawPath?: string + remoteAddress?: string + scheme?: string + url?: string +} // Request diff --git a/src/main/resources/types/Response.d.ts b/src/main/resources/types/Response.d.ts new file mode 100644 index 000000000..b3ce4dc60 --- /dev/null +++ b/src/main/resources/types/Response.d.ts @@ -0,0 +1,33 @@ +import type {PageContributions} from './PageContributions'; + +// https://developer.enonic.com/docs/xp/stable/framework/http#http-response +export interface ComplexCookie { + value: string // Value (required) The value to store in the cookie. This example will create a cookie looking like this complex: value. + path?: string // The paths on the site where this cookie should be available from (and all containing paths). Defaults to empty + domain?: string // Add additional sites that should be able to read the cookie. Defaults to empty (Only the server that creates the cookie can read it.) + comment?: string // A comment describing the cookie. Default to `null. Deprecated and will be removed in future versions of XP. + maxAge?: number // Number of seconds before the browser is allowed to delete the cookie. Defaults to -1 (The cookie will live until the browser is shut down.) + secure?: boolean // Control if the cookie should only be accepted to be created and read over https and similar secure protocols. Defaults to false + httpOnly?: boolean // Control if the cookie is available for scripts or not. If true, only the serverside code can read the cookie. Defaults to false (Also client-side scripts can read the cookie.) + sameSite?: string // XP 7.3.0 SameSite flag for the cookie. Can be lax, strict, none or for "not set". Default is "not set", meaning "browser’s default". +} + +export interface Response< + Body = string, + Headers extends Record = { + 'content-type'?: string + 'cache-control'?: string + 'content-security-policy'?: string + etag?: string|number + } +> { + applyFilters?: boolean + body?: Body + contentType?: string + cookies?: Record + headers?: Headers + pageContributions?: PageContributions + postProcess?: boolean + redirect?: string + status?: number +} diff --git a/src/main/resources/types/index.d.ts b/src/main/resources/types/index.d.ts new file mode 100644 index 000000000..0b0901a9a --- /dev/null +++ b/src/main/resources/types/index.d.ts @@ -0,0 +1,2 @@ +export type { Request } from './Request.d'; +export type { Response } from './Response.d'; diff --git a/src/test/resources/com/enonic/xp/app/users/lib/auth/createIdProvider-test.js b/src/test/resources/com/enonic/xp/app/users/lib/auth/createIdProvider-test.ts similarity index 89% rename from src/test/resources/com/enonic/xp/app/users/lib/auth/createIdProvider-test.js rename to src/test/resources/com/enonic/xp/app/users/lib/auth/createIdProvider-test.ts index 158d8528b..85ed77e80 100644 --- a/src/test/resources/com/enonic/xp/app/users/lib/auth/createIdProvider-test.js +++ b/src/test/resources/com/enonic/xp/app/users/lib/auth/createIdProvider-test.ts @@ -1,11 +1,15 @@ -var t = require('/lib/xp/testing'); -var auth = require('/lib/auth'); +import { + assertJsonEquals + // @ts-expect-error Cannot find module '/lib/xp/testing' or its corresponding type declarations.ts(2307) +} from '/lib/xp/testing'; +import { + createIdProvider as _createIdProvider +} from '/lib/users/auth'; -function createAndAssert(params) { - - var result = auth.createIdProvider(params); - var expectedJson = { +function createAndAssert(params) { + const result = _createIdProvider(params); + const expectedJson = { key: 'myIdProvider', displayName: 'Id provider test', description: 'Id provider used for testing', @@ -31,8 +35,8 @@ function createAndAssert(params) { ] }, { - name: "sessionTimeout", - type: "Long", + name: 'sessionTimeout', + type: 'Long', values: [{}] }, { @@ -77,10 +81,10 @@ function createAndAssert(params) { } }; - t.assertJsonEquals(expectedJson, result); + assertJsonEquals(expectedJson, result); } -exports.createIdProvider = function () { +export function createIdProvider() { createAndAssert({ name: 'myIdProvider', displayName: 'Id provider test', @@ -107,8 +111,8 @@ exports.createIdProvider = function () { ] }, { - name: "sessionTimeout", - type: "Long", + name: 'sessionTimeout', + type: 'Long', values: [ { v: null @@ -166,8 +170,8 @@ exports.createIdProvider = function () { } ] }); -}; +} -exports.createIdProviderByName = function () { +export function createIdProviderByName() { createAndAssert({name: 'myIdProvider'}); -}; +} diff --git a/src/test/resources/com/enonic/xp/app/users/lib/auth/defaultPermissions-test.js b/src/test/resources/com/enonic/xp/app/users/lib/auth/defaultPermissions-test.ts similarity index 52% rename from src/test/resources/com/enonic/xp/app/users/lib/auth/defaultPermissions-test.js rename to src/test/resources/com/enonic/xp/app/users/lib/auth/defaultPermissions-test.ts index 1cb8aed6f..a2b09812f 100644 --- a/src/test/resources/com/enonic/xp/app/users/lib/auth/defaultPermissions-test.js +++ b/src/test/resources/com/enonic/xp/app/users/lib/auth/defaultPermissions-test.ts @@ -1,11 +1,15 @@ -var t = require('/lib/xp/testing'); -var auth = require('/lib/auth'); +import { + assertJsonEquals + // @ts-expect-error Cannot find module '/lib/xp/testing' or its corresponding type declarations.ts(2307) +} from '/lib/xp/testing'; +import { + defaultPermissions as _defaultPermissions +} from '/lib/users/auth'; -exports.defaultPermissions = function () { - var result = auth.defaultPermissions(); - - var expectedJson = [ +export function defaultPermissions() { + const result = _defaultPermissions(); + const expectedJson = [ { principal: { 'type': 'user', @@ -20,7 +24,5 @@ exports.defaultPermissions = function () { access: 'ADMINISTRATOR' } ]; - - t.assertJsonEquals(expectedJson, result); - -}; + assertJsonEquals(expectedJson, result); +} diff --git a/src/test/resources/com/enonic/xp/app/users/lib/auth/deleteIdProviders-test.js b/src/test/resources/com/enonic/xp/app/users/lib/auth/deleteIdProviders-test.js deleted file mode 100644 index f2d9bb510..000000000 --- a/src/test/resources/com/enonic/xp/app/users/lib/auth/deleteIdProviders-test.js +++ /dev/null @@ -1,26 +0,0 @@ -var t = require('/lib/xp/testing'); -var auth = require('/lib/auth'); - -exports.deleteIdProviders = function () { - - var result = auth.deleteIdProviders({ - keys: ['invalid', 'myIdProvider'] - }); - - var expected = [ - { - idProviderKey: 'invalid', - deleted: false, - reason: 'IdProvider [invalid] not found' - }, - { - idProviderKey: 'myIdProvider', - deleted: true, - reason: undefined - } - ]; - - t.assertJsonEquals(expected, result); - -}; - diff --git a/src/test/resources/com/enonic/xp/app/users/lib/auth/deleteIdProviders-test.ts b/src/test/resources/com/enonic/xp/app/users/lib/auth/deleteIdProviders-test.ts new file mode 100644 index 000000000..dca80af94 --- /dev/null +++ b/src/test/resources/com/enonic/xp/app/users/lib/auth/deleteIdProviders-test.ts @@ -0,0 +1,28 @@ +import { + assertJsonEquals + // @ts-expect-error Cannot find module '/lib/xp/testing' or its corresponding type declarations.ts(2307) +} from '/lib/xp/testing'; +import { + deleteIdProviders as _deleteIdProviders +} from '/lib/users/auth'; + + +export function deleteIdProviders() { + const result = _deleteIdProviders({ + keys: ['invalid', 'myIdProvider'] + }); + const expected = [ + { + idProviderKey: 'invalid', + deleted: false, + reason: 'IdProvider [invalid] not found' + }, + { + idProviderKey: 'myIdProvider', + deleted: true, + reason: undefined + } + ]; + assertJsonEquals(expected, result); +} + diff --git a/src/test/resources/com/enonic/xp/app/users/lib/auth/getIdProvider-test.js b/src/test/resources/com/enonic/xp/app/users/lib/auth/getIdProvider-test.ts similarity index 69% rename from src/test/resources/com/enonic/xp/app/users/lib/auth/getIdProvider-test.js rename to src/test/resources/com/enonic/xp/app/users/lib/auth/getIdProvider-test.ts index 31a995ed1..d8c10d8a0 100644 --- a/src/test/resources/com/enonic/xp/app/users/lib/auth/getIdProvider-test.js +++ b/src/test/resources/com/enonic/xp/app/users/lib/auth/getIdProvider-test.ts @@ -1,11 +1,16 @@ -var t = require('/lib/xp/testing'); -var auth = require('/lib/auth'); +import { + assertEquals, + assertJsonEquals + // @ts-expect-error Cannot find module '/lib/xp/testing' or its corresponding type declarations.ts(2307) +} from '/lib/xp/testing'; +import { + getIdProvider as _getIdProvider +} from '/lib/users/auth'; -exports.getIdProvider = function () { - var result = auth.getIdProvider({key: 'myIdProvider'}); - - var expectedJson = { +export function getIdProvider() { + const result = _getIdProvider({key: 'myIdProvider'}); + const expectedJson = { key: 'myIdProvider', displayName: 'Id provider test', description: 'Id provider used for testing', @@ -31,9 +36,9 @@ exports.getIdProvider = function () { ] }, { - "name": "sessionTimeout", - "type": "Long", - "values": [ + 'name': 'sessionTimeout', + 'type': 'Long', + 'values': [ {} ] }, @@ -66,27 +71,22 @@ exports.getIdProvider = function () { ] }, { - "name": "emptySet", - "type": "PropertySet", - "values": [] + 'name': 'emptySet', + 'type': 'PropertySet', + 'values': [] }, { - "name": "defaultGroups", - "type": "Reference", - "values": [] + 'name': 'defaultGroups', + 'type': 'Reference', + 'values': [] } ] } }; + assertJsonEquals(expectedJson, result); +} - t.assertJsonEquals(expectedJson, result); - -}; - -exports.getNonExistingIdProvider = function () { - - var result = auth.getIdProvider({key: 'myIdProvider'}); - - t.assertEquals(null, result); - -}; +export function getNonExistingIdProvider() { + const result = _getIdProvider({key: 'myIdProvider'}); + assertEquals(null, result); +} diff --git a/src/test/resources/com/enonic/xp/app/users/lib/auth/getPermissions-test.js b/src/test/resources/com/enonic/xp/app/users/lib/auth/getPermissions-test.ts similarity index 56% rename from src/test/resources/com/enonic/xp/app/users/lib/auth/getPermissions-test.js rename to src/test/resources/com/enonic/xp/app/users/lib/auth/getPermissions-test.ts index 6bb98a3be..8363dd1a5 100644 --- a/src/test/resources/com/enonic/xp/app/users/lib/auth/getPermissions-test.js +++ b/src/test/resources/com/enonic/xp/app/users/lib/auth/getPermissions-test.ts @@ -1,11 +1,16 @@ -var t = require('/lib/xp/testing'); -var auth = require('/lib/auth'); - -exports.getPermissions = function () { - - var result = auth.getPermissions({key: 'myIdProvider'}); - - var expectedJson = [ +import { + assertEquals, + assertJsonEquals + // @ts-expect-error Cannot find module '/lib/xp/testing' or its corresponding type declarations.ts(2307) +} from '/lib/xp/testing'; +import { + getPermissions as _getPermissions +} from '/lib/users/auth'; + + +export function getPermissions() { + const result = _getPermissions({key: 'myIdProvider'}); + const expectedJson = [ { principal: { 'type': 'user', @@ -30,17 +35,11 @@ exports.getPermissions = function () { access: 'CREATE_USERS' } ]; - - t.assertJsonEquals(expectedJson, result); - -}; - -exports.getNonExistingPermissions = function () { - - var result = auth.getPermissions({key: 'myIdProvider'}); - - var length = result.length; - - t.assertEquals(0, length); - -}; + assertJsonEquals(expectedJson, result); +} + +export function getNonExistingPermissions() { + const result = _getPermissions({key: 'myIdProvider'}); + const length = result.length; + assertEquals(0, length); +} diff --git a/src/test/resources/com/enonic/xp/app/users/lib/auth/modifyIdProvider-test.js b/src/test/resources/com/enonic/xp/app/users/lib/auth/modifyIdProvider-test.ts similarity index 87% rename from src/test/resources/com/enonic/xp/app/users/lib/auth/modifyIdProvider-test.js rename to src/test/resources/com/enonic/xp/app/users/lib/auth/modifyIdProvider-test.ts index dd19d6e29..b6ce3646e 100644 --- a/src/test/resources/com/enonic/xp/app/users/lib/auth/modifyIdProvider-test.js +++ b/src/test/resources/com/enonic/xp/app/users/lib/auth/modifyIdProvider-test.ts @@ -1,8 +1,14 @@ -var t = require('/lib/xp/testing'); -var auth = require('/lib/auth'); +import { + assertJsonEquals + // @ts-expect-error Cannot find module '/lib/xp/testing' or its corresponding type declarations.ts(2307) +} from '/lib/xp/testing'; +import { + modifyIdProvider as _modifyIdProvider +} from '/lib/users/auth'; -exports.modifyIdProvider = function () { - var expectedJson = { + +export function modifyIdProvider() { + const expectedJson = { key: 'myIdProvider', displayName: 'Id provider test', description: 'Id provider used for testing', @@ -28,8 +34,8 @@ exports.modifyIdProvider = function () { ] }, { - name: "sessionTimeout", - type: "Long", + name: 'sessionTimeout', + type: 'Long', values: [{}] }, { @@ -74,10 +80,10 @@ exports.modifyIdProvider = function () { } }; - var result = auth.modifyIdProvider({ + const result = _modifyIdProvider({ key: 'myIdProvider', editor: function (idProvider) { - var newIdProvider = idProvider; + let newIdProvider = idProvider; newIdProvider.displayName = 'Id provider test'; newIdProvider.description = 'Id provider used for testing'; newIdProvider.idProviderConfig = { @@ -102,8 +108,8 @@ exports.modifyIdProvider = function () { ] }, { - name: "sessionTimeout", - type: "Long", + name: 'sessionTimeout', + type: 'Long', values: [ { v: null @@ -150,7 +156,7 @@ exports.modifyIdProvider = function () { } ] }; - return newIdProvider + return newIdProvider; }, permissions: [ { @@ -164,16 +170,16 @@ exports.modifyIdProvider = function () { ] }); - t.assertJsonEquals(expectedJson, result); -}; + assertJsonEquals(expectedJson, result); +} -exports.modifyIdProviderWithNullValues = function () { - var expectedJson = { +export function modifyIdProviderWithNullValues() { + const expectedJson = { key: 'myIdProvider', displayName: 'Id provider test' }; - var result = auth.modifyIdProvider({ + const result = _modifyIdProvider({ key: 'myIdProvider', editor: function (idProvider) { idProvider.description = null; @@ -182,5 +188,5 @@ exports.modifyIdProviderWithNullValues = function () { } }); - t.assertJsonEquals(expectedJson, result); -}; + assertJsonEquals(expectedJson, result); +} diff --git a/src/test/resources/tsconfig.json b/src/test/resources/tsconfig.json new file mode 100644 index 000000000..95dcc4b8d --- /dev/null +++ b/src/test/resources/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "baseUrl": ".", + // "rootDir": "../../main/resources" + "paths": { + "/lib/xp/*": ["../../../node_modules/@enonic-types/lib-*"], + "/*": ["../../main/resources/*"] + }, + "skipLibCheck": true, + "types": [ + "@enonic-types/global" + // "global" // When typeRoots is set the prefix @enonic-types/ must be removed. + ], + }, + "include": [ + "./**/*.ts" + ] +} diff --git a/testing/page_objects/confirmation.dialog.js b/testing/page_objects/confirmation.dialog.js index e63ba1e04..a4a0d024c 100644 --- a/testing/page_objects/confirmation.dialog.js +++ b/testing/page_objects/confirmation.dialog.js @@ -26,10 +26,11 @@ class ConfirmationDialog extends Page { async clickOnYesButton() { try { await this.clickOnElement(this.yesButton); - return await this.waitForElementNotDisplayed(XPATH.container, appConst.mediumTimeout); + await this.waitForElementNotDisplayed(XPATH.container, appConst.mediumTimeout); + await this.pause(500); } catch (err) { - this.saveScreenshot('err_close_confirmation_dialog'); - throw new Error('Confirmation dialog must be closed!') + let screenshot = await this.saveScreenshotUniqueName('err_close_confirmation_dialog'); + throw new Error('Confirmation dialog must be closed! screenshot: ' + screenshot + ' ' + err); } } diff --git a/testing/page_objects/page.js b/testing/page_objects/page.js index 89665a6e1..5ee1ad98f 100644 --- a/testing/page_objects/page.js +++ b/testing/page_objects/page.js @@ -177,7 +177,8 @@ class Page { await this.pause(400); return await this.getText(notificationXpath); } catch (err) { - throw new Error('Error when wait for the notification message: ' + err); + let screenshot = await this.saveScreenshotUniqueName('err_notification'); + throw new Error('Error when wait for the notification message, screenshot: ' + screenshot+ ' ' + err); } } diff --git a/testing/page_objects/wizardpanel/wizard.panel.js b/testing/page_objects/wizardpanel/wizard.panel.js index 03721be85..a8032dcc9 100644 --- a/testing/page_objects/wizardpanel/wizard.panel.js +++ b/testing/page_objects/wizardpanel/wizard.panel.js @@ -4,7 +4,6 @@ const Page = require('../page'); const lib = require('../../libs/elements'); const appConst = require('../../libs/app_const'); -const itemBuilders = require('../../libs/userItems.builder'); const XPATH = { displayNameInput: `//input[contains(@name,'displayName')]`, saveButton: "//button[contains(@id,'ActionButton') and child::span[text()='Save']]", @@ -25,19 +24,26 @@ class WizardPanel extends Page { return XPATH.deleteButton; } - waitForSaveButtonEnabled() { - return this.waitForElementEnabled(this.saveButton, appConst.mediumTimeout).catch(err => { - this.saveScreenshot("err_save_button"); - throw new Error("Save button is not enabled: " + err); - }) + async waitForSaveButtonEnabled() { + try { + return await this.waitForElementEnabled(this.saveButton, appConst.mediumTimeout); + } catch (err) { + let screenshot = await this.saveScreenshotUniqueName('err_wizard_save_btn'); + throw new Error('Save button should be enabled, screenshot: ' + screenshot + ' ' + err); + } } isSaveButtonEnabled() { return this.isElementEnabled(this.saveButton); } - waitForSaveButtonDisabled() { - return this.waitForElementDisabled(this.saveButton, appConst.mediumTimeout); + async waitForSaveButtonDisabled() { + try { + return await this.waitForElementDisabled(this.saveButton, appConst.mediumTimeout); + } catch (err) { + let screenshot = await this.saveScreenshotUniqueName('err_wizard_save_btn'); + throw new Error('Save button should be disabled, screenshot: ' + screenshot + ' ' + err); + } } waitForDeleteButtonDisabled() { @@ -58,20 +64,22 @@ class WizardPanel extends Page { async waitAndClickOnSave() { try { - await this.waitForSaveButtonEnabled(); + await this.waitForElementEnabled(this.saveButton, appConst.mediumTimeout); await this.clickOnElement(this.saveButton); return await this.pause(500); } catch (err) { - this.saveScreenshot(lib.generateRandomName("err_save_button")); - throw new Error("Error when Save button has been clicked!" + err); + let screenshot = await this.saveScreenshotUniqueName('err_wizard_save_btn'); + throw new Error('Error during clicking on Save, screenshot: ' + screenshot + ' ' + err); } } - clickOnDeleteButton() { - return this.clickOnElement(this.deleteButton).catch(err => { - this.saveScreenshot('err_delete_wizard'); - throw new Error('Error when Delete button has been clicked ' + err); - }); + async clickOnDeleteButton() { + try { + await this.clickOnElement(this.deleteButton) + } catch (err) { + let screenshot = await this.saveScreenshotUniqueName('err_delete_wizard'); + throw new Error('Error during clicking on Delete button, screenshot: ' + screenshot + ' ' + err); + } } async isItemInvalid(displayName) { diff --git a/testing/tests/idprovider.with.required.inputs.spec.js b/testing/tests/idprovider.with.required.inputs.spec.js index e7fa15e69..f6286d673 100644 --- a/testing/tests/idprovider.with.required.inputs.spec.js +++ b/testing/tests/idprovider.with.required.inputs.spec.js @@ -59,6 +59,7 @@ describe('Id Provider, provider-dialog specification', function () { await confirmationDialog.waitForDialogLoaded(); // 4. Click on 'Yes' button: await confirmationDialog.clickOnYesButton(); + await userBrowsePanel.pause(1000); // 5. Expected notification message should appear: await testUtils.saveScreenshot('provider_save_before_close_yes'); let message = await idProviderWizard.waitForNotificationMessage(); diff --git a/tsconfig.json b/tsconfig.json index 69642285c..39bb73a88 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,30 +1,32 @@ -{ +{ // https://www.typescriptlang.org/tsconfig "compilerOptions": { + "declaration": false, + "esModuleInterop": true, // Needed for the 'q' npm module + "lib": [ + "es2015", + "es2015.promise", + "dom" + ], "module": "commonjs", - "target": "es5", - "sourceMap": true, + "sourceMap": true, // Important to get correct line numbers? + + // We set target in tsup.config.ts instead + // "target": "es5", + "types": [ "hasher", "q", "nanoid", "owasp-password-strength-test" - ], - "lib": [ - "es2015", - "es2015.promise", - "dom" ] }, - "files": [ - "./src/main/resources/assets/js/main.ts" - ], "exclude": [ "build/**/*", "out/**/*", - "node_modules/*" + "node_modules/*", + "src/main/resources/**/*" ], "include": [ - "src/**/*", "../lib-admin-ui/src/main/resources/assets/admin/common/js/_**/*.ts", ".xp/dev/lib-admin-ui/**/*.ts" ] diff --git a/tsup.config.ts b/tsup.config.ts new file mode 100644 index 000000000..a6611987f --- /dev/null +++ b/tsup.config.ts @@ -0,0 +1,25 @@ +import type { Options } from './tsup'; + +import { defineConfig } from 'tsup'; +import { + DIR_DST, + DIR_DST_STATIC, + DIR_DST_TEST +} from './tsup/constants'; + + +export default defineConfig((options: Options) => { + if (options.d === DIR_DST) { + return import('./tsup/server').then(m => m.default()); + } + if (options.d === DIR_DST_TEST) { + return import('./tsup/test').then(m => m.default()); + } + if (options.d === 'build/resources/main/assets') { + return import('./tsup/assets').then(m => m.default()); + } + if (options.d === DIR_DST_STATIC) { + return import('./tsup/static').then(m => m.default()); + } + throw new Error(`Unconfigured directory:${options.d}!`) +}); diff --git a/tsup/addControllersInFolder.ts b/tsup/addControllersInFolder.ts new file mode 100644 index 000000000..030854240 --- /dev/null +++ b/tsup/addControllersInFolder.ts @@ -0,0 +1,13 @@ +import { readdirSync } from 'fs'; +import { resolve } from 'path/posix'; + + +export function addControllersInFolder(path: string, entry: string[]) { + readdirSync(resolve(path), { + withFileTypes: true + }) + .filter(dirent => dirent.isDirectory()) + .forEach(dirent => { + entry.push(`${path}/${dirent.name}/${dirent.name}.ts`); + }); +} diff --git a/tsup/addRecursive.ts b/tsup/addRecursive.ts new file mode 100644 index 000000000..1ee63720e --- /dev/null +++ b/tsup/addRecursive.ts @@ -0,0 +1,6 @@ +import { globSync } from 'glob'; + + +export function addRecursive(path: string, entry: string[]) { + globSync(`${path}/**/*.ts`).forEach(f => entry.push(f)); +} diff --git a/tsup/assets.ts b/tsup/assets.ts new file mode 100644 index 000000000..fb27156b7 --- /dev/null +++ b/tsup/assets.ts @@ -0,0 +1,45 @@ +import type { Options } from '.'; + +import esbuildPluginExternalGlobal from 'esbuild-plugin-external-global'; +import { + DIR_DST_ASSETS, + DIR_SRC_ASSETS +} from './constants'; + +export default function buildAssetConfig(): Options { + return { + bundle: true, + dts: false, // d.ts files are use useless at runtime + entry: { + 'js/app-users-bundle': `${DIR_SRC_ASSETS}/js/main.ts`, + 'js/crypto-worker': `${DIR_SRC_ASSETS}/js/worker/RSAKeysWorker.ts`, + }, + esbuildOptions(options, context) { + options.banner = { + js: `const jQuery = $;` // jQuery UI Tabbable requires this + }; + }, + esbuildPlugins: [ + esbuildPluginExternalGlobal.externalGlobalPlugin({ + 'jquery': 'window.$' + }) + ], + format: [ + 'cjs' + ], + minify: process.env.NODE_ENV !== 'development', + noExternal: [ // Same as dependencies in package.json + /@enonic\/lib-admin-ui/, + 'hasher', + 'jquery', // This will bundle jQuery into the bundle + 'nanoid', + 'owasp-password-strength-test', + 'q' + ], + outDir: DIR_DST_ASSETS, + platform: 'browser', + silent: ['QUIET', 'WARN'].includes(process.env.LOG_LEVEL_FROM_GRADLE||''), + sourcemap: process.env.NODE_ENV === 'development', + tsconfig: `${DIR_SRC_ASSETS}/tsconfig.json`, + }; +} diff --git a/tsup/constants.ts b/tsup/constants.ts new file mode 100644 index 000000000..9638c5bb6 --- /dev/null +++ b/tsup/constants.ts @@ -0,0 +1,9 @@ +export const DIR_DST = 'build/resources/main'; +export const DIR_DST_ASSETS = `${DIR_DST}/assets`; +export const DIR_DST_STATIC = `${DIR_DST}/_static`; +export const DIR_DST_TEST = 'build/resources/test'; + +export const DIR_SRC = 'src/main/resources'; +export const DIR_SRC_ASSETS = `${DIR_SRC}/assets`; +export const DIR_SRC_STATIC = `${DIR_SRC}/_static`; +export const DIR_SRC_TEST = 'src/test/resources'; diff --git a/tsup/index.d.ts b/tsup/index.d.ts new file mode 100644 index 000000000..78bc72401 --- /dev/null +++ b/tsup/index.d.ts @@ -0,0 +1,5 @@ +import type { Options as TsupOptions } from 'tsup'; + +export interface Options extends TsupOptions { + d?: string +} diff --git a/tsup/server.ts b/tsup/server.ts new file mode 100644 index 000000000..5e5a7a11e --- /dev/null +++ b/tsup/server.ts @@ -0,0 +1,63 @@ +import type { Options } from '.'; + +import { globSync } from 'glob'; +import { + DIR_SRC, + DIR_SRC_ASSETS, + DIR_SRC_STATIC +} from './constants'; + + +export default function buildServerConfig(): Options { + const entry = globSync(`${DIR_SRC}/**/*.ts`, { + absolute: false, + ignore: globSync(`${DIR_SRC_ASSETS}/**/*.ts`).concat( + globSync(`${DIR_SRC_STATIC}/**/*.ts`) + ) + }); + + return { + bundle: true, // Needed for @enonic/lib-admin-ui + dts: false, // d.ts files are use useless at runtime + entry, + esbuildOptions(options, context) { + options.chunkNames = '_chunks/[name]-[hash]'; + options.mainFields = ['module', 'main']; + }, + esbuildPlugins: [], + external: [ + '/lib/cache', + '/lib/enonic/static', + /^\/lib\/guillotine/, + '/lib/graphql', + '/lib/graphql-connection', + '/lib/http-client', + '/lib/license', + '/lib/mustache', + '/lib/router', + '/lib/util', + '/lib/vanilla', + '/lib/text-encoding', + '/lib/thymeleaf', + /^\/lib\/xp\//, + ], + format: 'cjs', + inject: [], + minify: false, // Minifying server files makes debugging harder + + // TIP: Command to check if there are any bad requires left behind + // grep -r 'require("' build/resources/main | grep -v 'require("/'|grep -v chunk + noExternal: [], + + platform: 'neutral', + silent: ['QUIET', 'WARN'].includes(process.env.LOG_LEVEL_FROM_GRADLE||''), + shims: false, // https://tsup.egoist.dev/#inject-cjs-and-esm-shims + + splitting: false, // In order for tests to work + + sourcemap: false, + target: 'es5', + tsconfig: `${DIR_SRC}/tsconfig.json`, + }; +} + diff --git a/tsup/static.ts b/tsup/static.ts new file mode 100644 index 000000000..68c7f1736 --- /dev/null +++ b/tsup/static.ts @@ -0,0 +1,99 @@ +import type { Options } from '.'; + + +import CopyWithHashPlugin from '@enonic/esbuild-plugin-copy-with-hash'; +import TsupPluginManifest from '@enonic/tsup-plugin-manifest'; +import GlobalsPlugin from 'esbuild-plugin-globals'; + +import { + DIR_DST_STATIC, + DIR_SRC_STATIC +} from './constants'; + + +export default function buildStaticConfig(): Options { + return { + bundle: true, + dts: false, + entry: { + 'app-users-bundle': `${DIR_SRC_STATIC}/main.ts`, + 'crypto-worker': `${DIR_SRC_STATIC}/worker/RSAKeysWorker.ts`, + }, + esbuildOptions(options, context) { + options.keepNames = true; + }, + esbuildPlugins: [ + GlobalsPlugin({ + '@enonic/legacy-slickgrid.*'(modulename) { + return 'Slick'; + }, + 'dompurify': 'DOMPurify', + 'hasher': 'hasher', + 'jquery': '$', + 'mousetrap': 'Mousetrap', + 'owasp-password-strength-test': 'owaspPasswordStrengthTest', + 'q': 'Q', + 'signals': 'signals', + }), + CopyWithHashPlugin({ + context: 'node_modules', + manifest: `node_modules-manifest.json`, + patterns: [ + '@enonic/legacy-slickgrid/index.js', + 'dompurify/dist/*.js', + 'hasher/dist/js/*.js', + 'jquery/dist/*.*', + 'jquery-ui-dist/*.*', + 'mousetrap/mousetrap*.js', + 'owasp-password-strength-test/owasp-password-strength-test.js', + 'q/*.js', + 'signals/dist/*.js', + ] + }), + TsupPluginManifest({ + generate: (entries) => {// Executed once per format + const newEntries = {}; + Object.entries(entries).forEach(([k,v]) => { + console.log(k,v); + const ext = v.split('.').pop() as string; + const parts = k.replace(`${DIR_SRC_STATIC}/`, '').split('.'); + parts.pop(); + parts.push(ext); + newEntries[parts.join('.')] = v.replace(`${DIR_DST_STATIC}/`, ''); + }); + return newEntries; + } + }), + ], + format: [ + 'cjs' + ], + + minify: false, + + // NOTE: By default tsup bundles all import-ed modules except dependencies and peerDependencies. + noExternal: [ + /@enonic\/lib-admin-ui.*/, + 'nanoid', // nanoid@5 can't be CJS globalized + // These need to be listed here for esbuildPluginExternalGlobal to work + /@enonic\/legacy-slickgrid.*/, + 'dompurify', + 'jquery', + 'hasher', + 'mousetrap', + 'owasp-password-strength-test', + 'q', + 'signals' + ], + outDir: DIR_DST_STATIC, + platform: 'browser', + silent: ['QUIET', 'WARN'].includes(process.env.LOG_LEVEL_FROM_GRADLE||''), + splitting: false, + sourcemap: process.env.NODE_ENV === 'development', + + // INFO: Sourcemaps works when target is set here, rather than in tsconfig.json + target: 'es2020', + + tsconfig: `${DIR_SRC_STATIC}/tsconfig.json`, + } as Options; +} diff --git a/tsup/test.ts b/tsup/test.ts new file mode 100644 index 000000000..9cca3ee1d --- /dev/null +++ b/tsup/test.ts @@ -0,0 +1,42 @@ +import type { Options } from '.'; + +import { DIR_SRC_TEST } from './constants'; +import {addRecursive} from './addRecursive'; + + +export default function buildServerConfig(): Options { + const entry: string[] = []; + addRecursive(DIR_SRC_TEST, entry); + + return { + bundle: true, + dts: false, // d.ts files are use useless at runtime + entry, + esbuildOptions(options, context) { + options.chunkNames = '_chunks/[name]-[hash]'; + + options.mainFields = ['module', 'main']; + + options.outbase = DIR_SRC_TEST; + }, + esbuildPlugins: [], + external: [ + /^\//, + ], + format: 'cjs', + inject: [ + ], + minify: false, // Minifying server files makes debugging harder + + noExternal: [], + + platform: 'neutral', + silent: ['QUIET', 'WARN'].includes(process.env.LOG_LEVEL_FROM_GRADLE||''), + shims: false, // https://tsup.egoist.dev/#inject-cjs-and-esm-shims + splitting: true, + sourcemap: false, + target: 'es5', + tsconfig: `${DIR_SRC_TEST}/tsconfig.json`, + }; +} + diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index e3a1db607..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,80 +0,0 @@ -const MiniCssExtractPlugin = require("mini-css-extract-plugin"); -const CircularDependencyPlugin = require('circular-dependency-plugin'); -const TerserPlugin = require('terser-webpack-plugin'); -const path = require('path'); -const fs = require('fs'); - -const swcConfig = JSON.parse(fs.readFileSync('./.swcrc')); - -const isProd = process.env.NODE_ENV === 'production'; - -module.exports = { - context: path.join(__dirname, '/src/main/resources/assets'), - entry: { - 'js/bundle': './js/main.ts', - 'js/crypto-worker': './js/worker/RSAKeysWorker.ts', - 'styles/main': './styles/main.less', - }, - output: { - path: path.join(__dirname, '/build/resources/main/assets'), - filename: './[name].js', - assetModuleFilename: './[file]' - }, - resolve: { - extensions: ['.ts', '.js', '.less', '.css'] - }, - module: { - rules: [ - { - test: /\.js$/, - enforce: 'pre', - use: ['source-map-loader'], - }, - { - test: /\.ts$/, - use: [ - { - loader: 'swc-loader', - options: { - ...swcConfig, - sourceMaps: isProd ? false : 'inline', - inlineSourcesContent: !isProd, - }, - }, - ], - }, - { - test: /\.less$/, - use: [ - {loader: MiniCssExtractPlugin.loader, options: {publicPath: '../'}}, - {loader: 'css-loader', options: {sourceMap: !isProd, importLoaders: 1}}, - {loader: 'postcss-loader', options: {sourceMap: !isProd}}, - {loader: 'less-loader', options: {sourceMap: !isProd}}, - ] - } - ] - }, - optimization: { - minimizer: [ - new TerserPlugin({ - terserOptions: { - keep_classnames: true, - keep_fnames: true - } - }) - ], - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: '[name].css', - chunkFilename: './styles/[id].css' - }), - new CircularDependencyPlugin({ - exclude: /a\.js|node_modules/, - failOnError: true - }), - ], - mode: isProd ? 'production' : 'development', - devtool: isProd ? false : 'source-map', - performance: {hints: false} -};