diff --git a/.changeset/config.json b/.changeset/config.json index 97887d6..f26daf1 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,11 +1,11 @@ { - "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", - "changelog": "@changesets/cli/changelog", - "commit": false, - "fixed": [], - "linked": [], - "access": "public", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [] + "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] } diff --git a/.editorconfig b/.editorconfig index 311b922..91729b5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,7 +3,7 @@ root = true [*] charset = utf-8 end_of_line = lf -indent_size = 4 +indent_size = 2 indent_style = space insert_final_newline = true max_line_length = 120 diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index cd8688c..0000000 --- a/.eslintignore +++ /dev/null @@ -1,9 +0,0 @@ -node_modules -coverage -dist -docs -temp - -# Config files -tsup.config.ts -vitest.config.ts diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 3ac96c9..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "root": true, - "extends": "@nodecfdi/eslint-config-nodecfdi", - "rules": { - "unicorn/prefer-dom-node-append": "off" - } -} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 40410b2..1e96dd3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,77 +1,77 @@ name: build on: - push: - branches: - - main - - dev - pull_request: - branches: - - main - - dev - schedule: - - cron: '0 16 * * 0' # sunday 16:00 + push: + branches: + - main + - dev + pull_request: + branches: + - main + - dev + schedule: + - cron: '0 16 * * 0' # sunday 16:00 jobs: - build: - name: Node unit tests - runs-on: ubuntu-latest - strategy: - matrix: - node: ['16', '17', '18', '19', '20'] - steps: - - name: Checkout - uses: actions/checkout@v3 + build: + name: Node unit tests + runs-on: ubuntu-latest + strategy: + matrix: + node: ['16', '17', '18', '19', '20'] + steps: + - name: Checkout + uses: actions/checkout@v3 - - name: Cache .pnpm-store - uses: actions/cache@v3 - with: - path: ~/.pnpm-store - key: ${{ runner.os }}-node${{ matrix.node }}-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Cache .pnpm-store + uses: actions/cache@v3 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-node${{ matrix.node }}-${{ hashFiles('**/pnpm-lock.yaml') }} - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} - - name: Install dependencies - uses: pnpm/action-setup@v2 - with: - version: 8 - run_install: true + - name: Install dependencies + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: true - - name: Lint source - run: | - pnpm lint:check + - name: Lint source + run: | + pnpm lint:check - - name: Build package - run: | - pnpm build + - name: Build package + run: | + pnpm build - - name: Run tests - run: | - pnpm test:run - env: - CI: true + - name: Run tests + run: | + pnpm test:run + env: + CI: true - - name: 'Consume changesets' - if: github.event_name == 'push' && github.repository == 'nodecfdi/cfdiutils-common' && matrix.node == 16 && github.ref == 'refs/heads/main' - uses: changesets/action@v1 - id: 'changesets' - with: - # This expects you to have a script called release which does a build for your packages and calls changeset publish - publish: pnpm release - commit: 'chore: version bump' - title: Next release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: 'Consume changesets' + if: github.event_name == 'push' && github.repository == 'nodecfdi/cfdiutils-common' && matrix.node == 16 && github.ref == 'refs/heads/main' + uses: changesets/action@v1 + id: 'changesets' + with: + # This expects you to have a script called release which does a build for your packages and calls changeset publish + publish: pnpm release + commit: 'chore: version bump' + title: Next release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: 'Generate docs' - if: steps.changesets.outputs.published == 'true' - run: pnpm gen:docs + - name: 'Generate docs' + if: steps.changesets.outputs.published == 'true' + run: pnpm gen:docs - - name: Commit docs - if: steps.changesets.outputs.published == 'true' - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: 'docs: generate docs' + - name: Commit docs + if: steps.changesets.outputs.published == 'true' + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: 'docs: generate docs' diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 4c8ccbd..e4a4f9e 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -1,107 +1,107 @@ name: sonarcloud on: - push: - branches: - - main - - dev + push: + branches: + - main + - dev jobs: - tests-coverage: - name: Build code coverage - runs-on: 'ubuntu-latest' - steps: - - name: Checkout - uses: actions/checkout@v3 + tests-coverage: + name: Build code coverage + runs-on: 'ubuntu-latest' + steps: + - name: Checkout + uses: actions/checkout@v3 - - name: Cache .pnpm-store - uses: actions/cache@v3 - with: - path: ~/.pnpm-store - key: ${{ runner.os }}-node16-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Cache .pnpm-store + uses: actions/cache@v3 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-node16-${{ hashFiles('**/pnpm-lock.yaml') }} - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: '16' + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: '16' - - name: Install dependencies - uses: pnpm/action-setup@v2 - with: - version: 8 - run_install: true + - name: Install dependencies + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: true - - name: Create code coverage - run: | - pnpm test:coverage - env: - CI: true + - name: Create code coverage + run: | + pnpm test:coverage + env: + CI: true - - name: Store code coverage - uses: actions/upload-artifact@v3 - with: - name: code-coverage - path: coverage + - name: Store code coverage + uses: actions/upload-artifact@v3 + with: + name: code-coverage + path: coverage - sonarcloud-secrets: - name: SonarCloud check secrets are present - runs-on: ubuntu-latest - outputs: - github: ${{ steps.check-secrets.outputs.github }} - sonar: ${{ steps.check-secrets.outputs.sonar }} - steps: - - name: Check secrets are present - id: check-secrets - run: | - if [ -n "${{ secrets.GITHUB_TOKEN }}" ]; then - echo "github=yes" >> $GITHUB_OUTPUT - else - echo "github=no" >> $GITHUB_OUTPUT - echo "::warning ::GITHUB_TOKEN non set" - fi - if [ -n "${{ secrets.SONAR_TOKEN }}" ]; then - echo "sonar=yes" >> $GITHUB_OUTPUT - else - echo "sonar=no" >> $GITHUB_OUTPUT - echo "::warning ::SONAR_TOKEN non set" - fi + sonarcloud-secrets: + name: SonarCloud check secrets are present + runs-on: ubuntu-latest + outputs: + github: ${{ steps.check-secrets.outputs.github }} + sonar: ${{ steps.check-secrets.outputs.sonar }} + steps: + - name: Check secrets are present + id: check-secrets + run: | + if [ -n "${{ secrets.GITHUB_TOKEN }}" ]; then + echo "github=yes" >> $GITHUB_OUTPUT + else + echo "github=no" >> $GITHUB_OUTPUT + echo "::warning ::GITHUB_TOKEN non set" + fi + if [ -n "${{ secrets.SONAR_TOKEN }}" ]; then + echo "sonar=yes" >> $GITHUB_OUTPUT + else + echo "sonar=no" >> $GITHUB_OUTPUT + echo "::warning ::SONAR_TOKEN non set" + fi - sonarcloud: - name: SonarCloud Scan and Report - needs: ['tests-coverage', 'sonarcloud-secrets'] - if: ${{ needs.sonarcloud-secrets.outputs.github == 'yes' && needs.sonarcloud-secrets.outputs.sonar == 'yes' }} - runs-on: 'ubuntu-latest' - steps: - - name: Checkout - uses: actions/checkout@v3 + sonarcloud: + name: SonarCloud Scan and Report + needs: ['tests-coverage', 'sonarcloud-secrets'] + if: ${{ needs.sonarcloud-secrets.outputs.github == 'yes' && needs.sonarcloud-secrets.outputs.sonar == 'yes' }} + runs-on: 'ubuntu-latest' + steps: + - name: Checkout + uses: actions/checkout@v3 - - name: Unshallow clone to provide blame information - run: git fetch --unshallow + - name: Unshallow clone to provide blame information + run: git fetch --unshallow - - name: Cache .pnpm-store - uses: actions/cache@v3 - with: - path: ~/.pnpm-store - key: ${{ runner.os }}-node16-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Cache .pnpm-store + uses: actions/cache@v3 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-node16-${{ hashFiles('**/pnpm-lock.yaml') }} - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: '16' + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: '16' - - name: Install dependencies - uses: pnpm/action-setup@v2 - with: - version: 8 - run_install: true + - name: Install dependencies + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: true - - name: Obtain code coverage - uses: actions/download-artifact@v3 - with: - name: code-coverage - path: coverage + - name: Obtain code coverage + uses: actions/download-artifact@v3 + with: + name: code-coverage + path: coverage - - name: SonarCloud Scan - uses: sonarsource/sonarcloud-github-action@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + - name: SonarCloud Scan + uses: sonarsource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index cf0c46b..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx --no-install lint-staged diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..e1d6aa3 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,15 @@ +/** @type {import("prettier").Config} */ +const config = { + printWidth: 120, + tabWidth: 2, + useTabs: false, + semi: true, + singleQuote: true, + quoteProps: 'consistent', + trailingComma: 'all', + bracketSpacing: true, + arrowParens: 'always', + endOfLine: 'lf', +}; + +module.exports = config; diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index a82871d..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "printWidth": 120, - "tabWidth": 4, - "useTabs": false, - "semi": true, - "singleQuote": true, - "quoteProps": "consistent", - "trailingComma": "all", - "bracketSpacing": true, - "arrowParens": "always", - "endOfLine": "lf" -} diff --git a/.xo-config.cjs b/.xo-config.cjs new file mode 100644 index 0000000..bb4221f --- /dev/null +++ b/.xo-config.cjs @@ -0,0 +1,68 @@ +/** @type {import("xo").Options} */ +const config = { + space: true, + prettier: true, + ignores: ['docs', 'dist', 'coverage', '.husky'], + rules: { + // Typescript rules + '@typescript-eslint/ban-types': [ + 'error', + { + extendDefaults: false, + types: { + 'String': { + message: 'Use `string` instead.', + fixWith: 'string', + }, + 'Number': { + message: 'Use `number` instead.', + fixWith: 'number', + }, + 'Boolean': { + message: 'Use `boolean` instead.', + fixWith: 'boolean', + }, + 'Symbol': { + message: 'Use `symbol` instead.', + fixWith: 'symbol', + }, + 'BigInt': { + message: 'Use `bigint` instead.', + fixWith: 'bigint', + }, + 'Object': { + message: + 'The `Object` type is mostly the same as `unknown`. You probably want `Record` instead. See https://github.com/typescript-eslint/typescript-eslint/pull/848', + fixWith: 'Record', + }, + '{}': { + message: + 'The `{}` type is mostly the same as `unknown`. You probably want `Record` instead.', + fixWith: 'Record', + }, + 'object': { + message: + 'The `object` type is hard to use. Use `Record` instead. See: https://github.com/typescript-eslint/typescript-eslint/pull/848', + fixWith: 'Record', + }, + 'Function': 'Use a specific function type instead, like `() => void`.', + 'Buffer': { + message: 'Use Uint8Array instead. See: https://sindresorhus.com/blog/goodbye-nodejs-buffer', + suggest: ['Uint8Array'], + }, + '[]': "Don't use the empty array type `[]`. It only allows empty arrays. Use `SomeType[]` instead.", + '[[]]': + "Don't use `[[]]`. It only allows an array with a single element which is an empty array. Use `SomeType[][]` instead.", + '[[[]]]': "Don't use `[[[]]]`. Use `SomeType[][][]` instead.", + '[[[[]]]]': 'ur drunk 🤡', + '[[[[[]]]]]': '🦄💥', + }, + }, + ], + + // Unicorn rules + 'unicorn/prefer-dom-node-append': 'off', + }, +}; + +module.exports = config; diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f7dd40..ad49af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # @nodecfdi/cfdiutils-common ChangeLog +## 2.0.0 + +### Major Changes - Rename of files to standard of xo and sync with phpcfdi + +- Update dependencies +- Change from Eslint to XO (a wrapped shared eslint config with steroids) +- Update bundle generator to library and outputs types +- Rename files and classes to follow xo standard guide +- Prepare lib for drop support to Commonjs (Q2 2024) + ## 1.2.6 ### Patch Changes - Fixed correct iteration element-chilnodes and attributes @@ -56,7 +66,7 @@ - ab38a00: DOM agnostic - *** + *** - Add helper for install and use anything DOM implementation class. - Improve documentation about new process to use `XML` and `XmlNodeUtils` helper classes. diff --git a/package.json b/package.json index 95f508a..039a404 100644 --- a/package.json +++ b/package.json @@ -1,96 +1,89 @@ { - "name": "@nodecfdi/cfdiutils-common", - "version": "1.2.6", - "description": "Librería usada para contener las estructuras de datos comunes, y utilerías o funciones de ayuda común.", - "keywords": [ - "common", - "cfdi", - "estructura", - "struct", - "xml" - ], - "private": false, - "author": "OcelotlStudio ", - "license": "MIT", - "type": "module", - "main": "./dist/cfdiutils-common.cjs", - "module": "./dist/cfdiutils-common.js", - "unpkg": "./dist/cfdiutils-common.global.js", - "browser": "./dist/cfdiutils-common.global.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/cfdiutils-common.js" - }, - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/cfdiutils-common.cjs" - } - } - }, - "files": [ - "dist" - ], - "scripts": { - "prepare": "is-ci || husky install", - "lint": "eslint . --fix --ext .ts,.js", - "lint:check": "eslint . --ext .ts,.js", - "test": "vitest", - "test:run": "vitest run", - "test:coverage": "vitest run --coverage", - "build": "rimraf dist && tsup", - "gen:docs": "rimraf docs && typedoc --options typedoc.json", - "release": "pnpm run build && pnpm changeset publish" - }, - "repository": "https://github.com/nodecfdi/cfdiutils-common", - "bugs": { - "url": "https://github.com/nodecfdi/cfdiutils-common/issues" - }, - "homepage": "https://github.com/nodecfdi/cfdiutils-common", - "devDependencies": { - "@changesets/cli": "^2.26.2", - "@commitlint/cli": "^17.6.7", - "@nodecfdi/eslint-config-nodecfdi": "^0.1.5", - "@nrsk/config-conventional": "^1.0.0", - "@types/is-ci": "^3.0.0", - "@types/node": "^20.4.4", - "@vitest/coverage-istanbul": "^0.34.0", - "@xmldom/xmldom": "^0.8.10", - "eslint": "^8.45.0", - "husky": "^8.0.3", - "is-ci": "^3.0.1", - "jest-xml-matcher": "^1.2.0", - "jsdom": "^22.1.0", - "lint-staged": "^13.2.3", - "prettier": "^3.0.0", - "rimraf": "^5.0.1", - "tsup": "^7.1.0", - "typedoc": "^0.25.0", - "typedoc-theme-hierarchy": "^4.0.0", - "typescript": "^5.1.6", - "vite": "^4.4.7", - "vitest": "^0.34.0" - }, - "commitlint": { - "extends": [ - "@nrsk/config-conventional" - ] - }, - "lint-staged": { - "*.{json}": [ - "prettier --write" - ], - "*.{js,ts}": [ - "eslint --fix" - ] - }, - "engines": { - "node": ">=16.0.0" - }, - "browserslist": [ - "defaults", - "not IE 11" + "name": "@nodecfdi/cfdiutils-common", + "version": "2.0.0", + "description": "Librería usada para contener las estructuras de datos comunes, y utilerías o funciones de ayuda común.", + "keywords": [ + "common", + "cfdi", + "estructura", + "struct", + "xml" + ], + "private": false, + "author": "OcelotlStudio ", + "license": "MIT", + "type": "module", + "main": "./dist/cfdiutils-common.cjs", + "module": "./dist/cfdiutils-common.js", + "unpkg": "./dist/cfdiutils-common.global.js", + "browser": "./dist/cfdiutils-common.global.js", + "types": "./dist/cfdiutils-common.d.ts", + "exports": { + ".": { + "import": { + "types": "./dist/cfdiutils-common.d.ts", + "default": "./dist/cfdiutils-common.js" + }, + "require": { + "types": "./dist/cfdiutils-common.d.cts", + "default": "./dist/cfdiutils-common.cjs" + } + } + }, + "files": [ + "dist" + ], + "scripts": { + "prepare": "is-ci || husky install", + "lint": "xo --fix", + "lint:check": "xo", + "format": "prettier . --write", + "format:check": "prettier . --check", + "test": "vitest", + "test:run": "vitest run", + "test:coverage": "vitest run --coverage", + "build": "rimraf dist && tsup", + "gen:docs": "rimraf docs && typedoc --options typedoc.json", + "release": "pnpm run build && pnpm changeset publish" + }, + "repository": "https://github.com/nodecfdi/cfdiutils-common", + "bugs": { + "url": "https://github.com/nodecfdi/cfdiutils-common/issues" + }, + "homepage": "https://github.com/nodecfdi/cfdiutils-common", + "devDependencies": { + "@changesets/cli": "^2.27.1", + "@commitlint/cli": "^18.4.3", + "@commitlint/config-conventional": "^18.4.3", + "@microsoft/api-extractor": "^7.38.5", + "@types/is-ci": "^3.0.4", + "@vitest/coverage-istanbul": "^1.0.4", + "@xmldom/xmldom": "^0.8.10", + "husky": "^8.0.3", + "is-ci": "^3.0.1", + "jest-xml-matcher": "^1.2.0", + "jsdom": "^23.0.1", + "prettier": "^3.1.1", + "rimraf": "^5.0.5", + "tsup": "^8.0.1", + "typedoc": "^0.25.4", + "typedoc-material-theme": "^1.0.1", + "typescript": "^5.3.3", + "vite": "^5.0.8", + "vite-tsconfig-paths": "^4.2.2", + "vitest": "^1.0.4", + "xo": "^0.56.0" + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" ] + }, + "engines": { + "node": ">=16.0.0" + }, + "browserslist": [ + "defaults", + "not IE 11" + ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7fc3b5..261ddb4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,32 +6,26 @@ settings: devDependencies: '@changesets/cli': - specifier: ^2.26.2 - version: 2.26.2 + specifier: ^2.27.1 + version: 2.27.1 '@commitlint/cli': - specifier: ^17.6.7 - version: 17.6.7 - '@nodecfdi/eslint-config-nodecfdi': - specifier: ^0.1.5 - version: 0.1.5(@typescript-eslint/eslint-plugin@6.1.0)(@typescript-eslint/parser@6.1.0)(eslint-config-prettier@8.8.0)(eslint-import-resolver-alias@1.1.2)(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-eslint-comments@3.2.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@16.0.1)(eslint-plugin-prettier@5.0.0)(eslint-plugin-tsdoc@0.2.17)(eslint-plugin-unicorn@48.0.0)(eslint@8.45.0)(prettier@3.0.0)(typescript@5.1.6) - '@nrsk/config-conventional': - specifier: ^1.0.0 - version: 1.0.0 + specifier: ^18.4.3 + version: 18.4.3(typescript@5.3.3) + '@commitlint/config-conventional': + specifier: ^18.4.3 + version: 18.4.3 + '@microsoft/api-extractor': + specifier: ^7.38.5 + version: 7.38.5(@types/node@18.19.3) '@types/is-ci': - specifier: ^3.0.0 - version: 3.0.0 - '@types/node': - specifier: ^20.4.4 - version: 20.4.4 + specifier: ^3.0.4 + version: 3.0.4 '@vitest/coverage-istanbul': - specifier: ^0.34.0 - version: 0.34.0(vitest@0.34.0) + specifier: ^1.0.4 + version: 1.0.4(vitest@1.0.4) '@xmldom/xmldom': specifier: ^0.8.10 version: 0.8.10 - eslint: - specifier: ^8.45.0 - version: 8.45.0 husky: specifier: ^8.0.3 version: 8.0.3 @@ -42,35 +36,38 @@ devDependencies: specifier: ^1.2.0 version: 1.2.0 jsdom: - specifier: ^22.1.0 - version: 22.1.0 - lint-staged: - specifier: ^13.2.3 - version: 13.2.3 + specifier: ^23.0.1 + version: 23.0.1 prettier: - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.1.1 + version: 3.1.1 rimraf: - specifier: ^5.0.1 - version: 5.0.1 + specifier: ^5.0.5 + version: 5.0.5 tsup: - specifier: ^7.1.0 - version: 7.1.0(ts-node@10.9.1)(typescript@5.1.6) + specifier: ^8.0.1 + version: 8.0.1(@microsoft/api-extractor@7.38.5)(typescript@5.3.3) typedoc: - specifier: ^0.25.0 - version: 0.25.0(typescript@5.1.6) - typedoc-theme-hierarchy: - specifier: ^4.0.0 - version: 4.0.0(typedoc@0.25.0) + specifier: ^0.25.4 + version: 0.25.4(typescript@5.3.3) + typedoc-material-theme: + specifier: ^1.0.1 + version: 1.0.1(typedoc@0.25.4) typescript: - specifier: ^5.1.6 - version: 5.1.6 + specifier: ^5.3.3 + version: 5.3.3 vite: - specifier: ^4.4.7 - version: 4.4.7(@types/node@20.4.4) + specifier: ^5.0.8 + version: 5.0.8(@types/node@18.19.3) + vite-tsconfig-paths: + specifier: ^4.2.2 + version: 4.2.2(typescript@5.3.3)(vite@5.0.8) vitest: - specifier: ^0.34.0 - version: 0.34.0(jsdom@22.1.0) + specifier: ^1.0.4 + version: 1.0.4(@types/node@18.19.3)(jsdom@23.0.1) + xo: + specifier: ^0.56.0 + version: 0.56.0(webpack@5.89.0) packages: @@ -207,6 +204,16 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} @@ -245,6 +252,14 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + dev: true + /@babel/runtime@7.20.7: resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} engines: {node: '>=6.9.0'} @@ -288,14 +303,23 @@ packages: to-fast-properties: 2.0.0 dev: true - /@changesets/apply-release-plan@6.1.4: - resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@changesets/apply-release-plan@7.0.0: + resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: '@babel/runtime': 7.20.7 - '@changesets/config': 2.3.1 - '@changesets/get-version-range-type': 0.3.2 - '@changesets/git': 2.0.0 - '@changesets/types': 5.2.1 + '@changesets/config': 3.0.0 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 fs-extra: 7.0.1 @@ -306,51 +330,50 @@ packages: semver: 7.5.4 dev: true - /@changesets/assemble-release-plan@5.2.4: - resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} + /@changesets/assemble-release-plan@6.0.0: + resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} dependencies: '@babel/runtime': 7.20.7 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 semver: 7.5.4 dev: true - /@changesets/changelog-git@0.1.14: - resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + /@changesets/changelog-git@0.2.0: + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 dev: true - /@changesets/cli@2.26.2: - resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==} + /@changesets/cli@2.27.1: + resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true dependencies: '@babel/runtime': 7.20.7 - '@changesets/apply-release-plan': 6.1.4 - '@changesets/assemble-release-plan': 5.2.4 - '@changesets/changelog-git': 0.1.14 - '@changesets/config': 2.3.1 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/get-release-plan': 3.0.17 - '@changesets/git': 2.0.0 - '@changesets/logger': 0.0.5 - '@changesets/pre': 1.0.14 - '@changesets/read': 0.5.9 - '@changesets/types': 5.2.1 - '@changesets/write': 0.2.3 + '@changesets/apply-release-plan': 7.0.0 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.0 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/get-release-plan': 4.0.0 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.0 '@manypkg/get-packages': 1.1.3 - '@types/is-ci': 3.0.0 '@types/semver': 7.5.0 ansi-colors: 4.1.3 chalk: 2.4.2 + ci-info: 3.8.0 enquirer: 2.3.6 external-editor: 3.1.0 fs-extra: 7.0.1 human-id: 1.0.2 - is-ci: 3.0.1 meow: 6.1.1 outdent: 0.5.0 p-limit: 2.3.0 @@ -362,93 +385,93 @@ packages: tty-table: 4.1.6 dev: true - /@changesets/config@2.3.1: - resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} + /@changesets/config@3.0.0: + resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} dependencies: - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.6 - '@changesets/logger': 0.0.5 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.0.0 + '@changesets/logger': 0.1.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 dev: true - /@changesets/errors@0.1.4: - resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + /@changesets/errors@0.2.0: + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} dependencies: extendable-error: 0.1.7 dev: true - /@changesets/get-dependents-graph@1.3.6: - resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} + /@changesets/get-dependents-graph@2.0.0: + resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 semver: 7.5.4 dev: true - /@changesets/get-release-plan@3.0.17: - resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} + /@changesets/get-release-plan@4.0.0: + resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} dependencies: '@babel/runtime': 7.20.7 - '@changesets/assemble-release-plan': 5.2.4 - '@changesets/config': 2.3.1 - '@changesets/pre': 1.0.14 - '@changesets/read': 0.5.9 - '@changesets/types': 5.2.1 + '@changesets/assemble-release-plan': 6.0.0 + '@changesets/config': 3.0.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 dev: true - /@changesets/get-version-range-type@0.3.2: - resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + /@changesets/get-version-range-type@0.4.0: + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} dev: true - /@changesets/git@2.0.0: - resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + /@changesets/git@3.0.0: + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: '@babel/runtime': 7.20.7 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 micromatch: 4.0.5 spawndamnit: 2.0.0 dev: true - /@changesets/logger@0.0.5: - resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + /@changesets/logger@0.1.0: + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} dependencies: chalk: 2.4.2 dev: true - /@changesets/parse@0.3.16: - resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + /@changesets/parse@0.4.0: + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} dependencies: - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 js-yaml: 3.14.1 dev: true - /@changesets/pre@1.0.14: - resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + /@changesets/pre@2.0.0: + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: '@babel/runtime': 7.20.7 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.1 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 dev: true - /@changesets/read@0.5.9: - resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + /@changesets/read@0.6.0: + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: '@babel/runtime': 7.20.7 - '@changesets/git': 2.0.0 - '@changesets/logger': 0.0.5 - '@changesets/parse': 0.3.16 - '@changesets/types': 5.2.1 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 @@ -458,53 +481,59 @@ packages: resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} dev: true - /@changesets/types@5.2.1: - resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} + /@changesets/types@6.0.0: + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} dev: true - /@changesets/write@0.2.3: - resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + /@changesets/write@0.3.0: + resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} dependencies: '@babel/runtime': 7.20.7 - '@changesets/types': 5.2.1 + '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.7 dev: true - /@commitlint/cli@17.6.7: - resolution: {integrity: sha512-nzZmfO5KIOupYppn1MsnYX/80I+KDlxiwkks3CJT0XT+t34UgqGi3eSyEuzgcIjPlORk5/GMaAEiys78iLfGMg==} - engines: {node: '>=v14'} + /@commitlint/cli@18.4.3(typescript@5.3.3): + resolution: {integrity: sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==} + engines: {node: '>=v18'} hasBin: true dependencies: - '@commitlint/format': 17.4.4 - '@commitlint/lint': 17.6.7 - '@commitlint/load': 17.6.7 - '@commitlint/read': 17.5.1 - '@commitlint/types': 17.4.4 + '@commitlint/format': 18.4.3 + '@commitlint/lint': 18.4.3 + '@commitlint/load': 18.4.3(typescript@5.3.3) + '@commitlint/read': 18.4.3 + '@commitlint/types': 18.4.3 execa: 5.1.1 lodash.isfunction: 3.0.9 resolve-from: 5.0.0 resolve-global: 1.0.0 yargs: 17.6.2 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' + - typescript dev: true - /@commitlint/config-validator@17.6.7: - resolution: {integrity: sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==} - engines: {node: '>=v14'} + /@commitlint/config-conventional@18.4.3: + resolution: {integrity: sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==} + engines: {node: '>=v18'} dependencies: - '@commitlint/types': 17.4.4 + conventional-changelog-conventionalcommits: 7.0.2 + dev: true + + /@commitlint/config-validator@18.4.3: + resolution: {integrity: sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/types': 18.4.3 ajv: 8.11.2 dev: true - /@commitlint/ensure@17.6.7: - resolution: {integrity: sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==} - engines: {node: '>=v14'} + /@commitlint/ensure@18.4.3: + resolution: {integrity: sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==} + engines: {node: '>=v18'} dependencies: - '@commitlint/types': 17.4.4 + '@commitlint/types': 18.4.3 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 @@ -512,136 +541,126 @@ packages: lodash.upperfirst: 4.3.1 dev: true - /@commitlint/execute-rule@17.4.0: - resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} - engines: {node: '>=v14'} + /@commitlint/execute-rule@18.4.3: + resolution: {integrity: sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==} + engines: {node: '>=v18'} dev: true - /@commitlint/format@17.4.4: - resolution: {integrity: sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==} - engines: {node: '>=v14'} + /@commitlint/format@18.4.3: + resolution: {integrity: sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==} + engines: {node: '>=v18'} dependencies: - '@commitlint/types': 17.4.4 + '@commitlint/types': 18.4.3 chalk: 4.1.2 dev: true - /@commitlint/is-ignored@17.6.7: - resolution: {integrity: sha512-vqyNRqtbq72P2JadaoWiuoLtXIs9SaAWDqdtef6G2zsoXqKFc7vqj1f+thzVgosXG3X/5K9jNp+iYijmvOfc/g==} - engines: {node: '>=v14'} + /@commitlint/is-ignored@18.4.3: + resolution: {integrity: sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==} + engines: {node: '>=v18'} dependencies: - '@commitlint/types': 17.4.4 - semver: 7.5.2 + '@commitlint/types': 18.4.3 + semver: 7.5.4 dev: true - /@commitlint/lint@17.6.7: - resolution: {integrity: sha512-TW+AozfuOFMrHn+jdwtz0IWu8REKFp0eryOvoBp2r8IXNc4KihKB1spAiUB6SFyHD6hVVeolz12aHnJ3Mb+xVQ==} - engines: {node: '>=v14'} + /@commitlint/lint@18.4.3: + resolution: {integrity: sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==} + engines: {node: '>=v18'} dependencies: - '@commitlint/is-ignored': 17.6.7 - '@commitlint/parse': 17.6.7 - '@commitlint/rules': 17.6.7 - '@commitlint/types': 17.4.4 + '@commitlint/is-ignored': 18.4.3 + '@commitlint/parse': 18.4.3 + '@commitlint/rules': 18.4.3 + '@commitlint/types': 18.4.3 dev: true - /@commitlint/load@17.6.7: - resolution: {integrity: sha512-QZ2rJTbX55BQdYrCm/p6+hh/pFBgC9nTJxfsrK6xRPe2thiQzHN0AQDBqBwAirn6gIkHrjIbCbtAE6kiDYLjrw==} - engines: {node: '>=v14'} + /@commitlint/load@18.4.3(typescript@5.3.3): + resolution: {integrity: sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==} + engines: {node: '>=v18'} dependencies: - '@commitlint/config-validator': 17.6.7 - '@commitlint/execute-rule': 17.4.0 - '@commitlint/resolve-extends': 17.6.7 - '@commitlint/types': 17.4.4 - '@types/node': 20.4.4 + '@commitlint/config-validator': 18.4.3 + '@commitlint/execute-rule': 18.4.3 + '@commitlint/resolve-extends': 18.4.3 + '@commitlint/types': 18.4.3 + '@types/node': 18.19.3 chalk: 4.1.2 - cosmiconfig: 8.0.0 - cosmiconfig-typescript-loader: 4.3.0(@types/node@20.4.4)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@5.1.6) + cosmiconfig: 8.3.6(typescript@5.3.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.3)(cosmiconfig@8.3.6)(typescript@5.3.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@types/node@20.4.4)(typescript@5.1.6) - typescript: 5.1.6 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' + - typescript dev: true - /@commitlint/message@17.4.2: - resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==} - engines: {node: '>=v14'} + /@commitlint/message@18.4.3: + resolution: {integrity: sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==} + engines: {node: '>=v18'} dev: true - /@commitlint/parse@17.6.7: - resolution: {integrity: sha512-ibO03BgEns+JJpohpBZYD49mCdSNMg6fTv7vA5yqzEFWkBQk5NWhEBw2yG+Z1UClStIRkMkAYyI2HzoQG9tCQQ==} - engines: {node: '>=v14'} + /@commitlint/parse@18.4.3: + resolution: {integrity: sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==} + engines: {node: '>=v18'} dependencies: - '@commitlint/types': 17.4.4 - conventional-changelog-angular: 5.0.13 - conventional-commits-parser: 3.2.4 + '@commitlint/types': 18.4.3 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 dev: true - /@commitlint/read@17.5.1: - resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} - engines: {node: '>=v14'} + /@commitlint/read@18.4.3: + resolution: {integrity: sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==} + engines: {node: '>=v18'} dependencies: - '@commitlint/top-level': 17.4.0 - '@commitlint/types': 17.4.4 + '@commitlint/top-level': 18.4.3 + '@commitlint/types': 18.4.3 fs-extra: 11.1.0 git-raw-commits: 2.0.11 minimist: 1.2.8 dev: true - /@commitlint/resolve-extends@17.6.7: - resolution: {integrity: sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==} - engines: {node: '>=v14'} + /@commitlint/resolve-extends@18.4.3: + resolution: {integrity: sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==} + engines: {node: '>=v18'} dependencies: - '@commitlint/config-validator': 17.6.7 - '@commitlint/types': 17.4.4 + '@commitlint/config-validator': 18.4.3 + '@commitlint/types': 18.4.3 import-fresh: 3.3.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.6.7: - resolution: {integrity: sha512-x/SDwDTN3w3Gr5xkhrIORu96rlKCc8ZLYEMXRqi9+MB33st2mKcGvKa5uJuigHlbl3xm75bAAubATrodVrjguQ==} - engines: {node: '>=v14'} + /@commitlint/rules@18.4.3: + resolution: {integrity: sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==} + engines: {node: '>=v18'} dependencies: - '@commitlint/ensure': 17.6.7 - '@commitlint/message': 17.4.2 - '@commitlint/to-lines': 17.4.0 - '@commitlint/types': 17.4.4 + '@commitlint/ensure': 18.4.3 + '@commitlint/message': 18.4.3 + '@commitlint/to-lines': 18.4.3 + '@commitlint/types': 18.4.3 execa: 5.1.1 dev: true - /@commitlint/to-lines@17.4.0: - resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==} - engines: {node: '>=v14'} + /@commitlint/to-lines@18.4.3: + resolution: {integrity: sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==} + engines: {node: '>=v18'} dev: true - /@commitlint/top-level@17.4.0: - resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==} - engines: {node: '>=v14'} + /@commitlint/top-level@18.4.3: + resolution: {integrity: sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==} + engines: {node: '>=v18'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types@17.4.4: - resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} - engines: {node: '>=v14'} + /@commitlint/types@18.4.3: + resolution: {integrity: sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==} + engines: {node: '>=v18'} dependencies: chalk: 4.1.2 dev: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@esbuild/android-arm64@0.18.13: - resolution: {integrity: sha512-j7NhycJUoUAG5kAzGf4fPWfd17N6SM3o1X6MlXVqfHvs2buFraCJzos9vbeWjLxOyBKHyPOnuCuipbhvbYtTAg==} + /@esbuild/android-arm64@0.19.9: + resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -649,8 +668,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.13: - resolution: {integrity: sha512-KwqFhxRFMKZINHzCqf8eKxE0XqWlAVPRxwy6rc7CbVFxzUWB2sA/s3hbMZeemPdhN3fKBkqOaFhTbS8xJXYIWQ==} + /@esbuild/android-arm@0.19.9: + resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -658,8 +677,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.13: - resolution: {integrity: sha512-M2eZkRxR6WnWfVELHmv6MUoHbOqnzoTVSIxgtsyhm/NsgmL+uTmag/VVzdXvmahak1I6sOb1K/2movco5ikDJg==} + /@esbuild/android-x64@0.19.9: + resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -667,8 +686,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.13: - resolution: {integrity: sha512-f5goG30YgR1GU+fxtaBRdSW3SBG9pZW834Mmhxa6terzcboz7P2R0k4lDxlkP7NYRIIdBbWp+VgwQbmMH4yV7w==} + /@esbuild/darwin-arm64@0.19.9: + resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -676,8 +695,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.13: - resolution: {integrity: sha512-RIrxoKH5Eo+yE5BtaAIMZaiKutPhZjw+j0OCh8WdvKEKJQteacq0myZvBDLU+hOzQOZWJeDnuQ2xgSScKf1Ovw==} + /@esbuild/darwin-x64@0.19.9: + resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -685,8 +704,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.13: - resolution: {integrity: sha512-AfRPhHWmj9jGyLgW/2FkYERKmYR+IjYxf2rtSLmhOrPGFh0KCETFzSjx/JX/HJnvIqHt/DRQD/KAaVsUKoI3Xg==} + /@esbuild/freebsd-arm64@0.19.9: + resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -694,8 +713,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.13: - resolution: {integrity: sha512-pGzWWZJBInhIgdEwzn8VHUBang8UvFKsvjDkeJ2oyY5gZtAM6BaxK0QLCuZY+qoj/nx/lIaItH425rm/hloETA==} + /@esbuild/freebsd-x64@0.19.9: + resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -703,8 +722,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.13: - resolution: {integrity: sha512-hCzZbVJEHV7QM77fHPv2qgBcWxgglGFGCxk6KfQx6PsVIdi1u09X7IvgE9QKqm38OpkzaAkPnnPqwRsltvLkIQ==} + /@esbuild/linux-arm64@0.19.9: + resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -712,8 +731,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.13: - resolution: {integrity: sha512-4iMxLRMCxGyk7lEvkkvrxw4aJeC93YIIrfbBlUJ062kilUUnAiMb81eEkVvCVoh3ON283ans7+OQkuy1uHW+Hw==} + /@esbuild/linux-arm@0.19.9: + resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -721,8 +740,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.13: - resolution: {integrity: sha512-I3OKGbynl3AAIO6onXNrup/ttToE6Rv2XYfFgLK/wnr2J+1g+7k4asLrE+n7VMhaqX+BUnyWkCu27rl+62Adug==} + /@esbuild/linux-ia32@0.19.9: + resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -730,8 +749,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.13: - resolution: {integrity: sha512-8pcKDApAsKc6WW51ZEVidSGwGbebYw2qKnO1VyD8xd6JN0RN6EUXfhXmDk9Vc4/U3Y4AoFTexQewQDJGsBXBpg==} + /@esbuild/linux-loong64@0.19.9: + resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -739,8 +758,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.13: - resolution: {integrity: sha512-6GU+J1PLiVqWx8yoCK4Z0GnfKyCGIH5L2KQipxOtbNPBs+qNDcMJr9euxnyJ6FkRPyMwaSkjejzPSISD9hb+gg==} + /@esbuild/linux-mips64el@0.19.9: + resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -748,8 +767,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.13: - resolution: {integrity: sha512-pfn/OGZ8tyR8YCV7MlLl5hAit2cmS+j/ZZg9DdH0uxdCoJpV7+5DbuXrR+es4ayRVKIcfS9TTMCs60vqQDmh+w==} + /@esbuild/linux-ppc64@0.19.9: + resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -757,8 +776,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.13: - resolution: {integrity: sha512-aIbhU3LPg0lOSCfVeGHbmGYIqOtW6+yzO+Nfv57YblEK01oj0mFMtvDJlOaeAZ6z0FZ9D13oahi5aIl9JFphGg==} + /@esbuild/linux-riscv64@0.19.9: + resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -766,8 +785,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.13: - resolution: {integrity: sha512-Pct1QwF2sp+5LVi4Iu5Y+6JsGaV2Z2vm4O9Dd7XZ5tKYxEHjFtb140fiMcl5HM1iuv6xXO8O1Vrb1iJxHlv8UA==} + /@esbuild/linux-s390x@0.19.9: + resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -775,8 +794,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.13: - resolution: {integrity: sha512-zTrIP0KzYP7O0+3ZnmzvUKgGtUvf4+piY8PIO3V8/GfmVd3ZyHJGz7Ht0np3P1wz+I8qJ4rjwJKqqEAbIEPngA==} + /@esbuild/linux-x64@0.19.9: + resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -784,8 +803,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.13: - resolution: {integrity: sha512-I6zs10TZeaHDYoGxENuksxE1sxqZpCp+agYeW039yqFwh3MgVvdmXL5NMveImOC6AtpLvE4xG5ujVic4NWFIDQ==} + /@esbuild/netbsd-x64@0.19.9: + resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -793,8 +812,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.13: - resolution: {integrity: sha512-W5C5nczhrt1y1xPG5bV+0M12p2vetOGlvs43LH8SopQ3z2AseIROu09VgRqydx5qFN7y9qCbpgHLx0kb0TcW7g==} + /@esbuild/openbsd-x64@0.19.9: + resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -802,8 +821,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.13: - resolution: {integrity: sha512-X/xzuw4Hzpo/yq3YsfBbIsipNgmsm8mE/QeWbdGdTTeZ77fjxI2K0KP3AlhZ6gU3zKTw1bKoZTuKLnqcJ537qw==} + /@esbuild/sunos-x64@0.19.9: + resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -811,8 +830,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.13: - resolution: {integrity: sha512-4CGYdRQT/ILd+yLLE5i4VApMPfGE0RPc/wFQhlluDQCK09+b4JDbxzzjpgQqTPrdnP7r5KUtGVGZYclYiPuHrw==} + /@esbuild/win32-arm64@0.19.9: + resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -820,8 +839,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.13: - resolution: {integrity: sha512-D+wKZaRhQI+MUGMH+DbEr4owC2D7XnF+uyGiZk38QbgzLcofFqIOwFs7ELmIeU45CQgfHNy9Q+LKW3cE8g37Kg==} + /@esbuild/win32-ia32@0.19.9: + resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -829,8 +848,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.13: - resolution: {integrity: sha512-iVl6lehAfJS+VmpF3exKpNQ8b0eucf5VWfzR8S7xFve64NBNz2jPUgx1X93/kfnkfgP737O+i1k54SVQS7uVZA==} + /@esbuild/win32-x64@0.19.9: + resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -838,34 +857,29 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.45.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.45.0 - eslint-visitor-keys: 3.4.1 - dev: true - - /@eslint-community/regexpp@4.5.0: - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + eslint: 8.55.0 + eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.5.1: - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.0: - resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.19.0 + globals: 13.24.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -875,16 +889,16 @@ packages: - supports-color dev: true - /@eslint/js@8.44.0: - resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==} + /@eslint/js@8.55.0: + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.10: - resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -896,8 +910,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@isaacs/cliui@8.0.2: @@ -917,8 +931,8 @@ packages: engines: {node: '>=8'} dev: true - /@jest/schemas@29.6.0: - resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.27.8 @@ -951,6 +965,13 @@ packages: engines: {node: '>=6.0.0'} dev: true + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + dev: true + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true @@ -966,13 +987,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: @@ -993,6 +1007,40 @@ packages: read-yaml-file: 1.1.0 dev: true + /@material/material-color-utilities@0.2.7: + resolution: {integrity: sha512-0FCeqG6WvK4/Cc06F/xXMd/pv4FeisI0c1tUpBbfhA2n9Y8eZEv4Karjbmf2ZqQCPUWMrGp8A571tCjizxoTiQ==} + dev: true + + /@microsoft/api-extractor-model@7.28.3(@types/node@18.19.3): + resolution: {integrity: sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.62.0(@types/node@18.19.3) + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/api-extractor@7.38.5(@types/node@18.19.3): + resolution: {integrity: sha512-c/w2zfqBcBJxaCzpJNvFoouWewcYrUOfeu5ZkWCCIXTF9a/gXM85RGevEzlMAIEGM/kssAAZSXRJIZ3Q5vLFow==} + hasBin: true + dependencies: + '@microsoft/api-extractor-model': 7.28.3(@types/node@18.19.3) + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.62.0(@types/node@18.19.3) + '@rushstack/rig-package': 0.5.1 + '@rushstack/ts-command-line': 4.17.1 + colors: 1.2.5 + lodash: 4.17.21 + resolve: 1.22.8 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.0.4 + transitivePeerDependencies: + - '@types/node' + dev: true + /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} dependencies: @@ -1006,41 +1054,6 @@ packages: resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true - /@nodecfdi/eslint-config-nodecfdi@0.1.5(@typescript-eslint/eslint-plugin@6.1.0)(@typescript-eslint/parser@6.1.0)(eslint-config-prettier@8.8.0)(eslint-import-resolver-alias@1.1.2)(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-eslint-comments@3.2.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@16.0.1)(eslint-plugin-prettier@5.0.0)(eslint-plugin-tsdoc@0.2.17)(eslint-plugin-unicorn@48.0.0)(eslint@8.45.0)(prettier@3.0.0)(typescript@5.1.6): - resolution: {integrity: sha512-2X9+mo3VDeFPxGmX9d68Dpz2F7DSdqtKdA+h6iybn+aRI5jaGQ5laqs4xhG/O3l/9HQn1EW6PRcY+LKFYtcpzA==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 - '@typescript-eslint/parser': ^6.0.0 - eslint: ^8.45.0 - eslint-config-prettier: ^8.8.0 - eslint-import-resolver-alias: ^1.1.2 - eslint-import-resolver-typescript: ^3.5.5 - eslint-plugin-eslint-comments: ^3.2.0 - eslint-plugin-import: ^2.27.5 - eslint-plugin-n: ^16.0.1 - eslint-plugin-prettier: ^5.0.0 - eslint-plugin-tsdoc: ^0.2.17 - eslint-plugin-unicorn: ^48.0.0 - prettier: ^3.0.0 - typescript: ^5.1.6 - dependencies: - '@typescript-eslint/eslint-plugin': 6.1.0(@typescript-eslint/parser@6.1.0)(eslint@8.45.0)(typescript@5.1.6) - '@typescript-eslint/parser': 6.1.0(eslint@8.45.0)(typescript@5.1.6) - eslint: 8.45.0 - eslint-config-prettier: 8.8.0(eslint@8.45.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.27.5) - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@6.1.0)(eslint-plugin-import@2.27.5)(eslint@8.45.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.45.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.1.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.45.0) - eslint-plugin-n: 16.0.1(eslint@8.45.0) - eslint-plugin-prettier: 5.0.0(eslint-config-prettier@8.8.0)(eslint@8.45.0)(prettier@3.0.0) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.0(eslint@8.45.0) - prettier: 3.0.0 - typescript: 5.1.6 - dev: true - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1062,13 +1075,6 @@ packages: fastq: 1.15.0 dev: true - /@nrsk/config-conventional@1.0.0: - resolution: {integrity: sha512-Mlyg6DJzpTTVJBqHDdbX++L+WL297PpWexMqVSyNkvGXqsgwnQHKcxcfZQ1xhLClYxrhVp3ueDtXI3W7fn4iCQ==} - engines: {node: '>=14.17.0'} - dependencies: - conventional-changelog-conventionalcommits: 4.6.3 - dev: true - /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1085,52 +1091,181 @@ packages: is-glob: 4.0.3 open: 9.1.0 picocolors: 1.0.0 - tslib: 2.6.0 + tslib: 2.6.2 dev: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + /@rollup/rollup-android-arm-eabi@4.8.0: + resolution: {integrity: sha512-zdTObFRoNENrdPpnTNnhOljYIcOX7aI7+7wyrSpPFFIOf/nRdedE6IYsjaBE7tjukphh1tMTojgJ7p3lKY8x6Q==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.8.0: + resolution: {integrity: sha512-aiItwP48BiGpMFS9Znjo/xCNQVwTQVcRKkFKsO81m8exrGjHkCBDvm9PHay2kpa8RPnZzzKcD1iQ9KaLY4fPQQ==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.8.0: + resolution: {integrity: sha512-zhNIS+L4ZYkYQUjIQUR6Zl0RXhbbA0huvNIWjmPc2SL0cB1h5Djkcy+RZ3/Bwszfb6vgwUvcVJYD6e6Zkpsi8g==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.8.0: + resolution: {integrity: sha512-A/FAHFRNQYrELrb/JHncRWzTTXB2ticiRFztP4ggIUAfa9Up1qfW8aG2w/mN9jNiZ+HB0t0u0jpJgFXG6BfRTA==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.8.0: + resolution: {integrity: sha512-JsidBnh3p2IJJA4/2xOF2puAYqbaczB3elZDT0qHxn362EIoIkq7hrR43Xa8RisgI6/WPfvb2umbGsuvf7E37A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.8.0: + resolution: {integrity: sha512-hBNCnqw3EVCkaPB0Oqd24bv8SklETptQWcJz06kb9OtiShn9jK1VuTgi7o4zPSt6rNGWQOTDEAccbk0OqJmS+g==} + cpu: [arm64] + os: [linux] + requiresBuild: true dev: true + optional: true - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} + /@rollup/rollup-linux-arm64-musl@4.8.0: + resolution: {integrity: sha512-Fw9ChYfJPdltvi9ALJ9wzdCdxGw4wtq4t1qY028b2O7GwB5qLNSGtqMsAel1lfWTZvf4b6/+4HKp0GlSYg0ahA==} + cpu: [arm64] + os: [linux] + requiresBuild: true dev: true + optional: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@rollup/rollup-linux-riscv64-gnu@4.8.0: + resolution: {integrity: sha512-BH5xIh7tOzS9yBi8dFrCTG8Z6iNIGWGltd3IpTSKp6+pNWWO6qy8eKoRxOtwFbMrid5NZaidLYN6rHh9aB8bEw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.8.0: + resolution: {integrity: sha512-PmvAj8k6EuWiyLbkNpd6BLv5XeYFpqWuRvRNRl80xVfpGXK/z6KYXmAgbI4ogz7uFiJxCnYcqyvZVD0dgFog7Q==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.8.0: + resolution: {integrity: sha512-mdxnlW2QUzXwY+95TuxZ+CurrhgrPAMveDWI97EQlA9bfhR8tw3Pt7SUlc/eSlCNxlWktpmT//EAA8UfCHOyXg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + /@rollup/rollup-win32-arm64-msvc@4.8.0: + resolution: {integrity: sha512-ge7saUz38aesM4MA7Cad8CHo0Fyd1+qTaqoIo+Jtk+ipBi4ATSrHWov9/S4u5pbEQmLjgUjB7BJt+MiKG2kzmA==} + cpu: [arm64] + os: [win32] + requiresBuild: true dev: true + optional: true - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + /@rollup/rollup-win32-ia32-msvc@4.8.0: + resolution: {integrity: sha512-p9E3PZlzurhlsN5h9g7zIP1DnqKXJe8ZUkFwAazqSvHuWfihlIISPxG9hCHCoA+dOOspL/c7ty1eeEVFTE0UTw==} + cpu: [ia32] + os: [win32] + requiresBuild: true dev: true + optional: true - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + /@rollup/rollup-win32-x64-msvc@4.8.0: + resolution: {integrity: sha512-kb4/auKXkYKqlUYTE8s40FcJIj5soOyRLHKd4ugR0dCq0G2EfcF54eYcfQiGkHzjidZ40daB4ulsFdtqNKZtBg==} + cpu: [x64] + os: [win32] + requiresBuild: true dev: true + optional: true - /@types/chai-subset@1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + /@rushstack/node-core-library@3.62.0(@types/node@18.19.3): + resolution: {integrity: sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true dependencies: - '@types/chai': 4.3.5 + '@types/node': 18.19.3 + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + z-schema: 5.0.5 dev: true - /@types/chai@4.3.5: - resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + /@rushstack/rig-package@0.5.1: + resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} + dependencies: + resolve: 1.22.8 + strip-json-comments: 3.1.1 dev: true - /@types/is-ci@3.0.0: - resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} + /@rushstack/ts-command-line@4.17.1: + resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} dependencies: - ci-info: 3.7.1 + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.2 + dev: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/argparse@1.0.38: + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + dev: true + + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.44.8 + '@types/estree': 1.0.5 + dev: true + + /@types/eslint@8.44.8: + resolution: {integrity: sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/is-ci@3.0.4: + resolution: {integrity: sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==} + dependencies: + ci-info: 3.8.0 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/json5@0.0.29: @@ -1145,8 +1280,10 @@ packages: resolution: {integrity: sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==} dev: true - /@types/node@20.4.4: - resolution: {integrity: sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==} + /@types/node@18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} + dependencies: + undici-types: 5.26.5 dev: true /@types/normalize-package-data@2.4.1: @@ -1157,8 +1294,8 @@ packages: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.1.0)(eslint@8.45.0)(typescript@5.1.6): - resolution: {integrity: sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1168,27 +1305,26 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 6.1.0(eslint@8.45.0)(typescript@5.1.6) - '@typescript-eslint/scope-manager': 6.1.0 - '@typescript-eslint/type-utils': 6.1.0(eslint@8.45.0)(typescript@5.1.6) - '@typescript-eslint/utils': 6.1.0(eslint@8.45.0)(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.1.0 + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 - eslint: 8.45.0 + eslint: 8.55.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 - natural-compare-lite: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.1.6) - typescript: 5.1.6 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.1.0(eslint@8.45.0)(typescript@5.1.6): - resolution: {integrity: sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw==} + /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1197,27 +1333,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.1.0 - '@typescript-eslint/types': 6.1.0 - '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.1.0 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 - eslint: 8.45.0 - typescript: 5.1.6 + eslint: 8.55.0 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.1.0: - resolution: {integrity: sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==} + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.1.0 - '@typescript-eslint/visitor-keys': 6.1.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@typescript-eslint/type-utils@6.1.0(eslint@8.45.0)(typescript@5.1.6): - resolution: {integrity: sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==} + /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1226,23 +1362,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) - '@typescript-eslint/utils': 6.1.0(eslint@8.45.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.45.0 - ts-api-utils: 1.0.1(typescript@5.1.6) - typescript: 5.1.6 + eslint: 8.55.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.1.0: - resolution: {integrity: sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==} + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.1.0(typescript@5.1.6): - resolution: {integrity: sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1250,97 +1386,210 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.1.0 - '@typescript-eslint/visitor-keys': 6.1.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.1.6) - typescript: 5.1.6 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.1.0(eslint@8.45.0)(typescript@5.1.6): - resolution: {integrity: sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==} + /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) - '@types/json-schema': 7.0.12 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.15 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.1.0 - '@typescript-eslint/types': 6.1.0 - '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.1.6) - eslint: 8.45.0 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.1.0: - resolution: {integrity: sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==} + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.1.0 - eslint-visitor-keys: 3.4.1 + '@typescript-eslint/types': 6.14.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitest/coverage-istanbul@0.34.0(vitest@0.34.0): - resolution: {integrity: sha512-D7CkndBjhntCTJatf/+KHxk4b30wBXRhhadXmz00e/vCq8n9dOsqYJFeb5kiqJEvUhr/EMKo61b+mh3W/zTMZg==} + /@vitest/coverage-istanbul@1.0.4(vitest@1.0.4): + resolution: {integrity: sha512-6qoSzTR+sanwY/dREqu6OFJupo/mHzCcboh03rLwqH2V2B39505lDr9FpqaLwU1vQgeUKNA+CdHPkpNpusxkDw==} peerDependencies: - vitest: '>=0.32.0 <1' + vitest: ^1.0.0 dependencies: - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.0 + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.1 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 + istanbul-reports: 3.1.6 + magicast: 0.3.2 + picocolors: 1.0.0 test-exclude: 6.0.0 - vitest: 0.34.0(jsdom@22.1.0) + vitest: 1.0.4(@types/node@18.19.3)(jsdom@23.0.1) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@0.34.0: - resolution: {integrity: sha512-d1ZU0XomWFAFyYIc6uNuY0N8NJIWESyO/6ZmwLvlHZw0GevH4AEEpq178KjXIvSCrbHN0GnzYzitd0yjfy7+Ow==} + /@vitest/expect@1.0.4: + resolution: {integrity: sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==} dependencies: - '@vitest/spy': 0.34.0 - '@vitest/utils': 0.34.0 - chai: 4.3.7 + '@vitest/spy': 1.0.4 + '@vitest/utils': 1.0.4 + chai: 4.3.10 dev: true - /@vitest/runner@0.34.0: - resolution: {integrity: sha512-xaqM+oArJothtYXzy/dwu/iHe93Khq5QkvnYbzTxiLA0enD2peft1cask3yE6cJpwMkr7C2D1uMJwnTt4mquDw==} + /@vitest/runner@1.0.4: + resolution: {integrity: sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==} dependencies: - '@vitest/utils': 0.34.0 - p-limit: 4.0.0 + '@vitest/utils': 1.0.4 + p-limit: 5.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@0.34.0: - resolution: {integrity: sha512-eGN5XBZHYOghxCOQbf8dcn6/3g7IW77GOOOC/mNFYwRXsPeoQgcgWnhj+6wgJ04pVv25wpxWL9jUkzaQ7LoFtg==} + /@vitest/snapshot@1.0.4: + resolution: {integrity: sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==} dependencies: - magic-string: 0.30.1 + magic-string: 0.30.5 pathe: 1.1.1 - pretty-format: 29.6.1 + pretty-format: 29.7.0 dev: true - /@vitest/spy@0.34.0: - resolution: {integrity: sha512-0SZaWrQvL9ZiF/uJvyWSvsKjfuMvD1M6dE5BbE4Dmt8Vh3k4htwCV8g3ce8YOYmJSxkbh6TNOpippD6NVsxW6w==} + /@vitest/spy@1.0.4: + resolution: {integrity: sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==} dependencies: - tinyspy: 2.1.1 + tinyspy: 2.2.0 dev: true - /@vitest/utils@0.34.0: - resolution: {integrity: sha512-IktrDLhBKf3dEUUxH+lcHiPnaw952+GdGvoxg99liMscgP6IePf6LuMY7B9dEIHkFunB1R8VMR/wmI/4UGg1aw==} + /@vitest/utils@1.0.4: + resolution: {integrity: sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==} dependencies: - diff-sequences: 29.4.3 - loupe: 2.3.6 - pretty-format: 29.6.1 + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: true + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + dev: true + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 + dev: true + + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + dev: true + + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 dev: true /@xmldom/xmldom@0.8.10: @@ -1348,6 +1597,14 @@ packages: engines: {node: '>=10.0.0'} dev: true + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1356,8 +1613,12 @@ packages: through: 2.3.8 dev: true - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + /acorn-import-assertions@1.9.0(acorn@8.10.0): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.10.0 dev: true /acorn-jsx@5.3.2(acorn@8.10.0): @@ -1368,8 +1629,8 @@ packages: acorn: 8.10.0 dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} engines: {node: '>=0.4.0'} dev: true @@ -1379,21 +1640,21 @@ packages: hasBin: true dev: true - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 + ajv: 6.12.6 dev: true /ajv@6.12.6: @@ -1476,10 +1737,6 @@ packages: picomatch: 2.3.1 dev: true - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -1501,8 +1758,8 @@ packages: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -1517,18 +1774,27 @@ packages: engines: {node: '>=8'} dev: true + /array.prototype.find@2.2.2: + resolution: {integrity: sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 dev: true - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -1554,13 +1820,13 @@ packages: engines: {node: '>=0.10.0'} dev: true - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + /arrify@3.0.0: + resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} + engines: {node: '>=12'} dev: true - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true /asynckit@0.4.0: @@ -1583,8 +1849,8 @@ packages: is-windows: 1.0.2 dev: true - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} dev: true @@ -1597,7 +1863,7 @@ packages: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} dependencies: - big-integer: 1.6.51 + big-integer: 1.6.52 dev: true /brace-expansion@1.1.11: @@ -1637,6 +1903,10 @@ packages: update-browserslist-db: 1.0.10(browserslist@4.21.4) dev: true + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -1655,13 +1925,13 @@ packages: run-applescript: 5.0.0 dev: true - /bundle-require@4.0.1(esbuild@0.18.13): + /bundle-require@4.0.1(esbuild@0.19.9): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' dependencies: - esbuild: 0.18.13 + esbuild: 0.19.9 load-tsconfig: 0.2.3 dev: true @@ -1674,7 +1944,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 dev: true /callsites@3.1.0: @@ -1700,14 +1970,14 @@ packages: resolution: {integrity: sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==} dev: true - /chai@4.3.7: - resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 - check-error: 1.0.2 + check-error: 1.0.3 deep-eql: 4.1.3 - get-func-name: 2.0.0 + get-func-name: 2.0.2 loupe: 2.3.6 pathval: 1.1.1 type-detect: 4.0.8 @@ -1730,17 +2000,14 @@ packages: supports-color: 7.2.0 dev: true - /chalk@5.2.0: - resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 dev: true /chokidar@3.5.3: @@ -1755,7 +2022,12 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 + dev: true + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} dev: true /ci-info@3.7.1: @@ -1775,34 +2047,6 @@ packages: escape-string-regexp: 1.0.5 dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - dev: true - - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - slice-ansi: 5.0.0 - string-width: 5.1.2 - dev: true - /cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: @@ -1846,8 +2090,9 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + /colors@1.2.5: + resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} + engines: {node: '>=0.1.90'} dev: true /colors@1.4.0: @@ -1862,9 +2107,8 @@ packages: delayed-stream: 1.0.0 dev: true - /commander@10.0.0: - resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} - engines: {node: '>=14'} + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true /commander@4.1.1: @@ -1872,6 +2116,17 @@ packages: engines: {node: '>= 6'} dev: true + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + requiresBuild: true + dev: true + optional: true + + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: true + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: @@ -1883,67 +2138,67 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /conventional-changelog-angular@5.0.13: - resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} - engines: {node: '>=10'} + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + + /conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} dependencies: compare-func: 2.0.0 - q: 1.5.1 dev: true - /conventional-changelog-conventionalcommits@4.6.3: - resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} - engines: {node: '>=10'} + /conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} dependencies: compare-func: 2.0.0 - lodash: 4.17.21 - q: 1.5.1 dev: true - /conventional-commits-parser@3.2.4: - resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} - engines: {node: '>=10'} + /conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} hasBin: true dependencies: JSONStream: 1.3.5 - is-text-path: 1.0.1 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 dev: true /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true - /cosmiconfig-typescript-loader@4.3.0(@types/node@20.4.4)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@5.1.6): - resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} - engines: {node: '>=12', npm: '>=6'} + /cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.3)(cosmiconfig@8.3.6)(typescript@5.3.3): + resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} + engines: {node: '>=v16'} peerDependencies: '@types/node': '*' - cosmiconfig: '>=7' - ts-node: '>=10' - typescript: '>=3' + cosmiconfig: '>=8.2' + typescript: '>=4' dependencies: - '@types/node': 20.4.4 - cosmiconfig: 8.0.0 - ts-node: 10.9.1(@types/node@20.4.4)(typescript@5.1.6) - typescript: 5.1.6 + '@types/node': 18.19.3 + cosmiconfig: 8.3.6(typescript@5.3.3) + jiti: 1.21.0 + typescript: 5.3.3 dev: true - /cosmiconfig@8.0.0: - resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} + /cosmiconfig@8.3.6(typescript@5.3.3): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - dev: true - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + typescript: 5.3.3 dev: true /cross-spawn@5.1.0: @@ -1997,13 +2252,12 @@ packages: engines: {node: '>=8'} dev: true - /data-urls@4.0.0: - resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} - engines: {node: '>=14'} + /data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 12.0.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 dev: true /debug@3.2.7: @@ -2014,7 +2268,7 @@ packages: supports-color: optional: true dependencies: - ms: 2.1.3 + ms: 2.1.2 dev: true /debug@4.3.4: @@ -2071,7 +2325,7 @@ packages: dependencies: bundle-name: 3.0.0 default-browser-id: 3.0.0 - execa: 7.1.1 + execa: 7.2.0 titleize: 3.0.0 dev: true @@ -2081,19 +2335,16 @@ packages: clone: 1.0.4 dev: true + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} dev: true - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true - /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -2112,8 +2363,8 @@ packages: engines: {node: '>=8'} dev: true - /diff-sequences@29.4.3: - resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true @@ -2122,11 +2373,6 @@ packages: engines: {node: '>=0.3.1'} dev: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2148,13 +2394,6 @@ packages: esutils: 2.0.3 dev: true - /domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - dependencies: - webidl-conversions: 7.0.0 - dev: true - /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -2178,6 +2417,22 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true + /enhance-visitors@1.0.0: + resolution: {integrity: sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==} + engines: {node: '>=4.0.0'} + dependencies: + lodash: 4.17.21 + dev: true + + /enhanced-resolve@0.9.1: + resolution: {integrity: sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==} + engines: {node: '>=0.6'} + dependencies: + graceful-fs: 4.2.11 + memory-fs: 0.2.0 + tapable: 0.1.10 + dev: true + /enhanced-resolve@5.15.0: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} @@ -2198,43 +2453,17 @@ packages: engines: {node: '>=0.12'} dev: true + /env-editor@1.1.0: + resolution: {integrity: sha512-7AXskzN6T7Q9TFcKAGJprUbpQa4i1VsAetO9rdBqbGMGlragTziBgWt4pVYJMBWHQlLoX0buy6WFikzPH4Qjpw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract@1.20.5: - resolution: {integrity: sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 - get-symbol-description: 1.0.0 - gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-symbols: 1.0.3 - internal-slot: 1.0.4 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-weakref: 1.0.2 - object-inspect: 1.12.3 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 - unbox-primitive: 1.0.2 - dev: true - /es-abstract@1.22.1: resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} engines: {node: '>= 0.4'} @@ -2280,6 +2509,10 @@ packages: which-typed-array: 1.1.10 dev: true + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + dev: true + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -2304,34 +2537,34 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.18.13: - resolution: {integrity: sha512-vhg/WR/Oiu4oUIkVhmfcc23G6/zWuEQKFS+yiosSHe4aN6+DQRXIfeloYGibIfVhkr4wyfuVsGNLr+sQU1rWWw==} + /esbuild@0.19.9: + resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.18.13 - '@esbuild/android-arm64': 0.18.13 - '@esbuild/android-x64': 0.18.13 - '@esbuild/darwin-arm64': 0.18.13 - '@esbuild/darwin-x64': 0.18.13 - '@esbuild/freebsd-arm64': 0.18.13 - '@esbuild/freebsd-x64': 0.18.13 - '@esbuild/linux-arm': 0.18.13 - '@esbuild/linux-arm64': 0.18.13 - '@esbuild/linux-ia32': 0.18.13 - '@esbuild/linux-loong64': 0.18.13 - '@esbuild/linux-mips64el': 0.18.13 - '@esbuild/linux-ppc64': 0.18.13 - '@esbuild/linux-riscv64': 0.18.13 - '@esbuild/linux-s390x': 0.18.13 - '@esbuild/linux-x64': 0.18.13 - '@esbuild/netbsd-x64': 0.18.13 - '@esbuild/openbsd-x64': 0.18.13 - '@esbuild/sunos-x64': 0.18.13 - '@esbuild/win32-arm64': 0.18.13 - '@esbuild/win32-ia32': 0.18.13 - '@esbuild/win32-x64': 0.18.13 + '@esbuild/android-arm': 0.19.9 + '@esbuild/android-arm64': 0.19.9 + '@esbuild/android-x64': 0.19.9 + '@esbuild/darwin-arm64': 0.19.9 + '@esbuild/darwin-x64': 0.19.9 + '@esbuild/freebsd-arm64': 0.19.9 + '@esbuild/freebsd-x64': 0.19.9 + '@esbuild/linux-arm': 0.19.9 + '@esbuild/linux-arm64': 0.19.9 + '@esbuild/linux-ia32': 0.19.9 + '@esbuild/linux-loong64': 0.19.9 + '@esbuild/linux-mips64el': 0.19.9 + '@esbuild/linux-ppc64': 0.19.9 + '@esbuild/linux-riscv64': 0.19.9 + '@esbuild/linux-s390x': 0.19.9 + '@esbuild/linux-x64': 0.19.9 + '@esbuild/netbsd-x64': 0.19.9 + '@esbuild/openbsd-x64': 0.19.9 + '@esbuild/sunos-x64': 0.19.9 + '@esbuild/win32-arm64': 0.19.9 + '@esbuild/win32-ia32': 0.19.9 + '@esbuild/win32-x64': 0.19.9 dev: true /escalade@3.1.1: @@ -2349,59 +2582,98 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.8.0(eslint@8.45.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + /eslint-compat-utils@0.1.2(eslint@8.55.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.55.0 + dev: true + + /eslint-config-prettier@8.10.0(eslint@8.55.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.45.0 + eslint: 8.55.0 dev: true - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.27.5): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} + /eslint-config-xo-typescript@1.0.1(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-vPQssnRSUgBFOEfB/KY12CXwltwFSn4RSCfa+w7gjBC2PFQ7Yfgmyei+1XUZ3K+8LRGef2NMJUcxts7PldhDjg==} + engines: {node: '>=16'} peerDependencies: - eslint-plugin-import: '>=1.4.0' + '@typescript-eslint/eslint-plugin': '>=6.0.0' + '@typescript-eslint/parser': '>=6.0.0' + eslint: '>=8.0.0' + typescript: '>=4.7' + dependencies: + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + eslint: 8.55.0 + typescript: 5.3.3 + dev: true + + /eslint-config-xo@0.43.1(eslint@8.55.0): + resolution: {integrity: sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=8.27.0' dependencies: - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.1.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.45.0) + confusing-browser-globals: 1.0.11 + eslint: 8.55.0 dev: true - /eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + /eslint-formatter-pretty@5.0.0: + resolution: {integrity: sha512-Uick451FoL22/wXqyScX3inW8ZlD/GQO7eFXj3bqb6N/ZtuuF00/CwSNIKLbFCJPrX5V4EdQBSgJ/UVnmLRnug==} + engines: {node: '>=14.16'} + dependencies: + '@types/eslint': 8.44.8 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + eslint-rule-docs: 1.1.235 + log-symbols: 4.1.0 + plur: 4.0.0 + string-width: 4.2.3 + supports-hyperlinks: 2.3.0 + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.12.1 - resolve: 1.22.2 + is-core-module: 2.13.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@6.1.0)(eslint-plugin-import@2.27.5)(eslint@8.45.0): - resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} - engines: {node: ^14.18.0 || >=16.0.0} + /eslint-import-resolver-webpack@0.13.8(eslint-plugin-import@2.27.5)(webpack@5.89.0): + resolution: {integrity: sha512-Y7WIaXWV+Q21Rz/PJgUxiW/FTBOWmU8NTLdz+nz9mMoiz5vAev/fOaQxwD7qRzTfE3HSm1qsxZ5uRd7eX+VEtA==} + engines: {node: '>= 6'} peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + eslint-plugin-import: '>=1.4.0' + webpack: '>=1.11.0' dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.45.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.1.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.45.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.1.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.45.0) - get-tsconfig: 4.6.2 - globby: 13.2.2 - is-core-module: 2.12.1 - is-glob: 4.0.3 - synckit: 0.8.5 + array.prototype.find: 2.2.2 + debug: 3.2.7 + enhanced-resolve: 0.9.1 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-webpack@0.13.8)(eslint@8.55.0) + find-root: 1.1.0 + hasown: 2.0.0 + interpret: 1.4.0 + is-core-module: 2.13.1 + is-regex: 1.1.4 + lodash: 4.17.21 + resolve: 2.0.0-next.5 + semver: 5.7.2 + webpack: 5.89.0(esbuild@0.19.9) transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.1.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.45.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8)(eslint@8.55.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2422,38 +2694,56 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.1.0(eslint@8.45.0)(typescript@5.1.6) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 3.2.7 - eslint: 8.45.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@6.1.0)(eslint-plugin-import@2.27.5)(eslint@8.45.0) + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.27.5)(webpack@5.89.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es-x@7.1.0(eslint@8.45.0): - resolution: {integrity: sha512-AhiaF31syh4CCQ+C5ccJA0VG6+kJK8+5mXKKE7Qs1xcPRg02CDPOj3mWlQxuWS/AYtg7kxrDNgW9YW3vc0Q+Mw==} + /eslint-plugin-ava@14.0.0(eslint@8.55.0): + resolution: {integrity: sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw==} + engines: {node: '>=14.17 <15 || >=16.4'} + peerDependencies: + eslint: '>=8.26.0' + dependencies: + enhance-visitors: 1.0.0 + eslint: 8.55.0 + eslint-utils: 3.0.0(eslint@8.55.0) + espree: 9.6.1 + espurify: 2.1.1 + import-modules: 2.1.0 + micro-spelling-correcter: 1.1.1 + pkg-dir: 5.0.0 + resolve-from: 5.0.0 + dev: true + + /eslint-plugin-es-x@7.5.0(eslint@8.55.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) - '@eslint-community/regexpp': 4.5.1 - eslint: 8.45.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/regexpp': 4.10.0 + eslint: 8.55.0 + eslint-compat-utils: 0.1.2(eslint@8.55.0) dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.45.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.55.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.45.0 + eslint: 8.55.0 ignore: 5.2.4 dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@6.1.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.45.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-webpack@0.13.8)(eslint@8.55.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -2463,20 +2753,20 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.1.0(eslint@8.45.0)(typescript@5.1.6) - array-includes: 3.1.6 + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + array-includes: 3.1.7 array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.45.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.1.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.45.0) + eslint: 8.55.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-webpack@0.13.8)(eslint@8.55.0) has: 1.0.3 is-core-module: 2.12.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.6 + object.values: 1.1.7 resolve: 1.22.2 semver: 6.3.1 tsconfig-paths: 3.14.2 @@ -2486,25 +2776,37 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.0.1(eslint@8.45.0): - resolution: {integrity: sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==} + /eslint-plugin-n@16.4.0(eslint@8.55.0): + resolution: {integrity: sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) builtins: 5.0.1 - eslint: 8.45.0 - eslint-plugin-es-x: 7.1.0(eslint@8.45.0) + eslint: 8.55.0 + eslint-plugin-es-x: 7.5.0(eslint@8.55.0) + get-tsconfig: 4.7.2 ignore: 5.2.4 + is-builtin-module: 3.2.1 is-core-module: 2.12.1 minimatch: 3.1.2 resolve: 1.22.2 semver: 7.5.4 dev: true - /eslint-plugin-prettier@5.0.0(eslint-config-prettier@8.8.0)(eslint@8.45.0)(prettier@3.0.0): - resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==} + /eslint-plugin-no-use-extend-native@0.5.0: + resolution: {integrity: sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==} + engines: {node: '>=6.0.0'} + dependencies: + is-get-set-prop: 1.0.0 + is-js-type: 2.0.0 + is-obj-prop: 1.0.0 + is-proto-prop: 2.0.0 + dev: true + + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@8.10.0)(eslint@8.55.0)(prettier@3.1.1): + resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -2517,31 +2819,24 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.45.0 - eslint-config-prettier: 8.8.0(eslint@8.45.0) - prettier: 3.0.0 + eslint: 8.55.0 + eslint-config-prettier: 8.10.0(eslint@8.55.0) + prettier: 3.1.1 prettier-linter-helpers: 1.0.0 - synckit: 0.8.5 - dev: true - - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 + synckit: 0.8.6 dev: true - /eslint-plugin-unicorn@48.0.0(eslint@8.45.0): - resolution: {integrity: sha512-8fk/v3p1ro34JSVDBEmtOq6EEQRpMR0iTir79q69KnXFZ6DJyPkT3RAi+ZoTqhQMdDSpGh8BGR68ne1sP5cnAA==} + /eslint-plugin-unicorn@48.0.1(eslint@8.55.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.44.0' dependencies: - '@babel/helper-validator-identifier': 7.22.5 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) ci-info: 3.8.0 clean-regexp: 1.0.0 - eslint: 8.45.0 + eslint: 8.55.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -2555,39 +2850,67 @@ packages: strip-indent: 3.0.0 dev: true - /eslint-scope@7.2.1: - resolution: {integrity: sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==} + /eslint-rule-docs@1.1.235: + resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==} + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + /eslint-utils@3.0.0(eslint@8.55.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.55.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.45.0: - resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==} + /eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.1.0 - '@eslint/js': 8.44.0 - '@humanwhocodes/config-array': 0.11.10 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.55.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.1 - eslint-visitor-keys: 3.4.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 @@ -2595,7 +2918,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.24.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -2614,13 +2937,20 @@ packages: - supports-color dev: true + /esm-utils@4.2.1: + resolution: {integrity: sha512-a7t8pDmZ5MeYfo2pM5EcqeU+BqKobUFKnWkM17JOhTlR88OSosLa9Ak4bgm+htoF15HRf7tfrXNR62UogmIODg==} + dependencies: + import-meta-resolve: 4.0.0 + url-or-path: 2.3.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.3 dev: true /esprima@4.0.1: @@ -2629,6 +2959,10 @@ packages: hasBin: true dev: true + /espurify@2.1.1: + resolution: {integrity: sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==} + dev: true + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} @@ -2643,6 +2977,11 @@ packages: estraverse: 5.3.0 dev: true + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2653,6 +2992,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2668,8 +3012,8 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.1.1: - resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 @@ -2683,6 +3027,21 @@ packages: strip-final-newline: 3.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true @@ -2704,17 +3063,6 @@ packages: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - /fast-glob@3.3.0: resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} engines: {node: '>=8.6.0'} @@ -2744,7 +3092,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 dev: true /fill-range@7.0.1: @@ -2754,6 +3102,18 @@ packages: to-regex-range: 5.0.1 dev: true + /find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + dev: true + + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: true + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2770,6 +3130,14 @@ packages: path-exists: 4.0.0 dev: true + /find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + dev: true + /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: @@ -2777,16 +3145,17 @@ packages: pkg-dir: 4.2.0 dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /for-each@0.3.3: @@ -2812,15 +3181,6 @@ packages: mime-types: 2.1.35 dev: true - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /fs-extra@11.1.0: resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} engines: {node: '>=14.14'} @@ -2834,7 +3194,7 @@ packages: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 dev: true @@ -2852,8 +3212,8 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -2864,13 +3224,17 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 functions-have-names: 1.2.3 dev: true @@ -2888,16 +3252,8 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} - dev: true - - /get-intrinsic@1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true /get-intrinsic@1.2.1: @@ -2909,21 +3265,36 @@ packages: has-symbols: 1.0.3 dev: true + /get-set-props@0.1.0: + resolution: {integrity: sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==} + engines: {node: '>=0.10.0'} + dev: true + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 dev: true - /get-tsconfig@4.6.2: - resolution: {integrity: sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==} + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: resolve-pkg-maps: 1.0.0 dev: true @@ -2954,13 +3325,17 @@ packages: is-glob: 4.0.3 dev: true - /glob@10.3.3: - resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.2.1 + jackspeak: 2.3.6 minimatch: 9.0.3 minipass: 7.0.2 path-scurry: 1.10.1 @@ -3000,8 +3375,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -3020,7 +3395,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.0 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -3037,14 +3412,14 @@ packages: slash: 4.0.0 dev: true + /globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.1.3 - dev: true - - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + get-intrinsic: 1.2.1 dev: true /graceful-fs@4.2.11: @@ -3081,7 +3456,7 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 dev: true /has-proto@1.0.1: @@ -3108,6 +3483,13 @@ packages: function-bind: 1.1.1 dev: true + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -3119,33 +3501,32 @@ packages: lru-cache: 6.0.0 dev: true - /html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} + /html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} dependencies: - whatwg-encoding: 2.0.0 + whatwg-encoding: 3.1.1 dev: true /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} dependencies: - agent-base: 6.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -3165,6 +3546,11 @@ packages: engines: {node: '>=14.18.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -3198,6 +3584,20 @@ packages: resolve-from: 4.0.0 dev: true + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true + + /import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + dev: true + + /import-modules@2.1.0: + resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==} + engines: {node: '>=8'} + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3223,15 +3623,6 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /internal-slot@1.0.4: - resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.3 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} @@ -3241,6 +3632,24 @@ packages: side-channel: 1.0.4 dev: true + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /irregular-plurals@3.5.0: + resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} + engines: {node: '>=8'} + dev: true + + /is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: true + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -3299,6 +3708,12 @@ packages: has: 1.0.3 dev: true + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -3328,9 +3743,11 @@ packages: engines: {node: '>=8'} dev: true - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} + /is-get-set-prop@1.0.0: + resolution: {integrity: sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==} + dependencies: + get-set-props: 0.1.0 + lowercase-keys: 1.0.1 dev: true /is-glob@4.0.3: @@ -3348,6 +3765,17 @@ packages: is-docker: 3.0.0 dev: true + /is-js-type@2.0.0: + resolution: {integrity: sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==} + dependencies: + js-types: 1.0.0 + dev: true + + /is-negated-glob@1.0.0: + resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} + engines: {node: '>=0.10.0'} + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -3365,6 +3793,13 @@ packages: engines: {node: '>=0.12.0'} dev: true + /is-obj-prop@1.0.0: + resolution: {integrity: sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w==} + dependencies: + lowercase-keys: 1.0.1 + obj-props: 1.4.0 + dev: true + /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} @@ -3384,6 +3819,13 @@ packages: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true + /is-proto-prop@2.0.0: + resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} + dependencies: + lowercase-keys: 1.0.1 + proto-props: 2.0.0 + dev: true + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -3392,6 +3834,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: 1.0.0 + dev: true + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: @@ -3429,11 +3878,11 @@ packages: has-symbols: 1.0.3 dev: true - /is-text-path@1.0.1: - resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} - engines: {node: '>=0.10.0'} + /is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} dependencies: - text-extensions: 1.9.0 + text-extensions: 2.4.0 dev: true /is-typed-array@1.1.10: @@ -3447,6 +3896,18 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: 0.1.2 + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -3473,19 +3934,19 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: '@babel/core': 7.20.7 '@babel/parser': 7.20.7 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -3495,7 +3956,7 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 dev: true @@ -3505,22 +3966,22 @@ packages: engines: {node: '>=10'} dependencies: debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 dev: true - /jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -3528,6 +3989,15 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 18.19.3 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + /jest-xml-matcher@1.2.0: resolution: {integrity: sha512-ZGbzXjGUvfvZTvgDS1DAVUGEuWZD5sQNu/yVkbGBPYao98pEjjSvqOfXcQH7fxsty6LMWsFPn241dZdErL1Hzw==} dependencies: @@ -3536,6 +4006,11 @@ packages: pretty-data: 0.40.0 dev: true + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: true + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -3549,6 +4024,11 @@ packages: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /js-types@1.0.0: + resolution: {integrity: sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==} + engines: {node: '>=0.10.0'} + dev: true + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -3564,38 +4044,36 @@ packages: argparse: 2.0.1 dev: true - /jsdom@22.1.0: - resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==} - engines: {node: '>=16'} + /jsdom@23.0.1: + resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + engines: {node: '>=18'} peerDependencies: - canvas: ^2.5.0 + canvas: ^2.11.2 peerDependenciesMeta: canvas: optional: true dependencies: - abab: 2.0.6 cssstyle: 3.0.0 - data-urls: 4.0.0 + data-urls: 5.0.0 decimal.js: 10.4.3 - domexception: 4.0.0 form-data: 4.0.0 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.7 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 - w3c-xmlserializer: 4.0.0 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 12.0.1 - ws: 8.13.0 - xml-name-validator: 4.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.15.0 + xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color @@ -3619,6 +4097,10 @@ packages: hasBin: true dev: true + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true @@ -3671,6 +4153,12 @@ packages: engines: {'0': node >= 0.2.0} dev: true + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -3694,50 +4182,15 @@ packages: engines: {node: '>=10'} dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /lint-staged@13.2.3: - resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true + /line-column-path@3.0.0: + resolution: {integrity: sha512-Atocnm7Wr9nuvAn97yEPQa3pcQI5eLQGBz+m6iTb+CVw+IOzYB9MrYK7jI7BfC9ISnT4Fu0eiwhAScV//rp4Hw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - chalk: 5.2.0 - cli-truncate: 3.1.0 - commander: 10.0.0 - debug: 4.3.4 - execa: 7.1.1 - lilconfig: 2.1.0 - listr2: 5.0.8 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-inspect: 1.12.3 - pidtree: 0.6.0 - string-argv: 0.3.1 - yaml: 2.3.1 - transitivePeerDependencies: - - enquirer - - supports-color + type-fest: 2.19.0 dev: true - /listr2@5.0.8: - resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} - engines: {node: ^14.13.1 || >=16.0.0} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - dependencies: - cli-truncate: 2.1.0 - colorette: 2.0.19 - log-update: 4.0.0 - p-map: 4.0.0 - rfdc: 1.3.0 - rxjs: 7.8.0 - through: 2.3.8 - wrap-ansi: 7.0.0 + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true /load-tsconfig@0.2.3: @@ -3755,9 +4208,17 @@ packages: strip-bom: 3.0.0 dev: true - /local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + dependencies: + mlly: 1.4.2 + pkg-types: 1.0.3 dev: true /locate-path@5.0.0: @@ -3774,10 +4235,29 @@ packages: p-locate: 5.0.0 dev: true + /locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-locate: 6.0.0 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true + /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + /lodash.isfunction@3.0.9: resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} dev: true @@ -3822,20 +4302,30 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 + chalk: 4.1.2 + is-unicode-supported: 0.1.0 dev: true /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 + dependencies: + get-func-name: 2.0.2 + dev: true + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: - get-func-name: 2.0.0 + get-func-name: 2.0.2 + dev: true + + /lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} dev: true /lru-cache@10.0.0: @@ -3867,13 +4357,21 @@ packages: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true - /magic-string@0.30.1: - resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /magicast@0.3.2: + resolution: {integrity: sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg==} + dependencies: + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + source-map-js: 1.0.2 + dev: true + /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -3881,10 +4379,6 @@ packages: semver: 7.5.4 dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -3901,6 +4395,15 @@ packages: hasBin: true dev: true + /memory-fs@0.2.0: + resolution: {integrity: sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==} + dev: true + + /meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + dev: true + /meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} @@ -3944,6 +4447,10 @@ packages: engines: {node: '>= 8'} dev: true + /micro-spelling-correcter@1.1.1: + resolution: {integrity: sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==} + dev: true + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -4015,23 +4522,19 @@ packages: engines: {node: '>= 8.0.0'} dev: true - /mlly@1.4.0: - resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.1.2 + ufo: 1.3.2 dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -4040,20 +4543,20 @@ packages: thenify-all: 1.6.0 dev: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + /node-releases@2.0.8: resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} dev: true @@ -4100,6 +4603,11 @@ packages: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true + /obj-props@1.4.0: + resolution: {integrity: sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ==} + engines: {node: '>=0.10.0'} + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4119,13 +4627,13 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -4153,6 +4661,25 @@ packages: mimic-fn: 4.0.0 dev: true + /open-editor@4.1.1: + resolution: {integrity: sha512-SYtGeZ9Zkzj/naoZaEF9LzwDYEGwuqQ4Fx5E3xdVRN98LFJjvMhG/ElByFEOVOiXepGra/Wi1fA4i/E1fXSBsw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + env-editor: 1.1.0 + execa: 5.1.1 + line-column-path: 3.0.0 + open: 8.4.2 + dev: true + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + /open@9.1.0: resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} engines: {node: '>=14.16'} @@ -4212,6 +4739,13 @@ packages: yocto-queue: 1.0.0 dev: true + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4226,18 +4760,18 @@ packages: p-limit: 3.1.0 dev: true + /p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + dev: true + /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -4271,6 +4805,11 @@ packages: engines: {node: '>=8'} dev: true + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -4320,12 +4859,6 @@ packages: engines: {node: '>=8.6'} dev: true - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true - /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -4343,20 +4876,41 @@ packages: find-up: 4.1.0 dev: true + /pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + dev: true + + /pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + dependencies: + find-up: 6.3.0 + dev: true + /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.4.0 + mlly: 1.4.2 pathe: 1.1.1 dev: true + /plur@4.0.0: + resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} + engines: {node: '>=10'} + dependencies: + irregular-plurals: 3.5.0 + dev: true + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} dev: true - /postcss-load-config@4.0.1(ts-node@10.9.1): + /postcss-load-config@4.0.1: resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -4369,15 +4923,14 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - ts-node: 10.9.1(@types/node@20.4.4)(typescript@5.1.6) - yaml: 2.2.1 + yaml: 2.3.1 dev: true - /postcss@8.4.26: - resolution: {integrity: sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==} + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 dev: true @@ -4410,8 +4963,8 @@ packages: hasBin: true dev: true - /prettier@3.0.0: - resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} hasBin: true dev: true @@ -4420,15 +4973,20 @@ packages: resolution: {integrity: sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==} dev: true - /pretty-format@29.6.1: - resolution: {integrity: sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.6.0 + '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true + /proto-props@2.0.0: + resolution: {integrity: sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==} + engines: {node: '>=4'} + dev: true + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -4442,9 +5000,9 @@ packages: engines: {node: '>=6'} dev: true - /q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} dev: true /querystringify@2.2.0: @@ -4460,6 +5018,12 @@ packages: engines: {node: '>=8'} dev: true + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true @@ -4526,15 +5090,6 @@ packages: hasBin: true dev: true - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 - dev: true - /regexp.prototype.flags@1.5.0: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} @@ -4593,7 +5148,7 @@ packages: /resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.12.1 + is-core-module: 2.13.1 path-parse: 1.0.7 dev: true @@ -4606,12 +5161,22 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 dev: true /reusify@1.0.4: @@ -4619,10 +5184,6 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true - /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -4630,28 +5191,33 @@ packages: glob: 7.2.3 dev: true - /rimraf@5.0.1: - resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} + /rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.3.3 + glob: 10.3.10 dev: true - /rollup@3.20.2: - resolution: {integrity: sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} + /rollup@4.8.0: + resolution: {integrity: sha512-NpsklK2fach5CdI+PScmlE5R4Ao/FSWtF7LkoIrHDxPACY/xshNasPsbpG0VVHxUTbf74tJbVT4PrP8JsJ6ZDA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 - dev: true - - /rollup@3.26.2: - resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 + '@rollup/rollup-android-arm-eabi': 4.8.0 + '@rollup/rollup-android-arm64': 4.8.0 + '@rollup/rollup-darwin-arm64': 4.8.0 + '@rollup/rollup-darwin-x64': 4.8.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.8.0 + '@rollup/rollup-linux-arm64-gnu': 4.8.0 + '@rollup/rollup-linux-arm64-musl': 4.8.0 + '@rollup/rollup-linux-riscv64-gnu': 4.8.0 + '@rollup/rollup-linux-x64-gnu': 4.8.0 + '@rollup/rollup-linux-x64-musl': 4.8.0 + '@rollup/rollup-win32-arm64-msvc': 4.8.0 + '@rollup/rollup-win32-ia32-msvc': 4.8.0 + '@rollup/rollup-win32-x64-msvc': 4.8.0 + fsevents: 2.3.3 dev: true /rrweb-cssom@0.6.0: @@ -4671,12 +5237,6 @@ packages: queue-microtask: 1.2.3 dev: true - /rxjs@7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} - dependencies: - tslib: 2.4.1 - dev: true - /safe-array-concat@1.0.0: resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} engines: {node: '>=0.4'} @@ -4695,7 +5255,7 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 is-regex: 1.1.4 dev: true @@ -4710,22 +5270,28 @@ packages: xmlchars: 2.2.0 dev: true + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: true - /semver@7.5.2: - resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} - engines: {node: '>=10'} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dependencies: - lru-cache: 6.0.0 dev: true /semver@7.5.4: @@ -4736,6 +5302,12 @@ packages: lru-cache: 6.0.0 dev: true + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: true + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -4777,7 +5349,7 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 object-inspect: 1.12.3 dev: true @@ -4794,6 +5366,11 @@ packages: engines: {node: '>=14'} dev: true + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4804,30 +5381,9 @@ packages: engines: {node: '>=12'} dev: true - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 + /slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} dev: true /smartwrap@2.0.2: @@ -4848,6 +5404,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -4895,6 +5458,11 @@ packages: readable-stream: 3.6.0 dev: true + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: true + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -4903,8 +5471,8 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true - /std-env@3.3.3: - resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + /std-env@3.6.0: + resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} dev: true /stream-transform@2.1.3: @@ -4913,8 +5481,8 @@ packages: mixme: 0.5.4 dev: true - /string-argv@0.3.1: - resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} dev: true @@ -4949,16 +5517,16 @@ packages: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /string_decoder@1.3.0: @@ -5008,8 +5576,8 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal@1.0.1: - resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: acorn: 8.10.0 dev: true @@ -5041,6 +5609,21 @@ packages: has-flag: 4.0.0 dev: true + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -5050,12 +5633,17 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + /synckit@0.8.6: + resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.4.2 - tslib: 2.6.0 + tslib: 2.6.2 + dev: true + + /tapable@0.1.10: + resolution: {integrity: sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==} + engines: {node: '>=0.6'} dev: true /tapable@2.2.1: @@ -5068,6 +5656,42 @@ packages: engines: {node: '>=8'} dev: true + /terser-webpack-plugin@5.3.9(esbuild@0.19.9)(webpack@5.89.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + esbuild: 0.19.9 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.26.0 + webpack: 5.89.0(esbuild@0.19.9) + dev: true + + /terser@5.26.0: + resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -5077,9 +5701,9 @@ packages: minimatch: 3.1.2 dev: true - /text-extensions@1.9.0: - resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} - engines: {node: '>=0.10'} + /text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} dev: true /text-table@0.2.0: @@ -5109,17 +5733,17 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /tinybench@2.5.0: - resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} dev: true - /tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + /tinypool@0.8.1: + resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} engines: {node: '>=14.0.0'} dev: true - /tinyspy@2.1.1: - resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} engines: {node: '>=14.0.0'} dev: true @@ -5135,6 +5759,14 @@ packages: os-tmpdir: 1.0.2 dev: true + /to-absolute-glob@3.0.0: + resolution: {integrity: sha512-loO/XEWTRqpfcpI7+Jr2RR2Umaaozx1t6OSVWtMi0oy5F/Fxg3IC+D/TToDnxyAGs7uZBGT/6XmyDUxgsObJXA==} + engines: {node: '>=0.10.0'} + dependencies: + is-absolute: 1.0.0 + is-negated-glob: 1.0.0 + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -5147,8 +5779,8 @@ packages: is-number: 7.0.0 dev: true - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -5163,11 +5795,11 @@ packages: punycode: 2.3.0 dev: true - /tr46@4.1.1: - resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} - engines: {node: '>=14'} + /tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /tree-kill@1.2.2: @@ -5180,48 +5812,30 @@ packages: engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.1(typescript@5.1.6): - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + /ts-api-utils@1.0.3(typescript@5.3.3): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.1.6 + typescript: 5.3.3 dev: true /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node@10.9.1(@types/node@20.4.4)(typescript@5.1.6): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /tsconfck@2.1.2(typescript@5.3.3): + resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} + engines: {node: ^14.13.1 || ^16 || >=18} hasBin: true peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' + typescript: ^4.3.5 || ^5.0.0 peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': + typescript: optional: true dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 20.4.4 - acorn: 8.10.0 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.1.6 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 + typescript: 5.3.3 dev: true /tsconfig-paths@3.14.2: @@ -5233,23 +5847,22 @@ packages: strip-bom: 3.0.0 dev: true - /tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: true - - /tslib@2.6.0: - resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsup@7.1.0(ts-node@10.9.1)(typescript@5.1.6): - resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} - engines: {node: '>=16.14'} + /tsup@8.0.1(@microsoft/api-extractor@7.38.5)(typescript@5.3.3): + resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} + engines: {node: '>=18'} hasBin: true peerDependencies: + '@microsoft/api-extractor': ^7.36.0 '@swc/core': ^1 postcss: ^8.4.12 - typescript: '>=4.1.0' + typescript: '>=4.5.0' peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true '@swc/core': optional: true postcss: @@ -5257,21 +5870,22 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.0.1(esbuild@0.18.13) + '@microsoft/api-extractor': 7.38.5(@types/node@18.19.3) + bundle-require: 4.0.1(esbuild@0.19.9) cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.18.13 + esbuild: 0.19.9 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1(ts-node@10.9.1) + postcss-load-config: 4.0.1 resolve-from: 5.0.0 - rollup: 3.20.2 + rollup: 4.8.0 source-map: 0.8.0-beta.0 sucrase: 3.29.0 tree-kill: 1.2.2 - typescript: 5.1.6 + typescript: 5.3.3 transitivePeerDependencies: - supports-color - ts-node @@ -5333,6 +5947,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -5371,37 +5990,44 @@ packages: is-typed-array: 1.1.10 dev: true - /typedoc-theme-hierarchy@4.0.0(typedoc@0.25.0): - resolution: {integrity: sha512-/y8QfmkLN+NS57hoxsS/vD1fdAPdkd7JtC7xWp2Lk3rE6/cRweFdEfaKD6GJCQMD3CuSD7Ldcc5vjwwrF4UqyQ==} + /typedoc-material-theme@1.0.1(typedoc@0.25.4): + resolution: {integrity: sha512-D+X5dS0VVx0UAr1gRDnb7Y16Y9BIBy3/OX54Iu7IXxl9dqkxC3qR8rdIXyCpGaoGKZigajQjmU1ap0uihIFDOw==} + engines: {node: '>=20.0.0', npm: '>=9.6.4'} peerDependencies: - typedoc: ^0.24.0 + typedoc: ^0.25.3 dependencies: - fs-extra: 10.1.0 - typedoc: 0.25.0(typescript@5.1.6) + '@material/material-color-utilities': 0.2.7 + typedoc: 0.25.4(typescript@5.3.3) dev: true - /typedoc@0.25.0(typescript@5.1.6): - resolution: {integrity: sha512-FvCYWhO1n5jACE0C32qg6b3dSfQ8f2VzExnnRboowHtqUD6ARzM2r8YJeZFYXhcm2hI4C2oCRDgNPk/yaQUN9g==} + /typedoc@0.25.4(typescript@5.3.3): + resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} engines: {node: '>= 16'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x dependencies: lunr: 2.3.9 marked: 4.3.0 minimatch: 9.0.3 shiki: 0.14.1 - typescript: 5.1.6 + typescript: 5.3.3 + dev: true + + /typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true dev: true - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true dev: true - /ufo@1.1.2: - resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true /unbox-primitive@1.0.2: @@ -5413,6 +6039,15 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -5450,6 +6085,10 @@ packages: punycode: 2.3.0 dev: true + /url-or-path@2.3.0: + resolution: {integrity: sha512-5g9xpEJKjbAY8ikLU3XFpEg3hRLGt6SbCQmDElb1AL7JTW6vMi5Na5e3dMvONHisIu9VHgMAADLHJ8EznYR2ow==} + dev: true + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: @@ -5461,10 +6100,6 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -5472,17 +6107,21 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite-node@0.34.0(@types/node@20.4.4): - resolution: {integrity: sha512-rGZMvpb052rjUwJA/a17xMfOibzNF7byMdRSTcN2Lw8uxX08s5EfjWW5mBkm3MSFTPctMSVtT2yC+8ShrZbT5g==} - engines: {node: '>=v14.18.0'} + /validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: true + + /vite-node@1.0.4(@types/node@18.19.3): + resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.7(@types/node@20.4.4) + vite: 5.0.8(@types/node@18.19.3) transitivePeerDependencies: - '@types/node' - less @@ -5494,12 +6133,29 @@ packages: - terser dev: true - /vite@4.4.7(@types/node@20.4.4): - resolution: {integrity: sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==} - engines: {node: ^14.18.0 || >=16.0.0} + /vite-tsconfig-paths@4.2.2(typescript@5.3.3)(vite@5.0.8): + resolution: {integrity: sha512-dq0FjyxHHDnp0uS3P12WEOX2W7NeuLzX9AWP38D7Zw2CTbFErapwQVlCiT5DMJcVWKQ1MMdTe92PZl/rBQ7qcw==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + dependencies: + debug: 4.3.4 + globrex: 0.1.2 + tsconfck: 2.1.2(typescript@5.3.3) + vite: 5.0.8(@types/node@18.19.3) + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /vite@5.0.8(@types/node@18.19.3): + resolution: {integrity: sha512-jYMALd8aeqR3yS9xlHd0OzQJndS9fH5ylVgWdB+pxTwxLKdO1pgC5Dlb398BUxpfaBxa4M9oT7j1g503Gaj5IQ==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': '>= 14' + '@types/node': ^18.0.0 || >=20.0.0 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -5522,30 +6178,30 @@ packages: terser: optional: true dependencies: - '@types/node': 20.4.4 - esbuild: 0.18.13 - postcss: 8.4.26 - rollup: 3.26.2 + '@types/node': 18.19.3 + esbuild: 0.19.9 + postcss: 8.4.32 + rollup: 4.8.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /vitest@0.34.0(jsdom@22.1.0): - resolution: {integrity: sha512-8Pnc1fVt1P6uBncdUZ++hgiJGgxIRKuz4bmS/PQziaEcUj0D1g9cGiR1MbLrcsvFTC6fgrqDhYoTAdBG356WMA==} - engines: {node: '>=v14.18.0'} + /vitest@1.0.4(@types/node@18.19.3)(jsdom@23.0.1): + resolution: {integrity: sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': ^1.0.0 + '@vitest/ui': ^1.0.0 happy-dom: '*' jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/node': + optional: true '@vitest/browser': optional: true '@vitest/ui': @@ -5554,37 +6210,29 @@ packages: optional: true jsdom: optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true dependencies: - '@types/chai': 4.3.5 - '@types/chai-subset': 1.3.3 - '@types/node': 20.4.4 - '@vitest/expect': 0.34.0 - '@vitest/runner': 0.34.0 - '@vitest/snapshot': 0.34.0 - '@vitest/spy': 0.34.0 - '@vitest/utils': 0.34.0 - acorn: 8.10.0 - acorn-walk: 8.2.0 + '@types/node': 18.19.3 + '@vitest/expect': 1.0.4 + '@vitest/runner': 1.0.4 + '@vitest/snapshot': 1.0.4 + '@vitest/spy': 1.0.4 + '@vitest/utils': 1.0.4 + acorn-walk: 8.3.1 cac: 6.7.14 - chai: 4.3.7 + chai: 4.3.10 debug: 4.3.4 - jsdom: 22.1.0 - local-pkg: 0.4.3 - magic-string: 0.30.1 + execa: 8.0.1 + jsdom: 23.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.5 pathe: 1.1.1 picocolors: 1.0.0 - std-env: 3.3.3 - strip-literal: 1.0.1 - tinybench: 2.5.0 - tinypool: 0.7.0 - vite: 4.4.7(@types/node@20.4.4) - vite-node: 0.34.0(@types/node@20.4.4) + std-env: 3.6.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.8.1 + vite: 5.0.8(@types/node@18.19.3) + vite-node: 1.0.4(@types/node@18.19.3) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -5604,11 +6252,19 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} + /w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + dependencies: + xml-name-validator: 5.0.0 + dev: true + + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} dependencies: - xml-name-validator: 4.0.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 dev: true /wcwidth@1.0.1: @@ -5626,23 +6282,68 @@ packages: engines: {node: '>=12'} dev: true - /whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack@5.89.0(esbuild@0.19.9): + resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.4 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.4.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(esbuild@0.19.9)(webpack@5.89.0) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} dev: true - /whatwg-url@12.0.1: - resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} - engines: {node: '>=14'} + /whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} dependencies: - tr46: 4.1.1 + tr46: 5.0.0 webidl-conversions: 7.0.0 dev: true @@ -5743,8 +6444,8 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + /ws@8.15.0: + resolution: {integrity: sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5756,15 +6457,68 @@ packages: optional: true dev: true - /xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} + /xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} dev: true /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true + /xo@0.56.0(webpack@5.89.0): + resolution: {integrity: sha512-ohzSqgQ8POgZ3KNaEK/gxDovb6h3cglxv8+xi9Dn7gmRe8g4qotpOZpMs5ACJhvkJDmJOhiKbk6Uq6Mx1Di9DA==} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + webpack: '>=1.11.0' + peerDependenciesMeta: + webpack: + optional: true + dependencies: + '@eslint/eslintrc': 2.1.4 + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + arrify: 3.0.0 + cosmiconfig: 8.3.6(typescript@5.3.3) + define-lazy-prop: 3.0.0 + eslint: 8.55.0 + eslint-config-prettier: 8.10.0(eslint@8.55.0) + eslint-config-xo: 0.43.1(eslint@8.55.0) + eslint-config-xo-typescript: 1.0.1(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) + eslint-formatter-pretty: 5.0.0 + eslint-import-resolver-webpack: 0.13.8(eslint-plugin-import@2.27.5)(webpack@5.89.0) + eslint-plugin-ava: 14.0.0(eslint@8.55.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-webpack@0.13.8)(eslint@8.55.0) + eslint-plugin-n: 16.4.0(eslint@8.55.0) + eslint-plugin-no-use-extend-native: 0.5.0 + eslint-plugin-prettier: 5.0.1(eslint-config-prettier@8.10.0)(eslint@8.55.0)(prettier@3.1.1) + eslint-plugin-unicorn: 48.0.1(eslint@8.55.0) + esm-utils: 4.2.1 + find-cache-dir: 4.0.0 + find-up: 6.3.0 + get-stdin: 9.0.0 + get-tsconfig: 4.7.2 + globby: 13.2.2 + imurmurhash: 0.1.4 + json-stable-stringify-without-jsonify: 1.0.1 + lodash-es: 4.17.21 + meow: 12.1.1 + micromatch: 4.0.5 + open-editor: 4.1.1 + prettier: 3.1.1 + semver: 7.5.4 + slash: 5.1.0 + to-absolute-glob: 3.0.0 + typescript: 5.3.3 + webpack: 5.89.0(esbuild@0.19.9) + transitivePeerDependencies: + - '@types/eslint' + - eslint-import-resolver-typescript + - supports-color + dev: true + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true @@ -5786,11 +6540,6 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml@2.2.1: - resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} - engines: {node: '>= 14'} - dev: true - /yaml@2.3.1: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} @@ -5844,11 +6593,6 @@ packages: yargs-parser: 21.1.1 dev: true - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5858,3 +6602,15 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true + + /z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.11.0 + optionalDependencies: + commander: 9.5.0 + dev: true diff --git a/renovate.json b/renovate.json index e8aef06..dc3f29e 100644 --- a/renovate.json +++ b/renovate.json @@ -1,18 +1,18 @@ { - "extends": ["config:base", "schedule:earlyMondays"], - "rangeStrategy": "replace", - "labels": ["dependencies"], - "timezone": "America/Mexico_City", - "ignoreDeps": [], - "packageRules": [ - { - "updateTypes": ["minor", "patch", "pin", "digest"], - "automerge": true - }, - { - "packagePatterns": ["^eslint"], - "groupName": "eslint packages", - "addLabels": ["eslint"] - } - ] + "extends": ["config:base", "schedule:earlyMondays"], + "rangeStrategy": "replace", + "labels": ["dependencies"], + "timezone": "America/Mexico_City", + "ignoreDeps": [], + "packageRules": [ + { + "updateTypes": ["minor", "patch", "pin", "digest"], + "automerge": true + }, + { + "packagePatterns": ["^eslint"], + "groupName": "eslint packages", + "addLabels": ["eslint"] + } + ] } diff --git a/src/dom.ts b/src/dom.ts index 24cc190..f127aac 100644 --- a/src/dom.ts +++ b/src/dom.ts @@ -1,4 +1,4 @@ -import { DOMNotFoundError } from './exceptions/dom-not-found-error'; +import { DomNotFoundError } from './exceptions/dom-not-found-error.js'; let _dom: DOMImplementation | undefined; let _parser: DOMParser | undefined; @@ -9,14 +9,14 @@ let _serializer: XMLSerializer | undefined; * * @returns the current DOMParser object * - * @throws {@link DOMNotFoundError} This exception is throw if not install DOMParser. + * @throws {@link DomNotFoundError} This exception is throw if not install DOMParser. */ const getParser = (): DOMParser => { - if (!_parser) { - throw new DOMNotFoundError('DOMParser'); - } + if (!_parser) { + throw new DomNotFoundError('DOMParser'); + } - return _parser; + return _parser; }; /** @@ -24,14 +24,14 @@ const getParser = (): DOMParser => { * * @returns the current XMLSerializer object * - * @throws {@link DOMNotFoundError} This exception is throw if not install XMLSerializer. + * @throws {@link DomNotFoundError} This exception is throw if not install XMLSerializer. */ const getSerializer = (): XMLSerializer => { - if (!_serializer) { - throw new DOMNotFoundError('XMLSerializer'); - } + if (!_serializer) { + throw new DomNotFoundError('XMLSerializer'); + } - return _serializer; + return _serializer; }; /** @@ -39,23 +39,23 @@ const getSerializer = (): XMLSerializer => { * * @returns the current DOMImplementation object * - * @throws {@link DOMNotFoundError} This exception is throw if not install DOMImplementation. + * @throws {@link DomNotFoundError} This exception is throw if not install DOMImplementation. */ const getDom = (): DOMImplementation => { - if (!_dom) { - throw new DOMNotFoundError('DOMImplementation'); - } + if (!_dom) { + throw new DomNotFoundError('DOMImplementation'); + } - return _dom; + return _dom; }; /** * Install DOM instances for usage on this library */ const install = (parser?: DOMParser, serializer?: XMLSerializer, dom?: DOMImplementation): void => { - _parser = parser; - _serializer = serializer; - _dom = dom; + _parser = parser; + _serializer = serializer; + _dom = dom; }; export { getParser, getSerializer, getDom, install }; diff --git a/src/exceptions/dom-not-found-error.ts b/src/exceptions/dom-not-found-error.ts index ee07e65..c9b992b 100644 --- a/src/exceptions/dom-not-found-error.ts +++ b/src/exceptions/dom-not-found-error.ts @@ -1,12 +1,9 @@ /** * DOMNotFoundError exception. For not provided dom resolver. */ -export class DOMNotFoundError extends Error { - /** - * - */ - constructor(type: 'DOMParser' | 'XMLSerializer' | 'DOMImplementation') { - super(`No ${type} was provided.`); - this.name = `${type}NotFoundError`; - } +export class DomNotFoundError extends Error { + constructor(type: 'DOMParser' | 'XMLSerializer' | 'DOMImplementation') { + super(`No ${type} was provided.`); + this.name = `${type}NotFoundError`; + } } diff --git a/src/index.ts b/src/index.ts index 1e039ab..4f17d43 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,15 +3,15 @@ /** * A library for structures of common data and utils or functions on suit cfdiutils. */ -export * from './dom'; -export * from './exceptions/dom-not-found-error'; -export * from './nodes/c-attributes'; -export * from './nodes/c-node'; -export * from './nodes/c-node-has-value-interface'; -export * from './nodes/c-node-interface'; -export * from './nodes/c-nodes'; -export * from './nodes/c-nodes-sorter'; -export * from './nodes/xml-node-utils'; -export * from './utils/currency-decimals'; -export * from './utils/dom-validators'; -export * from './utils/xml'; +export * from './dom.js'; +export * from './exceptions/dom-not-found-error.js'; +export * from './nodes/attributes.js'; +export * from './nodes/node.js'; +export * from './nodes/node-has-value-interface.js'; +export * from './nodes/node-interface.js'; +export * from './nodes/nodes.js'; +export * from './nodes/nodes-sorter.js'; +export * from './nodes/xml-node-utils.js'; +export * from './utils/currency-decimals.js'; +export * from './utils/dom-validators.js'; +export * from './utils/xml.js'; diff --git a/src/nodes/attributes.ts b/src/nodes/attributes.ts new file mode 100644 index 0000000..3af6923 --- /dev/null +++ b/src/nodes/attributes.ts @@ -0,0 +1,104 @@ +import { Xml } from '../utils/xml.js'; + +export class Attributes extends Map { + /** + * Cast any value to string + */ + private static castValueToString(key: string, value: unknown): undefined | string { + if (value === null || value === undefined) { + return undefined; + } + + if (/boolean|number|string/.test(typeof value)) { + return `${value as boolean | number | string}`; + } + + if (typeof value === 'object' && !Array.isArray(value)) { + return (value as { toString: () => string }).toString(); + } + + throw new SyntaxError(`Cannot convert value of attribute ${key} to string`); + } + + constructor(attributes: Record = {}) { + super(); + this.importRecord(attributes); + } + + public override get(name: string): string { + const value = super.get(name); + + if (value === undefined) { + return ''; + } + + return value; + } + + public override set(name: string, value?: string | null): this { + if (value === undefined || value === null) { + this.delete(name); + + return this; + } + + if (!Xml.isValidXmlName(name)) { + throw new SyntaxError(`Cannot set attribute with an invalid xml name: ${name}`); + } + + super.set(name, value.toString()); + + return this; + } + + public exists(name: string): boolean { + let found = false; + for (const key of this.keys()) { + if (name === key) { + found = true; + break; + } + } + + return found; + } + + public importRecord(attributes: Record): this { + if (Object.keys(attributes).length > 0) { + for (const [key, value] of Object.entries(attributes)) { + const fixedValue = Attributes.castValueToString(key, value); + this.set(key, fixedValue); + } + } + + return this; + } + + public exportRecord(): Record { + const jsonResponse: Record = {}; + for (const [key, value] of this.entries()) { + jsonResponse[key] = value; + } + + return jsonResponse; + } + + /** + * Array access implementation as attribute helpers + */ + public offsetExists(offset: string): boolean { + return this.exists(offset); + } + + public offsetGet(offset: string): string { + return this.get(offset); + } + + public offsetSet(offset: string, value?: unknown): void { + this.set(offset, Attributes.castValueToString(offset, value)); + } + + public offsetUnset(offset: string): void { + super.delete(offset); + } +} diff --git a/src/nodes/c-attributes.ts b/src/nodes/c-attributes.ts deleted file mode 100644 index a1c7ce8..0000000 --- a/src/nodes/c-attributes.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Xml } from '../utils/xml'; - -export class CAttributes extends Map { - constructor(attributes: Record = {}) { - super(); - this.importRecord(attributes); - } - - /** - * Cast any value to string - */ - private static castValueToString(key: string, value: unknown): undefined | string { - if (value === null || value === undefined) { - return undefined; - } - - if (/boolean|number|string/.test(typeof value)) { - return `${value as boolean | number | string}`; - } - - if (typeof value === 'object' && !Array.isArray(value)) { - return (value as { toString: () => string }).toString(); - } - - throw new SyntaxError(`Cannot convert value of attribute ${key} to string`); - } - - public override get(name: string): string { - const value = super.get(name); - - if (value === undefined) { - return ''; - } - - return value; - } - - public override set(name: string, value?: string | null): this { - if (value === undefined || value === null) { - this.delete(name); - - return this; - } - - if (!Xml.isValidXmlName(name)) { - throw new SyntaxError(`Cannot set attribute with an invalid xml name: ${name}`); - } - - super.set(name, value.toString()); - - return this; - } - - public exists(name: string): boolean { - let found = false; - for (const key of this.keys()) { - if (name === key) { - found = true; - break; - } - } - - return found; - } - - public importRecord(attributes: Record): this { - if (Object.keys(attributes).length > 0) { - for (const [key, value] of Object.entries(attributes)) { - const fixedValue = CAttributes.castValueToString(key, value); - this.set(key, fixedValue); - } - } - - return this; - } - - public exportRecord(): Record { - const jsonResponse: Record = {}; - for (const [key, value] of this.entries()) { - jsonResponse[key] = value; - } - - return jsonResponse; - } - - /** - * Array access implementation as attribute helpers - */ - public offsetExists(offset: string): boolean { - return this.exists(offset); - } - - public offsetGet(offset: string): string { - return this.get(offset); - } - - public offsetSet(offset: string, value?: unknown): void { - this.set(offset, CAttributes.castValueToString(offset, value)); - } - - public offsetUnset(offset: string): void { - super.delete(offset); - } -} diff --git a/src/nodes/c-node-has-value-interface.ts b/src/nodes/c-node-has-value-interface.ts deleted file mode 100644 index dea5418..0000000 --- a/src/nodes/c-node-has-value-interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type CNodeHasValueInterface = { - value(): string; - - setValue(value: string): void; -}; diff --git a/src/nodes/c-node-interface.ts b/src/nodes/c-node-interface.ts deleted file mode 100644 index 045d90f..0000000 --- a/src/nodes/c-node-interface.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { type CAttributes } from './c-attributes'; -import { type CNodes } from './c-nodes'; - -export type CNodeInterface = { - name(): string; - - children(): CNodes; - - addChild(node: CNodeInterface): CNodeInterface; - - attributes(): CAttributes; - - addAttributes(attributes: Record): void; - - clear(): void; - - searchAttribute(...searchPath: string[]): string; - - searchNodes(...searchPath: string[]): CNodes; - - searchNode(...searchPath: string[]): CNodeInterface | undefined; - - offsetExists(offset: string): boolean; - - get(offset: string): string; - - set(offset: string, value: string): void; - - unset(offset: string): void; - - count(): number; - - [Symbol.iterator](): IterableIterator; -}; diff --git a/src/nodes/c-node.ts b/src/nodes/c-node.ts deleted file mode 100644 index b2a428e..0000000 --- a/src/nodes/c-node.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { Xml } from '../utils/xml'; -import { CAttributes } from './c-attributes'; -import { type CNodeHasValueInterface } from './c-node-has-value-interface'; -import { type CNodeInterface } from './c-node-interface'; -import { CNodes } from './c-nodes'; - -export class CNode implements CNodeInterface, CNodeHasValueInterface { - private readonly _name: string; - - private readonly _attributes: CAttributes; - - private readonly _children: CNodes; - - private _value: string; - - constructor(name: string, attributes: Record = {}, children: CNodeInterface[] = [], value = '') { - if (!Xml.isValidXmlName(name)) { - throw new SyntaxError(`Cannot create a node with an invalid xml name: ${name}`); - } - - this._name = name; - this._attributes = new CAttributes(attributes); - this._children = new CNodes(children); - this._value = value; - } - - public name(): string { - return this._name; - } - - public children(): CNodes { - return this._children; - } - - public addChild(node: CNodeInterface): CNodeInterface { - this._children.add(node); - - return node; - } - - public attributes(): CAttributes { - return this._attributes; - } - - public clear(): void { - this._attributes.clear(); - this._children.removeAll(); - } - - public addAttributes(attributes: Record): void { - this._attributes.importRecord(attributes); - } - - public value(): string { - return this._value; - } - - public setValue(value: string): void { - this._value = value; - } - - public searchAttribute(...searchPath: string[]): string { - const attribute = searchPath.pop(); - const node = this.searchNode(...searchPath); - if (!node || !attribute) { - return ''; - } - - return node.attributes().get(attribute) || ''; - } - - public searchNodes(...searchPath: string[]): CNodes { - const nodes = new CNodes(); - const nodeName = searchPath.pop(); - const parent = this.searchNode(...searchPath); - if (parent) { - for (const child of parent.children()) { - if (child.name() === nodeName) { - nodes.add(child); - } - } - } - - return nodes; - } - - public searchNode(...searchPath: string[]): CNodeInterface | undefined { - // eslint-disable-next-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment - let node: CNodeInterface | undefined = this; - for (const searchName of searchPath) { - node = node.children().firstNodeWithName(searchName); - if (!node) { - break; - } - } - - return node; - } - - /** - * Array access implementation as attribute helpers - */ - public offsetExists(offset: string): boolean { - return this.attributes().offsetExists(offset); - } - - public get(offset: string): string { - return this.attributes().offsetGet(offset); - } - - public set(offset: string, value: unknown): void { - this.attributes().offsetSet(offset, value); - } - - public unset(offset: string): void { - this.attributes().offsetUnset(offset); - } - - public count(): number { - return this.children().length; - } - - public [Symbol.iterator](): IterableIterator { - return this._children[Symbol.iterator](); - } -} diff --git a/src/nodes/c-nodes-sorter.ts b/src/nodes/c-nodes-sorter.ts deleted file mode 100644 index 3002670..0000000 --- a/src/nodes/c-nodes-sorter.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { type CNodeInterface } from './c-node-interface'; - -export class CNodesSorter { - private _order: Map = new Map(); - - private size!: number; - - constructor(order: string[] = []) { - this.setOrder(order); - } - - /** - * Internal compare Maps - * @param a - map - * @param b - map - */ - private static compareMaps(a: Map, b: Map): boolean { - let testValue; - if (a.size !== b.size) { - return false; - } - - for (const [key, value] of a) { - testValue = b.get(key); - if (testValue !== value || (testValue === undefined && !b.has(key))) { - return false; - } - } - - return true; - } - - /** - * It takes only the unique strings names and sort using the order of appearance - * @param names - unique strings - */ - public setOrder(names: string[]): boolean { - const order = new Map(Array.from(this.parseNames(names), (entry) => [entry[1], entry[0]])); - if (CNodesSorter.compareMaps(this._order, order)) { - return false; - } - - this._order = order; - this.size = order.size; - - return true; - } - - public parseNames(names: unknown[]): Map { - const isValidName = (name: unknown): boolean => Boolean(name) && typeof name === 'string' && name !== '0'; - - return new Map( - [...new Set(names.filter((element) => isValidName(element)) as string[])].map((entry, index) => [ - index, - entry, - ]), - ); - } - - /** - * The current order list - */ - public getOrder(): string[] { - const flippedArray = new Map(Array.from(this._order, (entry) => [entry[1], entry[0]])); - - return [...flippedArray.values()]; - } - - public sort(nodes: CNodeInterface[]): CNodeInterface[] { - if (this.size > 0) { - nodes = this.stableArraySort(nodes, 'compareNodesByName'); - } - - return nodes; - } - - public compareNodesByName(a: CNodeInterface, b: CNodeInterface): number { - const aNumber = this.valueByName(a.name()); - const bNumber = this.valueByName(b.name()); - - return Math.sign(aNumber - bNumber); - } - - public valueByName(name: string): number { - const getOrder = this._order.get(name); - - return getOrder ?? this.size; - } - - /** - * This function is a replacement for sort that try to sort - * but if items are equal then uses the relative position as second argument - * @param input - CNodeInterface - * @param callable - function callable - */ - private stableArraySort(input: CNodeInterface[], callable: keyof this): CNodeInterface[] { - let list = input.map((entry, index) => ({ - item: entry, - index, - })); - - // Double check by function provider and indexed - const comparar = ( - a: { item: CNodeInterface; index: number }, - b: { item: CNodeInterface; index: number }, - ): number => { - let value: number = (this[callable] as (a: CNodeInterface, b: CNodeInterface) => number)(a.item, b.item); - if (value === 0) { - value = Math.sign(a.index - b.index); - } - - return value; - }; - - list = list.sort(comparar); - - return list.map((node) => node.item); - } -} diff --git a/src/nodes/c-nodes.ts b/src/nodes/c-nodes.ts deleted file mode 100644 index ff6f6b0..0000000 --- a/src/nodes/c-nodes.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { type CNodeInterface } from './c-node-interface'; -import { CNodesSorter } from './c-nodes-sorter'; - -export class CNodes extends Array { - private readonly _sorter: CNodesSorter; - - constructor(nodes: CNodeInterface[] = []) { - super(); - this._sorter = new CNodesSorter(); - this.importFromArray(nodes); - } - - public static get [Symbol.species](): ArrayConstructor { - return Array; - } - - public add(...nodes: CNodeInterface[]): this { - let somethingChange = false; - for (const node of nodes) { - if (!this.exists(node)) { - this.push(node); - somethingChange = true; - } - } - - if (somethingChange) { - this.order(); - } - - return this; - } - - public order(): void { - this.splice(0, this.length, ...this._sorter.sort(this)); - } - - /** - * It takes only the unique string names and sort using the order of appearance - * @param names - names for order - */ - public setOrder(names: string[]): void { - if (this._sorter.setOrder(names)) { - this.order(); - } - } - - public getOrder(): string[] { - return this._sorter.getOrder(); - } - - public remove(node: CNodeInterface): this { - const index = this.indexOf(node); - if (index >= 0) { - this.splice(index, 1); - } - - return this; - } - - public removeAll(): this { - this.splice(0, this.length); - - return this; - } - - public exists(node: CNodeInterface): boolean { - return this.includes(node); - } - - public first(): CNodeInterface | undefined { - return this.at(0); - } - - public get(position: number): CNodeInterface { - const indexedNodes = [...this.values()]; - const value = indexedNodes.at(position); - if (!value) { - throw new RangeError(`The index ${position} does not exists`); - } - - return value; - } - - public firstNodeWithName(nodeName: string): CNodeInterface | undefined { - return this.find((node) => node.name() === nodeName); - } - - public getNodesByName(nodeName: string): CNodes { - const nodes = new CNodes(); - for (const node of this) { - if (node.name() === nodeName) { - nodes.add(node); - } - } - - return nodes; - } - - public importFromArray(nodes: CNodeInterface[]): this { - for (const [index, node] of nodes.entries()) { - if (typeof node.searchNodes !== 'function' || typeof node.children !== 'function') { - throw new SyntaxError(`The element index ${index} is not a CNodeInterface object`); - } - } - - this.add(...nodes); - - return this; - } -} diff --git a/src/nodes/node-has-value-interface.ts b/src/nodes/node-has-value-interface.ts new file mode 100644 index 0000000..9cb8295 --- /dev/null +++ b/src/nodes/node-has-value-interface.ts @@ -0,0 +1,5 @@ +export type NodeHasValueInterface = { + value(): string; + + setValue(value: string): void; +}; diff --git a/src/nodes/node-interface.ts b/src/nodes/node-interface.ts new file mode 100644 index 0000000..c83c502 --- /dev/null +++ b/src/nodes/node-interface.ts @@ -0,0 +1,34 @@ +import { type Attributes } from './attributes.js'; +import { type Nodes } from './nodes.js'; + +export type NodeInterface = { + name(): string; + + children(): Nodes; + + addChild(node: NodeInterface): NodeInterface; + + attributes(): Attributes; + + addAttributes(attributes: Record): void; + + clear(): void; + + searchAttribute(...searchPath: string[]): string; + + searchNodes(...searchPath: string[]): Nodes; + + searchNode(...searchPath: string[]): NodeInterface | undefined; + + offsetExists(offset: string): boolean; + + get(offset: string): string; + + set(offset: string, value: string): void; + + unset(offset: string): void; + + count(): number; + + [Symbol.iterator](): IterableIterator; +}; diff --git a/src/nodes/node.ts b/src/nodes/node.ts new file mode 100644 index 0000000..70533e7 --- /dev/null +++ b/src/nodes/node.ts @@ -0,0 +1,126 @@ +import { Xml } from '../utils/xml.js'; +import { Attributes } from './attributes.js'; +import { type NodeHasValueInterface } from './node-has-value-interface.js'; +import { type NodeInterface } from './node-interface.js'; +import { Nodes } from './nodes.js'; + +export class Node implements NodeInterface, NodeHasValueInterface { + private readonly _name: string; + + private readonly _attributes: Attributes; + + private readonly _children: Nodes; + + private _value: string; + + constructor(name: string, attributes: Record = {}, children: NodeInterface[] = [], value = '') { + if (!Xml.isValidXmlName(name)) { + throw new SyntaxError(`Cannot create a node with an invalid xml name: ${name}`); + } + + this._name = name; + this._attributes = new Attributes(attributes); + this._children = new Nodes(children); + this._value = value; + } + + public name(): string { + return this._name; + } + + public children(): Nodes { + return this._children; + } + + public addChild(node: NodeInterface): NodeInterface { + this._children.add(node); + + return node; + } + + public attributes(): Attributes { + return this._attributes; + } + + public clear(): void { + this._attributes.clear(); + this._children.removeAll(); + } + + public addAttributes(attributes: Record): void { + this._attributes.importRecord(attributes); + } + + public value(): string { + return this._value; + } + + public setValue(value: string): void { + this._value = value; + } + + public searchAttribute(...searchPath: string[]): string { + const attribute = searchPath.pop(); + const node = this.searchNode(...searchPath); + if (!node || !attribute) { + return ''; + } + + return node.attributes().get(attribute) || ''; + } + + public searchNodes(...searchPath: string[]): Nodes { + const nodes = new Nodes(); + const nodeName = searchPath.pop(); + const parent = this.searchNode(...searchPath); + if (parent) { + for (const child of parent.children()) { + if (child.name() === nodeName) { + nodes.add(child); + } + } + } + + return nodes; + } + + public searchNode(...searchPath: string[]): NodeInterface | undefined { + // eslint-disable-next-line unicorn/no-this-assignment, @typescript-eslint/no-this-alias + let node: NodeInterface | undefined = this; + for (const searchName of searchPath) { + node = node.children().firstNodeWithName(searchName); + if (!node) { + break; + } + } + + return node; + } + + /** + * Array access implementation as attribute helpers + */ + public offsetExists(offset: string): boolean { + return this.attributes().offsetExists(offset); + } + + public get(offset: string): string { + return this.attributes().offsetGet(offset); + } + + public set(offset: string, value: unknown): void { + this.attributes().offsetSet(offset, value); + } + + public unset(offset: string): void { + this.attributes().offsetUnset(offset); + } + + public count(): number { + return this.children().length; + } + + public [Symbol.iterator](): IterableIterator { + return this._children[Symbol.iterator](); + } +} diff --git a/src/nodes/nodes-sorter.ts b/src/nodes/nodes-sorter.ts new file mode 100644 index 0000000..f7d2d88 --- /dev/null +++ b/src/nodes/nodes-sorter.ts @@ -0,0 +1,113 @@ +import { type NodeInterface } from './node-interface.js'; + +export class NodesSorter { + /** + * Internal compare Maps + * @param a - map + * @param b - map + */ + private static compareMaps(a: Map, b: Map): boolean { + let testValue; + if (a.size !== b.size) { + return false; + } + + for (const [key, value] of a) { + testValue = b.get(key); + if (testValue !== value || (testValue === undefined && !b.has(key))) { + return false; + } + } + + return true; + } + + private _order: Map = new Map(); + + private size!: number; + + constructor(order: string[] = []) { + this.setOrder(order); + } + + /** + * It takes only the unique strings names and sort using the order of appearance + * @param names - unique strings + */ + public setOrder(names: string[]): boolean { + const order = new Map(Array.from(this.parseNames(names), (entry) => [entry[1], entry[0]])); + if (NodesSorter.compareMaps(this._order, order)) { + return false; + } + + this._order = order; + this.size = order.size; + + return true; + } + + public parseNames(names: unknown[]): Map { + const isValidName = (name: unknown): boolean => Boolean(name) && typeof name === 'string' && name !== '0'; + + return new Map( + [...new Set(names.filter((element) => isValidName(element)) as string[])].map((entry, index) => [index, entry]), + ); + } + + /** + * The current order list + */ + public getOrder(): string[] { + const flippedArray = new Map(Array.from(this._order, (entry) => [entry[1], entry[0]])); + + return [...flippedArray.values()]; + } + + public sort(nodes: NodeInterface[]): NodeInterface[] { + if (this.size > 0) { + nodes = this.stableArraySort(nodes, 'compareNodesByName'); + } + + return nodes; + } + + public compareNodesByName(a: NodeInterface, b: NodeInterface): number { + const aNumber = this.valueByName(a.name()); + const bNumber = this.valueByName(b.name()); + + return Math.sign(aNumber - bNumber); + } + + public valueByName(name: string): number { + const getOrder = this._order.get(name); + + return getOrder ?? this.size; + } + + /** + * This function is a replacement for sort that try to sort + * but if items are equal then uses the relative position as second argument + * @param input - CNodeInterface + * @param callable - function callable + */ + private stableArraySort(input: NodeInterface[], callable: keyof this): NodeInterface[] { + let list = input.map((entry, index) => ({ + item: entry, + index, + })); + + // Double check by function provider and indexed + const comparar = (a: { item: NodeInterface; index: number }, b: { item: NodeInterface; index: number }): number => { + let value: number = (this[callable] as (a: NodeInterface, b: NodeInterface) => number)(a.item, b.item); + if (value === 0) { + value = Math.sign(a.index - b.index); + } + + return value; + }; + + list = list.sort(comparar); + + return list.map((node) => node.item); + } +} diff --git a/src/nodes/nodes.ts b/src/nodes/nodes.ts new file mode 100644 index 0000000..65485c6 --- /dev/null +++ b/src/nodes/nodes.ts @@ -0,0 +1,110 @@ +import { type NodeInterface } from './node-interface.js'; +import { NodesSorter } from './nodes-sorter.js'; + +export class Nodes extends Array { + private readonly _sorter: NodesSorter; + + constructor(nodes: NodeInterface[] = []) { + super(); + this._sorter = new NodesSorter(); + this.importFromArray(nodes); + } + + public static get [Symbol.species](): ArrayConstructor { + return Array; + } + + public add(...nodes: NodeInterface[]): this { + let somethingChange = false; + for (const node of nodes) { + if (!this.exists(node)) { + this.push(node); + somethingChange = true; + } + } + + if (somethingChange) { + this.order(); + } + + return this; + } + + public order(): void { + this.splice(0, this.length, ...this._sorter.sort(this)); + } + + /** + * It takes only the unique string names and sort using the order of appearance + * @param names - names for order + */ + public setOrder(names: string[]): void { + if (this._sorter.setOrder(names)) { + this.order(); + } + } + + public getOrder(): string[] { + return this._sorter.getOrder(); + } + + public remove(node: NodeInterface): this { + const index = this.indexOf(node); + if (index >= 0) { + this.splice(index, 1); + } + + return this; + } + + public removeAll(): this { + this.splice(0, this.length); + + return this; + } + + public exists(node: NodeInterface): boolean { + return this.includes(node); + } + + public first(): NodeInterface | undefined { + return this.at(0); + } + + public get(position: number): NodeInterface { + const indexedNodes = [...this.values()]; + const value = indexedNodes.at(position); + if (!value) { + throw new RangeError(`The index ${position} does not exists`); + } + + return value; + } + + public firstNodeWithName(nodeName: string): NodeInterface | undefined { + return this.find((node) => node.name() === nodeName); + } + + public getNodesByName(nodeName: string): Nodes { + const nodes = new Nodes(); + for (const node of this) { + if (node.name() === nodeName) { + nodes.add(node); + } + } + + return nodes; + } + + public importFromArray(nodes: NodeInterface[]): this { + for (const [index, node] of nodes.entries()) { + if (typeof node.searchNodes !== 'function' || typeof node.children !== 'function') { + throw new SyntaxError(`The element index ${index} is not a NodeInterface object`); + } + } + + this.add(...nodes); + + return this; + } +} diff --git a/src/nodes/xml-node-exporter.ts b/src/nodes/xml-node-exporter.ts index c2719d9..ecd2151 100644 --- a/src/nodes/xml-node-exporter.ts +++ b/src/nodes/xml-node-exporter.ts @@ -1,39 +1,39 @@ -import { Xml } from '../utils/xml'; -import { type CNodeHasValueInterface } from './c-node-has-value-interface'; -import { type CNodeInterface } from './c-node-interface'; +import { Xml } from '../utils/xml.js'; +import { type NodeHasValueInterface } from './node-has-value-interface.js'; +import { type NodeInterface } from './node-interface.js'; export class XmlNodeExporter { - public export(node: CNodeInterface): Element { - const document = Xml.newDocument(); - const rootElement = this.exportRecursive(document, node); - document.appendChild(rootElement); + public export(node: NodeInterface): Element { + const document = Xml.newDocument(); + const rootElement = this.exportRecursive(document, node); + document.appendChild(rootElement); - return rootElement; - } - - private exportRecursive(document: Document, node: CNodeInterface): Element { - const element = document.createElement(node.name()); - - for (const [key, value] of node.attributes().entries()) { - element.setAttribute(key, value); - } + return rootElement; + } - for (const child of node.children()) { - const childElement = this.exportRecursive(document, child); - element.appendChild(childElement); - } + private exportRecursive(document: Document, node: NodeInterface): Element { + const element = document.createElement(node.name()); - if (this.isCNodeHasValueInterface(node) && node.value() !== '') { - element.appendChild(document.createTextNode(node.value())); - } + for (const [key, value] of node.attributes().entries()) { + element.setAttribute(key, value); + } - return element; + for (const child of node.children()) { + const childElement = this.exportRecursive(document, child); + element.appendChild(childElement); } - private isCNodeHasValueInterface(nodo: CNodeInterface | CNodeHasValueInterface): nodo is CNodeHasValueInterface { - return ( - typeof (nodo as CNodeHasValueInterface).value === 'function' && - typeof (nodo as CNodeHasValueInterface).setValue === 'function' - ); + if (this.isNodeHasValueInterface(node) && node.value() !== '') { + element.appendChild(document.createTextNode(node.value())); } + + return element; + } + + private isNodeHasValueInterface(nodo: NodeInterface | NodeHasValueInterface): nodo is NodeHasValueInterface { + return ( + typeof (nodo as NodeHasValueInterface).value === 'function' && + typeof (nodo as NodeHasValueInterface).setValue === 'function' + ); + } } diff --git a/src/nodes/xml-node-importer.ts b/src/nodes/xml-node-importer.ts index fde73d0..ca662b3 100644 --- a/src/nodes/xml-node-importer.ts +++ b/src/nodes/xml-node-importer.ts @@ -1,68 +1,68 @@ -import { DomValidators } from '../utils/dom-validators'; -import { CNode } from './c-node'; -import { type CNodeHasValueInterface } from './c-node-has-value-interface'; -import { type CNodeInterface } from './c-node-interface'; +import { DomValidators } from '../utils/dom-validators.js'; +import { Node } from './node.js'; +import { type NodeHasValueInterface } from './node-has-value-interface.js'; +import { type NodeInterface } from './node-interface.js'; export class XmlNodeImporter { - /** - * Local record for registered namespaces to avoid set the namespace declaration in every child - */ - private registeredNamespaces: Record = {}; + /** + * Local record for registered namespaces to avoid set the namespace declaration in every child + */ + private registeredNamespaces: Record = {}; - public import(element: Element): CNodeInterface & CNodeHasValueInterface { - const node = new CNode(element.tagName); + public import(element: Element): NodeInterface & NodeHasValueInterface { + const node = new Node(element.tagName); - node.setValue(this.extractValue(element)); + node.setValue(this.extractValue(element)); - if (element.prefix && element.prefix !== '') { - this.registerNamespace(node, `xmlns:${element.prefix}`, element.namespaceURI as string); - this.registerNamespace(node, `xmlns:xsi`, 'http://www.w3.org/2001/XMLSchema-instance'); - } - - // eslint-disable-next-line unicorn/prefer-spread - for (const attribute of Array.from(element.attributes)) { - node.attributes().set(attribute.name, attribute.value); - } + if (element.prefix && element.prefix !== '') { + this.registerNamespace(node, `xmlns:${element.prefix}`, element.namespaceURI!); + this.registerNamespace(node, `xmlns:xsi`, 'http://www.w3.org/2001/XMLSchema-instance'); + } - // Element is like - /* istanbul ignore if -- @preserve Hard of test */ - if (element.hasAttributeNS('http://www.w3.org/2000/xmlns/', '')) { - node.attributes().set('xmlns', element.getAttributeNS('http://www.w3.org/2000/xmlns/', '') as string); - } + // eslint-disable-next-line unicorn/prefer-spread + for (const attribute of Array.from(element.attributes)) { + node.attributes().set(attribute.name, attribute.value); + } - // eslint-disable-next-line unicorn/prefer-spread - for (const children of Array.from(element.childNodes)) { - if (!DomValidators.isElement(children)) { - continue; - } + // Element is like + /* istanbul ignore if -- @preserve Hard of test */ + if (element.hasAttributeNS('http://www.w3.org/2000/xmlns/', '')) { + node.attributes().set('xmlns', element.getAttributeNS('http://www.w3.org/2000/xmlns/', '')); + } - const childNode = this.import(children); - node.children().add(childNode); - } + // eslint-disable-next-line unicorn/prefer-spread + for (const children of Array.from(element.childNodes)) { + if (!DomValidators.isElement(children)) { + continue; + } - return node; + const childNode = this.import(children); + node.children().add(childNode); } - private registerNamespace(node: CNode, prefix: string, uri: string): void { - if (this.registeredNamespaces[prefix]) { - return; - } + return node; + } - this.registeredNamespaces[prefix] = uri; - node.attributes().set(prefix, uri); + private registerNamespace(node: Node, prefix: string, uri: string): void { + if (this.registeredNamespaces[prefix]) { + return; } - private extractValue(element: Element): string { - const values: string[] = []; - // eslint-disable-next-line unicorn/prefer-spread - for (const children of Array.from(element.childNodes)) { - if (!DomValidators.isText(children)) { - continue; - } + this.registeredNamespaces[prefix] = uri; + node.attributes().set(prefix, uri); + } - values.push(children.data); - } + private extractValue(element: Element): string { + const values: string[] = []; + // eslint-disable-next-line unicorn/prefer-spread + for (const children of Array.from(element.childNodes)) { + if (!DomValidators.isText(children)) { + continue; + } - return values.join(''); + values.push(children.data); } + + return values.join(''); + } } diff --git a/src/nodes/xml-node-utils.ts b/src/nodes/xml-node-utils.ts index 0701914..51d4818 100644 --- a/src/nodes/xml-node-utils.ts +++ b/src/nodes/xml-node-utils.ts @@ -1,33 +1,34 @@ -import { getSerializer } from '../dom'; -import { Xml } from '../utils/xml'; -import { type CNodeHasValueInterface } from './c-node-has-value-interface'; -import { type CNodeInterface } from './c-node-interface'; -import { XmlNodeExporter } from './xml-node-exporter'; -import { XmlNodeImporter } from './xml-node-importer'; +import { getSerializer } from '../dom.js'; +import { Xml } from '../utils/xml.js'; +import { type NodeHasValueInterface } from './node-has-value-interface.js'; +import { type NodeInterface } from './node-interface.js'; +import { XmlNodeExporter } from './xml-node-exporter.js'; +import { XmlNodeImporter } from './xml-node-importer.js'; +// eslint-disable-next-line @typescript-eslint/naming-convention export const XmlNodeUtils = { - nodeToXmlElement(node: CNodeInterface): Element { - return new XmlNodeExporter().export(node); - }, + nodeToXmlElement(node: NodeInterface): Element { + return new XmlNodeExporter().export(node); + }, - nodeToXmlString(node: CNodeInterface, withXmlHeader = false): string { - const element = XmlNodeUtils.nodeToXmlElement(node); - if (withXmlHeader) { - const document = element.ownerDocument; - const pi = document.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'); - document.insertBefore(pi, document.firstChild); + nodeToXmlString(node: NodeInterface, withXmlHeader = false): string { + const element = XmlNodeUtils.nodeToXmlElement(node); + if (withXmlHeader) { + const document = element.ownerDocument; + const pi = document.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'); + document.insertBefore(pi, document.firstChild); - return getSerializer().serializeToString(document); - } + return getSerializer().serializeToString(document); + } - return getSerializer().serializeToString(element.ownerDocument); - }, + return getSerializer().serializeToString(element.ownerDocument); + }, - nodeFromXmlElement(element: Element): CNodeInterface & CNodeHasValueInterface { - return new XmlNodeImporter().import(element); - }, + nodeFromXmlElement(element: Element): NodeInterface & NodeHasValueInterface { + return new XmlNodeImporter().import(element); + }, - nodeFromXmlString(content: string): CNodeInterface & CNodeHasValueInterface { - return XmlNodeUtils.nodeFromXmlElement(Xml.documentElement(Xml.newDocumentContent(content))); - }, + nodeFromXmlString(content: string): NodeInterface & NodeHasValueInterface { + return XmlNodeUtils.nodeFromXmlElement(Xml.documentElement(Xml.newDocumentContent(content))); + }, }; diff --git a/src/utils/currency-decimals.ts b/src/utils/currency-decimals.ts index 422cd37..6e617eb 100644 --- a/src/utils/currency-decimals.ts +++ b/src/utils/currency-decimals.ts @@ -1,66 +1,68 @@ +/* eslint-disable @typescript-eslint/naming-convention */ + /** * Currency Helper utility for parse string to number with currency value. */ export class CurrencyDecimals { - private readonly _currency: string; - - private readonly _decimals: number; - - constructor(currency: string, decimals: number) { - if (!/^[A-Z]{3}$/.test(currency)) { - throw new Error('Property currency is not valid'); - } + public static decimalsCount(value: string): number { + const values = value.split('.'); + const decimals = values.length > 1 ? values.at(-1) : undefined; + return decimals ? decimals.length : 0; + } - if (decimals < 0) { - throw new Error('Property decimals cannot be less than zero'); - } + public static newFromKnownCurrencies(currency: string, defaultValue?: number): CurrencyDecimals { + let decimals = CurrencyDecimals.knownCurrencyDecimals(currency); + if (decimals < 0) { + if (!defaultValue) { + throw new RangeError(`The currency ${currency} is not known`); + } - this._currency = currency; - this._decimals = Math.floor(decimals); + decimals = defaultValue; } - public static decimalsCount(value: string): number { - const values = value.split('.'); - const decimals = values.length > 1 ? values.at(-1) : undefined; - return decimals ? decimals.length : 0; - } + return new CurrencyDecimals(currency, decimals); + } - public static newFromKnownCurrencies(currency: string, defaultValue?: number): CurrencyDecimals { - let decimals = CurrencyDecimals.knownCurrencyDecimals(currency); - if (decimals < 0) { - if (!defaultValue) { - throw new RangeError(`The currency ${currency} is not known`); - } + public static knownCurrencyDecimals(currency: string): number { + const map: Record = { + MXN: 2, + EUR: 2, + USD: 2, + XXX: 0, + }; + return map[currency] || -1; + } - decimals = defaultValue; - } + private readonly _currency: string; - return new CurrencyDecimals(currency, decimals); - } + private readonly _decimals: number; - public static knownCurrencyDecimals(currency: string): number { - const map: Record = { - MXN: 2, - EUR: 2, - USD: 2, - XXX: 0, - }; - return map[currency] || -1; + constructor(currency: string, decimals: number) { + if (!/^[A-Z]{3}$/.test(currency)) { + throw new Error('Property currency is not valid'); } - public currency(): string { - return this._currency; + if (decimals < 0) { + throw new Error('Property decimals cannot be less than zero'); } - public decimals(): number { - return this._decimals; - } + this._currency = currency; + this._decimals = Math.floor(decimals); + } - public round(value: number): number { - return Number.parseFloat(value.toFixed(this.decimals())); - } + public currency(): string { + return this._currency; + } - public doesNotExceedDecimals(value: string): boolean { - return CurrencyDecimals.decimalsCount(value) <= this.decimals(); - } + public decimals(): number { + return this._decimals; + } + + public round(value: number): number { + return Number.parseFloat(value.toFixed(this.decimals())); + } + + public doesNotExceedDecimals(value: string): boolean { + return CurrencyDecimals.decimalsCount(value) <= this.decimals(); + } } diff --git a/src/utils/dom-validators.ts b/src/utils/dom-validators.ts index 684115f..8ab2d94 100644 --- a/src/utils/dom-validators.ts +++ b/src/utils/dom-validators.ts @@ -1,20 +1,21 @@ /** * DOM validators for compare node elements. */ +// eslint-disable-next-line @typescript-eslint/naming-convention export const DomValidators = { - isElement(nodo?: Node): nodo is Element { - return Boolean(nodo && nodo.nodeType === nodo.ELEMENT_NODE); - }, + isElement(nodo?: Node): nodo is Element { + return Boolean(nodo && nodo.nodeType === nodo.ELEMENT_NODE); + }, - isAttr(nodo?: Node): nodo is Attr { - return Boolean(nodo && nodo.nodeType === nodo.ATTRIBUTE_NODE); - }, + isAttr(nodo?: Node): nodo is Attr { + return Boolean(nodo && nodo.nodeType === nodo.ATTRIBUTE_NODE); + }, - isText(nodo?: Node): nodo is Text { - return Boolean(nodo && nodo.nodeType === nodo.TEXT_NODE); - }, + isText(nodo?: Node): nodo is Text { + return Boolean(nodo && nodo.nodeType === nodo.TEXT_NODE); + }, - isDocument(nodo?: Node): nodo is Document { - return Boolean(nodo && nodo.nodeType === nodo.DOCUMENT_NODE); - }, + isDocument(nodo?: Node): nodo is Document { + return Boolean(nodo && nodo.nodeType === nodo.DOCUMENT_NODE); + }, }; diff --git a/src/utils/xml.ts b/src/utils/xml.ts index 4d28b03..d37bcdd 100644 --- a/src/utils/xml.ts +++ b/src/utils/xml.ts @@ -1,101 +1,100 @@ -import { getDom, getParser } from '../dom'; -import { DomValidators } from './dom-validators'; +import { getDom, getParser } from '../dom.js'; +import { DomValidators } from './dom-validators.js'; /** * XML static utils */ +// eslint-disable-next-line @typescript-eslint/naming-convention export const Xml = { - documentElement(document: Document): Element { - if (!DomValidators.isElement(document.documentElement)) { - throw new SyntaxError('Document does not have root element'); + documentElement(document: Document): Element { + if (!DomValidators.isElement(document.documentElement)) { + throw new SyntaxError('Document does not have root element'); + } + + return document.documentElement; + }, + + ownerDocument(node: Node): Document { + if (!node.ownerDocument) { + /* istanbul ignore else -- @preserve */ + if (DomValidators.isDocument(node)) { + return node; + } + + /* istanbul ignore next -- @preserve */ + throw new TypeError('node.ownerDocument is undefined but node is not a Document'); + } + + return node.ownerDocument; + }, + + newDocument(document?: Document): Document { + if (!document) { + document = getDom().createDocument(null, null, null); + } + + return document; + }, + + newDocumentContent(content: string): Document { + if (content === '') { + throw new SyntaxError('Received xml string argument is empty'); + } + + const parser = getParser(); + try { + const documentParse = parser.parseFromString(content, 'text/xml'); + + // eslint-disable-next-line unicorn/prefer-query-selector + if (documentParse.getElementsByTagName('parsererror').length > 0) { + throw new Error('Error parsing XML'); + } + + return Xml.newDocument(documentParse); + } catch (error) { + throw new SyntaxError(`Cannot create a Document from xml string, errors: ${JSON.stringify(error)}`); + } + }, + + isValidXmlName(name: string): boolean { + if (name === '') { + return false; + } + + return /^[\p{L}_:][\p{L}\d_:.-]*$/u.test(name); + }, + + createElement(document: Document, name: string, content = ''): Element { + return Xml.createDomElement( + () => { + if (!name) { + throw new SyntaxError('Empty Name'); } - return document.documentElement; - }, - - ownerDocument(node: Node): Document { - if (!node.ownerDocument) { - /* istanbul ignore else -- @preserve */ - if (DomValidators.isDocument(node)) { - return node; - } - - /* istanbul ignore next -- @preserve */ - throw new TypeError('node.ownerDocument is undefined but node is not a Document'); - } - - return node.ownerDocument; - }, - - newDocument(document?: Document): Document { - if (!document) { - document = getDom().createDocument(null, null, null); - } - - return document; - }, - - newDocumentContent(content: string): Document { - if (content === '') { - throw new SyntaxError('Received xml string argument is empty'); - } - - const parser = getParser(); - try { - const documentParse = parser.parseFromString(content, 'text/xml'); - - // eslint-disable-next-line unicorn/prefer-query-selector - if (documentParse.getElementsByTagName('parsererror').length > 0) { - throw new Error('Error parsing XML'); - } - - return Xml.newDocument(documentParse); - } catch (error) { - throw new SyntaxError(`Cannot create a Document from xml string, errors: ${JSON.stringify(error)}`); - } - }, - - isValidXmlName(name: string): boolean { - if (name === '') { - return false; - } - - return /^[\p{L}_:][\p{L}\d_:.-]*$/u.test(name); - }, - - createElement(document: Document, name: string, content = ''): Element { - return Xml.createDOMElement( - () => { - if (!name) { - throw new SyntaxError('Empty Name'); - } - - return document.createElement(name); - }, - `Cannot create element with name ${name}`, - content, - ); - }, - - createDOMElement(makeElement: () => Element, errorMessage: string, content: string): Element { - let element: Element | undefined; - let previousException: Error | undefined; - try { - element = makeElement(); - } catch (error) { - previousException = error as Error; - } - - if (!element || !DomValidators.isElement(element)) { - throw new SyntaxError( - `${errorMessage} on ${previousException ? previousException.message : 'not is element'}`, - ); - } - - if (content !== '') { - element.appendChild(Xml.ownerDocument(element).createTextNode(content)); - } - - return element; - }, + return document.createElement(name); + }, + `Cannot create element with name ${name}`, + content, + ); + }, + + createDomElement(makeElement: () => Element, errorMessage: string, content: string): Element { + let element: Element | undefined; + let previousException: Error | undefined; + try { + element = makeElement(); + } catch (error) { + previousException = error as Error; + } + + if (!element || !DomValidators.isElement(element)) { + throw new SyntaxError(`${errorMessage} on ${previousException ? previousException.message : 'not is element'}`); + } + + if (content !== '') { + element.appendChild(Xml.ownerDocument(element).createTextNode(content)); + } + + return element; + }, }; diff --git a/tests/test-case.ts b/tests/test-case.ts index 6ce743c..1660a1d 100644 --- a/tests/test-case.ts +++ b/tests/test-case.ts @@ -2,13 +2,13 @@ import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; const useTestCase = (): { - utilAsset: (file: string) => string; + utilAsset: (file: string) => string; } => { - const utilAsset = (file: string): string => join(dirname(fileURLToPath(import.meta.url)), '_files', file); + const utilAsset = (file: string): string => join(dirname(fileURLToPath(import.meta.url)), '_files', file); - return { - utilAsset, - }; + return { + utilAsset, + }; }; export { useTestCase }; diff --git a/tests/tsconfig.json b/tests/tsconfig.json index b097af4..f7a04e3 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "../tsconfig.json", - "compilerOptions": { - "types": ["vitest/globals"], - "baseUrl": "./", - "paths": { - "src/*": ["../src/*"] - } - }, - "exclude": ["../node_modules"], - "include": ["./**/*.ts"] + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["vitest/globals"], + "baseUrl": "./", + "paths": { + "src/*": ["../src/*"] + } + }, + "exclude": ["../node_modules"], + "include": ["./**/*.ts"] } diff --git a/tests/unit/dom.browser.test.ts b/tests/unit/dom.browser.test.ts index ec76d85..ad8665b 100644 --- a/tests/unit/dom.browser.test.ts +++ b/tests/unit/dom.browser.test.ts @@ -1,30 +1,30 @@ import { getDom, getParser, getSerializer, install } from 'src/dom'; -import { DOMNotFoundError } from 'src/exceptions/dom-not-found-error'; +import { DomNotFoundError } from 'src/exceptions/dom-not-found-error'; describe('dom_with_jsdom', () => { - test('getDom_getParser_and_getSerializer_will_be_throw_error_on_not_install', () => { - expect(() => getDom()).toThrow(DOMNotFoundError); - expect(() => getParser()).toThrow(DOMNotFoundError); - expect(() => getSerializer()).toThrow(DOMNotFoundError); - }); + test('getDom_getParser_and_getSerializer_will_be_throw_error_on_not_install', () => { + expect(() => getDom()).toThrow(DomNotFoundError); + expect(() => getParser()).toThrow(DomNotFoundError); + expect(() => getSerializer()).toThrow(DomNotFoundError); + }); - test('getDom_getParser_and_getSerializer_will_be_throw_error_with_specific_type', () => { - expect(() => getDom()).toThrow('DOMImplementation'); - expect(() => getParser()).toThrow('DOMParser'); - expect(() => getSerializer()).toThrow('XMLSerializer'); - }); + test('getDom_getParser_and_getSerializer_will_be_throw_error_with_specific_type', () => { + expect(() => getDom()).toThrow('DOMImplementation'); + expect(() => getParser()).toThrow('DOMParser'); + expect(() => getSerializer()).toThrow('XMLSerializer'); + }); - test('using_browser_usage_with_jsdom_return_dom_expected', () => { - const jsDOMParser = new DOMParser(); - const jsXMLSerializer = new XMLSerializer(); - const jsDOMImplementation = document.implementation; - install(jsDOMParser, jsXMLSerializer, jsDOMImplementation); + test('using_browser_usage_with_jsdom_return_dom_expected', () => { + const jsDomParser = new DOMParser(); + const jsXmlSerializer = new XMLSerializer(); + const jsDomImplementation = document.implementation; + install(jsDomParser, jsXmlSerializer, jsDomImplementation); - expect(jsDOMParser).not.toBeUndefined(); - expect(jsXMLSerializer).not.toBeUndefined(); - expect(jsDOMImplementation).not.toBeUndefined(); - expect(getDom()).toBe(jsDOMImplementation); - expect(getParser()).toBe(jsDOMParser); - expect(getSerializer()).toBe(jsXMLSerializer); - }); + expect(jsDomParser).not.toBeUndefined(); + expect(jsXmlSerializer).not.toBeUndefined(); + expect(jsDomImplementation).not.toBeUndefined(); + expect(getDom()).toBe(jsDomImplementation); + expect(getParser()).toBe(jsDomParser); + expect(getSerializer()).toBe(jsXmlSerializer); + }); }); diff --git a/tests/unit/dom.test.ts b/tests/unit/dom.test.ts index ae5d53f..159fc94 100644 --- a/tests/unit/dom.test.ts +++ b/tests/unit/dom.test.ts @@ -1,25 +1,25 @@ import { DOMImplementation, DOMParser, XMLSerializer } from '@xmldom/xmldom'; import { getDom, getParser, getSerializer, install } from 'src/dom'; -import { DOMNotFoundError } from 'src/exceptions/dom-not-found-error'; +import { DomNotFoundError } from 'src/exceptions/dom-not-found-error'; describe('dom_with_xmldom', () => { - test('geDom_getParser_and_getSerializer_will_be_throw_error_on_not_install', () => { - expect(() => getDom()).toThrow(DOMNotFoundError); - expect(() => getParser()).toThrow(DOMNotFoundError); - expect(() => getSerializer()).toThrow(DOMNotFoundError); - }); + test('geDom_getParser_and_getSerializer_will_be_throw_error_on_not_install', () => { + expect(() => getDom()).toThrow(DomNotFoundError); + expect(() => getParser()).toThrow(DomNotFoundError); + expect(() => getSerializer()).toThrow(DomNotFoundError); + }); - test('getDom_getParser_and_getSerializer_will_be_throw_error_with_specific_type', () => { - expect(() => getDom()).toThrow('DOMImplementation'); - expect(() => getParser()).toThrow('DOMParser'); - expect(() => getSerializer()).toThrow('XMLSerializer'); - }); + test('getDom_getParser_and_getSerializer_will_be_throw_error_with_specific_type', () => { + expect(() => getDom()).toThrow('DOMImplementation'); + expect(() => getParser()).toThrow('DOMParser'); + expect(() => getSerializer()).toThrow('XMLSerializer'); + }); - test('using_xmlDom_return_same', () => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + test('using_xmlDom_return_same', () => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - expect(getDom()).toBeInstanceOf(DOMImplementation); - expect(getParser()).toBeInstanceOf(DOMParser); - expect(getSerializer()).toBeInstanceOf(XMLSerializer); - }); + expect(getDom()).toBeInstanceOf(DOMImplementation); + expect(getParser()).toBeInstanceOf(DOMParser); + expect(getSerializer()).toBeInstanceOf(XMLSerializer); + }); }); diff --git a/tests/unit/nodes/attributes.test.ts b/tests/unit/nodes/attributes.test.ts new file mode 100644 index 0000000..b63016f --- /dev/null +++ b/tests/unit/nodes/attributes.test.ts @@ -0,0 +1,214 @@ +import { Attributes } from 'src/nodes/attributes.js'; + +describe('nodes_attributes', () => { + test('construct_without_arguments', () => { + const attributes = new Attributes(); + expect(attributes.size).toBe(0); + }); + + test('construct_with_members', () => { + const data = { + id: 'sample', + foo: 'bar', + }; + const attributes = new Attributes(data); + expect(attributes.size).toBe(2); + for (const [key, value] of attributes.entries()) { + expect(attributes.exists(key)).toBeTruthy(); + expect(attributes.get(key)).toEqual(value); + } + }); + + test.each([ + ['empty', ''], + ['white_spaces', ' '], + ])('set_method_with_invalid_name_%s', (_name, attribute) => { + const attributes = new Attributes(); + const t = (): void => { + attributes.set(attribute, ''); + }; + + expect(t).toThrow(SyntaxError); + }); + + test('set_method', () => { + const attributes = new Attributes(); + // First + attributes.set('foo', 'bar'); + expect(attributes.size).toBe(1); + expect(attributes.get('foo')).toBe('bar'); + // Second + attributes.set('lorem', 'ipsum'); + expect(attributes.size).toBe(2); + expect(attributes.get('lorem')).toBe('ipsum'); + // Override + attributes.set('foo', 'BAR'); + expect(attributes.size).toBe(2); + expect(attributes.get('foo')).toBe('BAR'); + }); + + test.each([ + ['empty', ''], + ['white_space', ' '], + ['digit', '0'], + ['digit_hyphen_text', '0-foo'], + ['hyphen', '-'], + ['hyphen_text', '-x'], + ['inner_space', 'foo bar'], + ])('set_with_invalid_names_%s', (_name, attribute) => { + const attributes = new Attributes(); + expect(() => attributes.set(attribute, '')).toThrow('invalid xml name'); + }); + + test('get_method_on_non_existent', () => { + const attributes = new Attributes(); + expect(attributes.get('foo')).toBe(''); + }); + + test('remove', () => { + const attributes = new Attributes(); + attributes.set('foo', 'bar'); + + attributes.delete('bar'); + expect(attributes.size).toBe(1); + + attributes.delete('foo'); + expect(attributes.size).toBe(0); + }); + + test('map_access', () => { + const attributes = new Attributes(); + attributes.offsetSet('id', 'sample'); + attributes.offsetSet('foo', 'foo foo foo'); + attributes.offsetSet('foo', 'bar'); // Override + attributes.offsetSet('empty', ''); + expect(attributes.size).toBe(3); + + // Existent + expect(attributes.offsetExists('empty')).toBeTruthy(); + expect(attributes.offsetExists('id')).toBeTruthy(); + expect(attributes.offsetGet('id')).toBe('sample'); + expect(attributes.offsetGet('foo')).toBe('bar'); + // Non existent + expect(attributes.offsetExists('non-existent')).toBeFalsy(); + expect(attributes.offsetGet('non-existent')).toBe(''); + // Remove and check + attributes.offsetUnset('foo'); + expect(attributes.offsetGet('foo')).toBe(''); + }); + + test('iterator', () => { + const data = { + foo: 'bar', + lorem: 'ipsum', + }; + const created: Record = {}; + const attributes = new Attributes(data); + for (const [key, value] of attributes.entries()) { + created[key] = value; + } + + expect(created).toStrictEqual(data); + }); + + test('set_to_(undefined|null)_perform remove', () => { + const attributes = new Attributes({ + foo: 'bar', + bar: 'foo', + }); + expect(attributes.exists('foo')).toBeTruthy(); + expect(attributes.exists('bar')).toBeTruthy(); + attributes.offsetSet('foo'); + expect(attributes.exists('foo')).toBeFalsy(); + attributes.offsetSet('bar'); + expect(attributes.exists('bar')).toBeFalsy(); + }); + + test('import_with_empty', () => { + const attributes = new Attributes({ + foo: 'bar', + bar: 'foo', + }); + expect(attributes.size).toBe(2); + + attributes.importRecord({}); + expect(attributes.size).toBe(2); + + attributes.importRecord({ another: 'another' }); + expect(attributes.size).toBe(3); + }); + + test('import_with_(undefined|null)_perform_remove', () => { + const attributes = new Attributes({ + set: '1', + importArray: '1', + offsetSet: '1', + constructor: undefined, + empty: null, + }); + expect(attributes.size).toBe(3); + expect(attributes.exists('constructor')).toBeFalsy(); + expect(attributes.exists('empty')).toBeFalsy(); + expect(attributes.size).toBe(3); + + attributes.set('set', undefined); + expect(attributes.exists('set')).toBeFalsy(); + expect(attributes.size).toBe(2); + + attributes.importRecord({ importArray: undefined }); + expect(attributes.exists('importArray')).toBeFalsy(); + expect(attributes.size).toBe(1); + + attributes.offsetSet('offsetSet', null); + expect(attributes.exists('offsetSet')).toBeFalsy(); + expect(attributes.size).toBe(0); + }); + + test('import_with_invalid value', () => { + expect( + () => + new Attributes({ + foo: [], + }), + ).toThrow('Cannot convert value of attribute foo to string'); + }); + + test('set_with_object_to_string', () => { + const expectedValue = 'foo'; + + // eslint-disable-next-line @typescript-eslint/naming-convention + function Foo(this: { value: string }, value: string): void { + this.value = value; + } + + const toStringObject: string = new (Foo as unknown as new (value: string) => string)('foo'); + + Foo.prototype.toString = function (): string { + return (this as { value: string }).value; + }; + + const attributes = new Attributes({ + constructor: toStringObject, + }); + + attributes.set('offsetSet', toStringObject); + attributes.set('set', toStringObject); + attributes.importRecord({ + importArray: toStringObject, + }); + + expect(attributes.get('constructor')).toBe(expectedValue); + expect(attributes.get('offsetSet')).toBe(expectedValue); + expect(attributes.get('set')).toBe(expectedValue); + expect(attributes.get('importArray')).toBe(expectedValue); + }); + + test('export_record', () => { + const attributes = new Attributes(); + attributes.set('foo', 'bar'); + + expect(attributes.exportRecord()).toStrictEqual({ + foo: 'bar', + }); + }); +}); diff --git a/tests/unit/nodes/c-attributes.test.ts b/tests/unit/nodes/c-attributes.test.ts deleted file mode 100644 index dc14430..0000000 --- a/tests/unit/nodes/c-attributes.test.ts +++ /dev/null @@ -1,214 +0,0 @@ -import { CAttributes } from 'src/nodes/c-attributes'; - -describe('nodes_cattributes', () => { - test('construct_without_arguments', () => { - const attributes = new CAttributes(); - expect(attributes.size).toBe(0); - }); - - test('construct_with_members', () => { - const data = { - id: 'sample', - foo: 'bar', - }; - const attributes = new CAttributes(data); - expect(attributes.size).toBe(2); - for (const [key, value] of attributes.entries()) { - expect(attributes.exists(key)).toBeTruthy(); - expect(attributes.get(key)).toEqual(value); - } - }); - - test.each([ - ['empty', ''], - ['white_spaces', ' '], - ])('set_method_with_invalid_name_%s', (_name, attribute) => { - const attributes = new CAttributes(); - const t = (): void => { - attributes.set(attribute, ''); - }; - - expect(t).toThrow(SyntaxError); - }); - - test('set_method', () => { - const attributes = new CAttributes(); - // First - attributes.set('foo', 'bar'); - expect(attributes.size).toBe(1); - expect(attributes.get('foo')).toBe('bar'); - // Second - attributes.set('lorem', 'ipsum'); - expect(attributes.size).toBe(2); - expect(attributes.get('lorem')).toBe('ipsum'); - // Override - attributes.set('foo', 'BAR'); - expect(attributes.size).toBe(2); - expect(attributes.get('foo')).toBe('BAR'); - }); - - test.each([ - ['empty', ''], - ['white_space', ' '], - ['digit', '0'], - ['digit_hyphen_text', '0-foo'], - ['hyphen', '-'], - ['hyphen_text', '-x'], - ['inner_space', 'foo bar'], - ])('set_with_invalid_names_%s', (_name, attribute) => { - const attributes = new CAttributes(); - expect(() => attributes.set(attribute, '')).toThrow('invalid xml name'); - }); - - test('get_method_on_non_existent', () => { - const attributes = new CAttributes(); - expect(attributes.get('foo')).toBe(''); - }); - - test('remove', () => { - const attributes = new CAttributes(); - attributes.set('foo', 'bar'); - - attributes.delete('bar'); - expect(attributes.size).toBe(1); - - attributes.delete('foo'); - expect(attributes.size).toBe(0); - }); - - test('map_access', () => { - const attributes = new CAttributes(); - attributes.offsetSet('id', 'sample'); - attributes.offsetSet('foo', 'foo foo foo'); - attributes.offsetSet('foo', 'bar'); // Override - attributes.offsetSet('empty', ''); - expect(attributes.size).toBe(3); - - // Existent - expect(attributes.offsetExists('empty')).toBeTruthy(); - expect(attributes.offsetExists('id')).toBeTruthy(); - expect(attributes.offsetGet('id')).toBe('sample'); - expect(attributes.offsetGet('foo')).toBe('bar'); - // Non existent - expect(attributes.offsetExists('non-existent')).toBeFalsy(); - expect(attributes.offsetGet('non-existent')).toBe(''); - // Remove and check - attributes.offsetUnset('foo'); - expect(attributes.offsetGet('foo')).toBe(''); - }); - - test('iterator', () => { - const data = { - foo: 'bar', - lorem: 'ipsum', - }; - const created: Record = {}; - const attributes = new CAttributes(data); - for (const [key, value] of attributes.entries()) { - created[key] = value; - } - - expect(created).toStrictEqual(data); - }); - - test('set_to_(undefined|null)_perform remove', () => { - const attributes = new CAttributes({ - foo: 'bar', - bar: 'foo', - }); - expect(attributes.exists('foo')).toBeTruthy(); - expect(attributes.exists('bar')).toBeTruthy(); - attributes.offsetSet('foo'); - expect(attributes.exists('foo')).toBeFalsy(); - attributes.offsetSet('bar'); - expect(attributes.exists('bar')).toBeFalsy(); - }); - - test('import_with_empty', () => { - const attributes = new CAttributes({ - foo: 'bar', - bar: 'foo', - }); - expect(attributes.size).toBe(2); - - attributes.importRecord({}); - expect(attributes.size).toBe(2); - - attributes.importRecord({ another: 'another' }); - expect(attributes.size).toBe(3); - }); - - test('import_with_(undefined|null)_perform_remove', () => { - const attributes = new CAttributes({ - set: '1', - importArray: '1', - offsetSet: '1', - constructor: undefined, - empty: null, - }); - expect(attributes.size).toBe(3); - expect(attributes.exists('constructor')).toBeFalsy(); - expect(attributes.exists('empty')).toBeFalsy(); - expect(attributes.size).toBe(3); - - attributes.set('set', undefined); - expect(attributes.exists('set')).toBeFalsy(); - expect(attributes.size).toBe(2); - - attributes.importRecord({ importArray: undefined }); - expect(attributes.exists('importArray')).toBeFalsy(); - expect(attributes.size).toBe(1); - - attributes.offsetSet('offsetSet', null); - expect(attributes.exists('offsetSet')).toBeFalsy(); - expect(attributes.size).toBe(0); - }); - - test('import_with_invalid value', () => { - expect( - () => - new CAttributes({ - foo: [], - }), - ).toThrow('Cannot convert value of attribute foo to string'); - }); - - test('set_with_object_to_string', () => { - const expectedValue = 'foo'; - - function Foo(this: { value: string }, value: string): void { - this.value = value; - } - - const toStringObject: string = new (Foo as unknown as new (value: string) => string)('foo'); - - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - Foo.prototype.toString = function (): string { - return (this as { value: string }).value; - }; - - const attributes = new CAttributes({ - constructor: toStringObject, - }); - - attributes.set('offsetSet', toStringObject); - attributes.set('set', toStringObject); - attributes.importRecord({ - importArray: toStringObject, - }); - - expect(attributes.get('constructor')).toBe(expectedValue); - expect(attributes.get('offsetSet')).toBe(expectedValue); - expect(attributes.get('set')).toBe(expectedValue); - expect(attributes.get('importArray')).toBe(expectedValue); - }); - - test('export_record', () => { - const attributes = new CAttributes(); - attributes.set('foo', 'bar'); - - expect(attributes.exportRecord()).toStrictEqual({ - foo: 'bar', - }); - }); -}); diff --git a/tests/unit/nodes/c-node.test.ts b/tests/unit/nodes/c-node.test.ts deleted file mode 100644 index a701449..0000000 --- a/tests/unit/nodes/c-node.test.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { CNode } from 'src/nodes/c-node'; - -describe('nodes_cnode', () => { - test('construct_without_arguments', () => { - const node = new CNode('name'); - expect(node.name()).toBe('name'); - expect(node.count()).toBe(0); - expect(node.children()).toHaveLength(0); - expect(node.value()).toBe(''); - }); - - test('construct_with_arguments', () => { - const dummyNode = new CNode('dummy'); - const attributes = { - foo: 'bar', - }; - const children = [dummyNode]; - const value = 'xee'; - const node = new CNode('name', attributes, children, value); - expect(node.attributes().get('foo')).toBe('bar'); - expect(node.children().firstNodeWithName('dummy')).toStrictEqual(dummyNode); - expect(node.value()).toBe(value); - }); - - test('construct_with_empty_name', () => { - const t = (): CNode => new CNode('\n \t \n'); - - expect(t).toThrow(SyntaxError); - expect(t).toThrow('invalid xml name'); - }); - - test('construct_with_untrimmed_name', () => { - expect(() => new CNode(' x ')).toThrow('invalid xml name'); - }); - - test('search_attribute', () => { - const node = new CNode('root', { level: '1' }, [ - new CNode('child', { level: 2 }, [ - new CNode('grandchild', { level: 3.1 }), - new CNode('grandchild', { level: 3.2 }), - ]), - ]); - - expect(node.searchAttribute('level')).toBe('1'); - expect(node.searchAttribute('child', 'level')).toBe('2'); - expect(node.searchAttribute('child', 'grandchild', 'level')).toBe('3.1'); - - expect(node.searchAttribute('not-found-child', 'child', 'grandchild', 'level')).toBe(''); - expect(node.searchAttribute('not-found-attribute')).toBe(''); - }); - - test('search_node', () => { - const grandChildOne = new CNode('grandchild', { level: '3.1' }); - const grandChildTwo = new CNode('grandchild', { level: '3.2' }); - const child = new CNode('child', { level: 2 }, [grandChildOne, grandChildTwo]); - const root = new CNode('root', { level: 1 }, [child]); - - expect(root.searchNode()).toStrictEqual(root); - expect(root.searchNode('child')).toStrictEqual(child); - expect(JSON.stringify(root.searchNode('child', 'grandchild'))).toEqual(JSON.stringify(grandChildOne)); - - expect(root.searchNode('child', 'grandchild', 'not-found')).toBeUndefined(); - expect(root.searchNode('not-found', 'child', 'grandchild')).toBeUndefined(); - expect(root.searchNode('not-found')).toBeUndefined(); - }); - - test('search_nodes', () => { - const grandChildOne = new CNode('grandchild', { level: '3.1' }); - const grandChildTwo = new CNode('grandchild', { level: '3.2' }); - const child = new CNode('child', { level: 2 }, [grandChildOne, grandChildTwo]); - const root = new CNode('root', { level: 1 }, [child]); - - const nodesChild = root.searchNodes('child'); - expect(nodesChild).toHaveLength(1); - expect(nodesChild.first()).toStrictEqual(child); - - const nodesGrandChild = root.searchNodes('child', 'grandchild'); - expect(nodesGrandChild).toHaveLength(2); - expect(nodesGrandChild.get(0)).toStrictEqual(grandChildOne); - expect(JSON.stringify(nodesGrandChild.get(1))).toEqual(JSON.stringify(grandChildTwo)); - - expect(root.searchNodes('child', 'grandchild', 'not-found')).toHaveLength(0); - expect(root.searchNodes('not-found', 'child', 'grandchild')).toHaveLength(0); - expect(root.searchNodes('not-found')).toHaveLength(0); - }); - - test('map_access_to_attributes', () => { - const node = new CNode('x'); - node.set('id', 'form'); - - expect(node.offsetExists('id')).toBeTruthy(); - expect(node.get('id')).toBe('form'); - - node.set('id', 'the-form'); - expect(node.get('id')).toBe('the-form'); - - node.unset('id'); - - expect(node.offsetExists('id')).toBeFalsy(); - expect(node.get('id')).toBe(''); - }); - - test('value_property', () => { - const node = new CNode('x'); - - node.setValue('first'); - expect(node.value()).toBe('first'); - - node.setValue('second'); - expect(node.value()).toBe('second'); - }); - - test('add_children', () => { - const node = new CNode('x'); - const childrenNode = new CNode('y'); - - node.addChild(childrenNode); - - expect(node.count()).toBe(1); - }); - - test('add_attributes', () => { - const node = new CNode('x'); - expect(node.attributes().size).toBe(0); - - node.addAttributes({ foo: 'foo' }); - expect(node.attributes().size).toBe(1); - }); - - test('clear_all', () => { - const node = new CNode('x', { foo: '1' }); - const childrenNode = new CNode('y'); - node.addChild(childrenNode); - - expect(node.count()).toBe(1); - expect(node.attributes().size).toBe(1); - - node.clear(); - expect(node.count()).toBe(0); - expect(node.attributes().size).toBe(0); - }); -}); diff --git a/tests/unit/nodes/c-nodes-sorter.test.ts b/tests/unit/nodes/c-nodes-sorter.test.ts deleted file mode 100644 index ef39a26..0000000 --- a/tests/unit/nodes/c-nodes-sorter.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { CNode } from 'src/nodes/c-node'; -import { CNodesSorter } from 'src/nodes/c-nodes-sorter'; - -describe('nodes_cnodes_sorter', () => { - test('construct_with_names', () => { - const values = ['foo', 'bar', 'baz']; - const sorter = new CNodesSorter(values); - expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(values)); - }); - - test('construct_without_names', () => { - const sorter = new CNodesSorter(); - expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify([])); - }); - - test('parse_names', () => { - const sorter = new CNodesSorter(); - // All invalid values - expect(sorter.parseNames([null, undefined, 0, ''])).toStrictEqual(new Map()); - // All valid values - expect(sorter.parseNames(['foo', 'bar'])).toStrictEqual( - new Map(['foo', 'bar'].map((value, key) => [key, value])), - ); - // Duplicated values - expect(sorter.parseNames(['foo', 'bar', 'bar', 'foo', 'baz'])).toStrictEqual( - new Map(['foo', 'bar', 'baz'].map((value, key) => [key, value])), - ); - // Mixed values - expect(sorter.parseNames(['', 'foo', '', 'bar', 'foo'])).toStrictEqual( - new Map(['foo', 'bar'].map((value, key) => [key, value])), - ); - }); - - test('set_get_order', () => { - const sorter = new CNodesSorter(['foo', 'bar']); - expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(['foo', 'bar'])); - - // It changed - expect(sorter.setOrder(['bar', 'foo'])).toBeTruthy(); - expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(['bar', 'foo'])); - - // It did not change - expect(sorter.setOrder(['bar', 'foo'])).toBeFalsy(); - expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(['bar', 'foo'])); - }); - - test('order', () => { - const foo1 = new CNode('foo'); - const foo2 = new CNode('foo'); - const bar = new CNode('bar'); - const baz = new CNode('baz'); - const yyy = new CNode('yyy'); - - const order = ['baz', 'bar', 'foo']; - const unsorted = [yyy, foo1, foo2, bar, baz]; - const expected = [baz, bar, foo1, foo2, yyy]; - - const sorter = new CNodesSorter(order); - const sorted = sorter.sort(unsorted); - expect(JSON.stringify(sorted)).toEqual(JSON.stringify(expected)); - expect(JSON.stringify(sorted)).not.toEqual(JSON.stringify(unsorted)); - }); - - test('order_preserve_position', () => { - const list: CNode[] = []; - let index = 0; - while (index < 1000) { - list.push(new CNode('foo')); - index++; - } - - const sorter = new CNodesSorter(['foo']); - expect(JSON.stringify(sorter.sort(list))).toEqual(JSON.stringify(list)); - }); -}); diff --git a/tests/unit/nodes/c-nodes.test.ts b/tests/unit/nodes/c-nodes.test.ts deleted file mode 100644 index 86e2ec4..0000000 --- a/tests/unit/nodes/c-nodes.test.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { CNode } from 'src/nodes/c-node'; -import { type CNodeInterface } from 'src/nodes/c-node-interface'; -import { CNodes } from 'src/nodes/c-nodes'; - -describe('nodes_cnodes', () => { - test('empty_nodes', () => { - const nodes = new CNodes(); - expect(nodes).toHaveLength(0); - expect(nodes.firstNodeWithName('non-existent')).toBeUndefined(); - }); - - test('construct_with_nodes_array', () => { - const expected = [new CNode('foo'), new CNode('bar')]; - - const nodes = new CNodes(expected); - expect(nodes).toHaveLength(2); - for (const [index, node] of nodes.entries()) { - expect(node).toStrictEqual(expected[index]); - } - }); - - test('manipulate_the_collection', () => { - const first = new CNode('first'); - const second = new CNode('second'); - - const nodes = new CNodes(); - nodes.add(first, second); - - expect(nodes).toHaveLength(2); - expect(nodes.exists(first)).toBeTruthy(); - expect(nodes.exists(second)).toBeTruthy(); - - const equalToFirst = new CNode('foo'); - expect(nodes.exists(equalToFirst)).toBeFalsy(); - - // Add an equal node - nodes.add(equalToFirst); - expect(nodes).toHaveLength(3); - - // Add an identical node - nodes.add(equalToFirst); - expect(nodes).toHaveLength(3); - - // Remove the node - nodes.remove(equalToFirst); - expect(nodes).toHaveLength(2); - - // Remove the node again - nodes.remove(equalToFirst); - expect(nodes).toHaveLength(2); - - expect(nodes.firstNodeWithName('foo')).toBeUndefined(); - expect(nodes.firstNodeWithName('first')).toStrictEqual(first); - expect(JSON.stringify(nodes.firstNodeWithName('second'))).toEqual(JSON.stringify(second)); - }); - - test('add_find_remove', () => { - const root = new CNode('root'); - const nodes = root.children(); - const child = new CNode('child'); - - nodes.add(child); - expect(nodes.exists(child)).toBeTruthy(); - - const found = root.searchNode('child'); - expect(found).toStrictEqual(child); - - if (found) { - nodes.remove(found); - } - - expect(nodes.exists(child)).toBeFalsy(); - }); - - test('first_returns_null', () => { - const nodes = new CNodes(); - expect(nodes.first()).toBeUndefined(); - }); - - test('import_from_array', () => { - const nodeOne = new CNode('one'); - const nodes = new CNodes(); - nodes.importFromArray([nodeOne, new CNode('two'), new CNode('three')]); - expect(nodes).toHaveLength(3); - expect(nodes.first()).toStrictEqual(nodeOne); - }); - - test('import_from_array_with_non_node', () => { - const nodes = new CNodes(); - expect(() => nodes.importFromArray([String() as unknown as CNodeInterface])).toThrow( - 'The element index 0 is not a CNodeInterface object', - ); - }); - - test('get_throws_exception_when_not_found', () => { - const nodes = new CNodes(); - expect(() => nodes.get(0)).toThrow('The index 0 does not exists'); - }); - - test('get_with_existent_elements', () => { - const foo = new CNode('foo'); - const bar = new CNode('bar'); - const nodes = new CNodes([foo, bar]); - - expect(nodes.get(0)).toStrictEqual(foo); - expect(nodes.get(1)).toStrictEqual(bar); - - // Get after remove - nodes.remove(foo); - expect(nodes.get(0)).toStrictEqual(bar); - }); - - test('get_nodes_by_name', () => { - const nodes = new CNodes(); - const first = new CNode('children'); - const second = new CNode('children'); - const third = new CNode('children'); - nodes.importFromArray([first, second, third, new CNode('other')]); - - expect(nodes).toHaveLength(4); - const byName = nodes.getNodesByName('children'); - expect(byName).toHaveLength(3); - expect(byName.exists(first)).toBeTruthy(); - expect(byName.exists(second)).toBeTruthy(); - expect(byName.exists(third)).toBeTruthy(); - }); - - test('ordered_children', () => { - const nodes = new CNodes([new CNode('foo'), new CNode('bar'), new CNode('baz')]); - // Test initial order - expect(JSON.stringify([nodes.get(0).name(), nodes.get(1).name(), nodes.get(2).name()])).toEqual( - JSON.stringify(['foo', 'bar', 'baz']), - ); - - // Sort previous values - nodes.setOrder(['baz', '', '0', 'foo', '', 'bar', 'baz']); - expect(nodes.getOrder()).toEqual(['baz', 'foo', 'bar']); - expect(JSON.stringify([nodes.get(0).name(), nodes.get(1).name(), nodes.get(2).name()])).toEqual( - JSON.stringify(['baz', 'foo', 'bar']), - ); - - // Add other baz (inserted at the bottom) - nodes.add(new CNode('baz', { id: 'second' })); - expect(JSON.stringify([nodes.get(0).name(), nodes.get(1).name(), nodes.get(2).name()])).toEqual( - JSON.stringify(['baz', 'baz', 'foo']), - ); - expect(nodes.get(1).attributes().get('id')).toEqual('second'); - - // Add other not listed - const notListed = new CNode('yyy'); - nodes.add(notListed); - expect(nodes.get(4)).toStrictEqual(notListed); - }); -}); diff --git a/tests/unit/nodes/node.test.ts b/tests/unit/nodes/node.test.ts new file mode 100644 index 0000000..bd76851 --- /dev/null +++ b/tests/unit/nodes/node.test.ts @@ -0,0 +1,139 @@ +import { Node } from 'src/nodes/node'; + +describe('nodes_node', () => { + test('construct_without_arguments', () => { + const node = new Node('name'); + expect(node.name()).toBe('name'); + expect(node.count()).toBe(0); + expect(node.children()).toHaveLength(0); + expect(node.value()).toBe(''); + }); + + test('construct_with_arguments', () => { + const dummyNode = new Node('dummy'); + const attributes = { + foo: 'bar', + }; + const children = [dummyNode]; + const value = 'xee'; + const node = new Node('name', attributes, children, value); + expect(node.attributes().get('foo')).toBe('bar'); + expect(node.children().firstNodeWithName('dummy')).toStrictEqual(dummyNode); + expect(node.value()).toBe(value); + }); + + test('construct_with_empty_name', () => { + const t = (): Node => new Node('\n \t \n'); + + expect(t).toThrow(SyntaxError); + expect(t).toThrow('invalid xml name'); + }); + + test('construct_with_untrimmed_name', () => { + expect(() => new Node(' x ')).toThrow('invalid xml name'); + }); + + test('search_attribute', () => { + const node = new Node('root', { level: '1' }, [ + new Node('child', { level: 2 }, [new Node('grandchild', { level: 3.1 }), new Node('grandchild', { level: 3.2 })]), + ]); + + expect(node.searchAttribute('level')).toBe('1'); + expect(node.searchAttribute('child', 'level')).toBe('2'); + expect(node.searchAttribute('child', 'grandchild', 'level')).toBe('3.1'); + + expect(node.searchAttribute('not-found-child', 'child', 'grandchild', 'level')).toBe(''); + expect(node.searchAttribute('not-found-attribute')).toBe(''); + }); + + test('search_node', () => { + const grandChildOne = new Node('grandchild', { level: '3.1' }); + const grandChildTwo = new Node('grandchild', { level: '3.2' }); + const child = new Node('child', { level: 2 }, [grandChildOne, grandChildTwo]); + const root = new Node('root', { level: 1 }, [child]); + + expect(root.searchNode()).toStrictEqual(root); + expect(root.searchNode('child')).toStrictEqual(child); + expect(JSON.stringify(root.searchNode('child', 'grandchild'))).toEqual(JSON.stringify(grandChildOne)); + + expect(root.searchNode('child', 'grandchild', 'not-found')).toBeUndefined(); + expect(root.searchNode('not-found', 'child', 'grandchild')).toBeUndefined(); + expect(root.searchNode('not-found')).toBeUndefined(); + }); + + test('search_nodes', () => { + const grandChildOne = new Node('grandchild', { level: '3.1' }); + const grandChildTwo = new Node('grandchild', { level: '3.2' }); + const child = new Node('child', { level: 2 }, [grandChildOne, grandChildTwo]); + const root = new Node('root', { level: 1 }, [child]); + + const nodesChild = root.searchNodes('child'); + expect(nodesChild).toHaveLength(1); + expect(nodesChild.first()).toStrictEqual(child); + + const nodesGrandChild = root.searchNodes('child', 'grandchild'); + expect(nodesGrandChild).toHaveLength(2); + expect(nodesGrandChild.get(0)).toStrictEqual(grandChildOne); + expect(JSON.stringify(nodesGrandChild.get(1))).toEqual(JSON.stringify(grandChildTwo)); + + expect(root.searchNodes('child', 'grandchild', 'not-found')).toHaveLength(0); + expect(root.searchNodes('not-found', 'child', 'grandchild')).toHaveLength(0); + expect(root.searchNodes('not-found')).toHaveLength(0); + }); + + test('map_access_to_attributes', () => { + const node = new Node('x'); + node.set('id', 'form'); + + expect(node.offsetExists('id')).toBeTruthy(); + expect(node.get('id')).toBe('form'); + + node.set('id', 'the-form'); + expect(node.get('id')).toBe('the-form'); + + node.unset('id'); + + expect(node.offsetExists('id')).toBeFalsy(); + expect(node.get('id')).toBe(''); + }); + + test('value_property', () => { + const node = new Node('x'); + + node.setValue('first'); + expect(node.value()).toBe('first'); + + node.setValue('second'); + expect(node.value()).toBe('second'); + }); + + test('add_children', () => { + const node = new Node('x'); + const childrenNode = new Node('y'); + + node.addChild(childrenNode); + + expect(node.count()).toBe(1); + }); + + test('add_attributes', () => { + const node = new Node('x'); + expect(node.attributes().size).toBe(0); + + node.addAttributes({ foo: 'foo' }); + expect(node.attributes().size).toBe(1); + }); + + test('clear_all', () => { + const node = new Node('x', { foo: '1' }); + const childrenNode = new Node('y'); + node.addChild(childrenNode); + + expect(node.count()).toBe(1); + expect(node.attributes().size).toBe(1); + + node.clear(); + expect(node.count()).toBe(0); + expect(node.attributes().size).toBe(0); + }); +}); diff --git a/tests/unit/nodes/nodes-sorter.test.ts b/tests/unit/nodes/nodes-sorter.test.ts new file mode 100644 index 0000000..63f71b5 --- /dev/null +++ b/tests/unit/nodes/nodes-sorter.test.ts @@ -0,0 +1,73 @@ +import { Node } from 'src/nodes/node'; +import { NodesSorter } from 'src/nodes/nodes-sorter'; + +describe('nodes_cnodes_sorter', () => { + test('construct_with_names', () => { + const values = ['foo', 'bar', 'baz']; + const sorter = new NodesSorter(values); + expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(values)); + }); + + test('construct_without_names', () => { + const sorter = new NodesSorter(); + expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify([])); + }); + + test('parse_names', () => { + const sorter = new NodesSorter(); + // All invalid values + expect(sorter.parseNames([null, undefined, 0, ''])).toStrictEqual(new Map()); + // All valid values + expect(sorter.parseNames(['foo', 'bar'])).toStrictEqual(new Map(['foo', 'bar'].map((value, key) => [key, value]))); + // Duplicated values + expect(sorter.parseNames(['foo', 'bar', 'bar', 'foo', 'baz'])).toStrictEqual( + new Map(['foo', 'bar', 'baz'].map((value, key) => [key, value])), + ); + // Mixed values + expect(sorter.parseNames(['', 'foo', '', 'bar', 'foo'])).toStrictEqual( + new Map(['foo', 'bar'].map((value, key) => [key, value])), + ); + }); + + test('set_get_order', () => { + const sorter = new NodesSorter(['foo', 'bar']); + expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(['foo', 'bar'])); + + // It changed + expect(sorter.setOrder(['bar', 'foo'])).toBeTruthy(); + expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(['bar', 'foo'])); + + // It did not change + expect(sorter.setOrder(['bar', 'foo'])).toBeFalsy(); + expect(JSON.stringify(sorter.getOrder())).toEqual(JSON.stringify(['bar', 'foo'])); + }); + + test('order', () => { + const foo1 = new Node('foo'); + const foo2 = new Node('foo'); + const bar = new Node('bar'); + const baz = new Node('baz'); + const yyy = new Node('yyy'); + + const order = ['baz', 'bar', 'foo']; + const unsorted = [yyy, foo1, foo2, bar, baz]; + const expected = [baz, bar, foo1, foo2, yyy]; + + const sorter = new NodesSorter(order); + const sorted = sorter.sort(unsorted); + expect(JSON.stringify(sorted)).toEqual(JSON.stringify(expected)); + expect(JSON.stringify(sorted)).not.toEqual(JSON.stringify(unsorted)); + }); + + test('order_preserve_position', () => { + const list: Node[] = []; + let index = 0; + while (index < 1000) { + list.push(new Node('foo')); + index++; + } + + const sorter = new NodesSorter(['foo']); + expect(JSON.stringify(sorter.sort(list))).toEqual(JSON.stringify(list)); + }); +}); diff --git a/tests/unit/nodes/nodes.test.ts b/tests/unit/nodes/nodes.test.ts new file mode 100644 index 0000000..ca8d696 --- /dev/null +++ b/tests/unit/nodes/nodes.test.ts @@ -0,0 +1,154 @@ +import { Node } from 'src/nodes/node'; +import { type NodeInterface } from 'src/nodes/node-interface'; +import { Nodes } from 'src/nodes/nodes'; + +describe('nodes_nodes', () => { + test('empty_nodes', () => { + const nodes = new Nodes(); + expect(nodes).toHaveLength(0); + expect(nodes.firstNodeWithName('non-existent')).toBeUndefined(); + }); + + test('construct_with_nodes_array', () => { + const expected = [new Node('foo'), new Node('bar')]; + + const nodes = new Nodes(expected); + expect(nodes).toHaveLength(2); + for (const [index, node] of nodes.entries()) { + expect(node).toStrictEqual(expected[index]); + } + }); + + test('manipulate_the_collection', () => { + const first = new Node('first'); + const second = new Node('second'); + + const nodes = new Nodes(); + nodes.add(first, second); + + expect(nodes).toHaveLength(2); + expect(nodes.exists(first)).toBeTruthy(); + expect(nodes.exists(second)).toBeTruthy(); + + const equalToFirst = new Node('foo'); + expect(nodes.exists(equalToFirst)).toBeFalsy(); + + // Add an equal node + nodes.add(equalToFirst); + expect(nodes).toHaveLength(3); + + // Add an identical node + nodes.add(equalToFirst); + expect(nodes).toHaveLength(3); + + // Remove the node + nodes.remove(equalToFirst); + expect(nodes).toHaveLength(2); + + // Remove the node again + nodes.remove(equalToFirst); + expect(nodes).toHaveLength(2); + + expect(nodes.firstNodeWithName('foo')).toBeUndefined(); + expect(nodes.firstNodeWithName('first')).toStrictEqual(first); + expect(JSON.stringify(nodes.firstNodeWithName('second'))).toEqual(JSON.stringify(second)); + }); + + test('add_find_remove', () => { + const root = new Node('root'); + const nodes = root.children(); + const child = new Node('child'); + + nodes.add(child); + expect(nodes.exists(child)).toBeTruthy(); + + const found = root.searchNode('child'); + expect(found).toStrictEqual(child); + + if (found) { + nodes.remove(found); + } + + expect(nodes.exists(child)).toBeFalsy(); + }); + + test('first_returns_null', () => { + const nodes = new Nodes(); + expect(nodes.first()).toBeUndefined(); + }); + + test('import_from_array', () => { + const nodeOne = new Node('one'); + const nodes = new Nodes(); + nodes.importFromArray([nodeOne, new Node('two'), new Node('three')]); + expect(nodes).toHaveLength(3); + expect(nodes.first()).toStrictEqual(nodeOne); + }); + + test('import_from_array_with_non_node', () => { + const nodes = new Nodes(); + expect(() => nodes.importFromArray([String() as unknown as NodeInterface])).toThrow( + 'The element index 0 is not a NodeInterface object', + ); + }); + + test('get_throws_exception_when_not_found', () => { + const nodes = new Nodes(); + expect(() => nodes.get(0)).toThrow('The index 0 does not exists'); + }); + + test('get_with_existent_elements', () => { + const foo = new Node('foo'); + const bar = new Node('bar'); + const nodes = new Nodes([foo, bar]); + + expect(nodes.get(0)).toStrictEqual(foo); + expect(nodes.get(1)).toStrictEqual(bar); + + // Get after remove + nodes.remove(foo); + expect(nodes.get(0)).toStrictEqual(bar); + }); + + test('get_nodes_by_name', () => { + const nodes = new Nodes(); + const first = new Node('children'); + const second = new Node('children'); + const third = new Node('children'); + nodes.importFromArray([first, second, third, new Node('other')]); + + expect(nodes).toHaveLength(4); + const byName = nodes.getNodesByName('children'); + expect(byName).toHaveLength(3); + expect(byName.exists(first)).toBeTruthy(); + expect(byName.exists(second)).toBeTruthy(); + expect(byName.exists(third)).toBeTruthy(); + }); + + test('ordered_children', () => { + const nodes = new Nodes([new Node('foo'), new Node('bar'), new Node('baz')]); + // Test initial order + expect(JSON.stringify([nodes.get(0).name(), nodes.get(1).name(), nodes.get(2).name()])).toEqual( + JSON.stringify(['foo', 'bar', 'baz']), + ); + + // Sort previous values + nodes.setOrder(['baz', '', '0', 'foo', '', 'bar', 'baz']); + expect(nodes.getOrder()).toEqual(['baz', 'foo', 'bar']); + expect(JSON.stringify([nodes.get(0).name(), nodes.get(1).name(), nodes.get(2).name()])).toEqual( + JSON.stringify(['baz', 'foo', 'bar']), + ); + + // Add other baz (inserted at the bottom) + nodes.add(new Node('baz', { id: 'second' })); + expect(JSON.stringify([nodes.get(0).name(), nodes.get(1).name(), nodes.get(2).name()])).toEqual( + JSON.stringify(['baz', 'baz', 'foo']), + ); + expect(nodes.get(1).attributes().get('id')).toEqual('second'); + + // Add other not listed + const notListed = new Node('yyy'); + nodes.add(notListed); + expect(nodes.get(4)).toStrictEqual(notListed); + }); +}); diff --git a/tests/unit/nodes/xml-node-utils.browser.test.ts b/tests/unit/nodes/xml-node-utils.browser.test.ts index fc28873..7312eb1 100644 --- a/tests/unit/nodes/xml-node-utils.browser.test.ts +++ b/tests/unit/nodes/xml-node-utils.browser.test.ts @@ -1,109 +1,110 @@ +/* eslint-disable import/no-unassigned-import */ import { readFileSync } from 'node:fs'; import 'jest-xml-matcher'; -import { useTestCase } from '../../test-case'; import { install } from 'src/dom'; -import { CNode } from 'src/nodes/c-node'; +import { Node } from 'src/nodes/node'; import { XmlNodeUtils } from 'src/nodes/xml-node-utils'; import { Xml } from 'src/utils/xml'; +import { useTestCase } from '../../test-case.js'; describe('xml_node_utils_with_jsdom', () => { - const { utilAsset } = useTestCase(); + const { utilAsset } = useTestCase(); - beforeEach(() => { - install(new DOMParser(), new XMLSerializer(), document.implementation); - }); + beforeEach(() => { + install(new DOMParser(), new XMLSerializer(), document.implementation); + }); - test('node_to_xml_string_xml_header', () => { - const node = new CNode('book', {}, [new CNode('chapter', { toc: '1' }), new CNode('chapter', { toc: '2' })]); + test('node_to_xml_string_xml_header', () => { + const node = new Node('book', {}, [new Node('chapter', { toc: '1' }), new Node('chapter', { toc: '2' })]); - let xmlString = XmlNodeUtils.nodeToXmlString(node, true); - expect(xmlString.startsWith('')).toBeTruthy(); + let xmlString = XmlNodeUtils.nodeToXmlString(node, true); + expect(xmlString.startsWith('')).toBeTruthy(); - xmlString = XmlNodeUtils.nodeToXmlString(node, false); - expect(xmlString.startsWith('')).toBeTruthy(); - }); + xmlString = XmlNodeUtils.nodeToXmlString(node, false); + expect(xmlString.startsWith('')).toBeTruthy(); + }); - test.each([ - ['simple-xml', utilAsset('nodes/sample.xml')], - ['with_texts_xml', utilAsset('nodes/sample-with-texts.xml')], - ['cfdi', utilAsset('cfdi33.xml')], - ])('export_from_file_and_export_again_%s', (_name, filename) => { - const source = readFileSync(filename, 'utf8'); + test.each([ + ['simple-xml', utilAsset('nodes/sample.xml')], + ['with_texts_xml', utilAsset('nodes/sample-with-texts.xml')], + ['cfdi', utilAsset('cfdi33.xml')], + ])('export_from_file_and_export_again_%s', (_name, filename) => { + const source = readFileSync(filename, 'utf8'); - const document = Xml.newDocumentContent(source); + const document = Xml.newDocumentContent(source); - // Create node from element - const node = XmlNodeUtils.nodeFromXmlElement(Xml.documentElement(document)); + // Create node from element + const node = XmlNodeUtils.nodeFromXmlElement(Xml.documentElement(document)); - // Create element from node - const element = XmlNodeUtils.nodeToXmlElement(node); - const xmlString = XmlNodeUtils.nodeToXmlString(node); + // Create element from node + const element = XmlNodeUtils.nodeToXmlElement(node); + const xmlString = XmlNodeUtils.nodeToXmlString(node); - // Compare versus source - const xmlSave = new XMLSerializer().serializeToString(element.ownerDocument); + // Compare versus source + const xmlSave = new XMLSerializer().serializeToString(element.ownerDocument); - expect(xmlSave).toEqualXML(source); - expect(xmlString).toEqualXML(source); - }); + expect(xmlSave).toEqualXML(source); + expect(xmlString).toEqualXML(source); + }); - test('node_from_xml_string', () => { - const node = new CNode('book', {}, [new CNode('chapter', { toc: '1' }), new CNode('chapter', { toc: '2' })]); - const xmlString = XmlNodeUtils.nodeToXmlString(node, true); - const resultNode = XmlNodeUtils.nodeFromXmlString(xmlString); - expect(resultNode.name()).toBe(node.name()); - expect(resultNode.searchAttribute('chapter', 'toc')).toBe('1'); - }); + test('node_from_xml_string', () => { + const node = new Node('book', {}, [new Node('chapter', { toc: '1' }), new Node('chapter', { toc: '2' })]); + const xmlString = XmlNodeUtils.nodeToXmlString(node, true); + const resultNode = XmlNodeUtils.nodeFromXmlString(xmlString); + expect(resultNode.name()).toBe(node.name()); + expect(resultNode.searchAttribute('chapter', 'toc')).toBe('1'); + }); - test('import_xml_with_namespace_without_prefix', () => { - const file = utilAsset('xml-with-namespace-definitions-at-child-level.xml'); - const node = XmlNodeUtils.nodeFromXmlString(readFileSync(file, 'utf8')); - const inspected = node.searchNode('base:Third', 'innerNS'); - if (!inspected) { - throw new Error('The specimen does not have the required test case'); - } + test('import_xml_with_namespace_without_prefix', () => { + const file = utilAsset('xml-with-namespace-definitions-at-child-level.xml'); + const node = XmlNodeUtils.nodeFromXmlString(readFileSync(file, 'utf8')); + const inspected = node.searchNode('base:Third', 'innerNS'); + if (!inspected) { + throw new Error('The specimen does not have the required test case'); + } - expect(inspected.get('xmlns')).toBe('http://external.com/inner'); - }); + expect(inspected.get('xmlns')).toBe('http://external.com/inner'); + }); - test('xml_with_value_with_special_chars', () => { - const expectedValue = 'ampersand: &'; - const content = 'ampersand: &'; + test('xml_with_value_with_special_chars', () => { + const expectedValue = 'ampersand: &'; + const content = 'ampersand: &'; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); + }); - test('xml_with_value_with_inner_comment', () => { - const expectedValue = 'ampersand: &'; - const content = 'ampersand: &'; - const expectedContent = 'ampersand: &'; + test('xml_with_value_with_inner_comment', () => { + const expectedValue = 'ampersand: &'; + const content = 'ampersand: &'; + const expectedContent = 'ampersand: &'; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); + }); - test('xml_with_value_with_inner_white_space', () => { - const expectedValue = '\n\nfirst line\n\tsecond line\n\t third line \t\nfourth line\n\n'; - const content = `${expectedValue}`; + test('xml_with_value_with_inner_white_space', () => { + const expectedValue = '\n\nfirst line\n\tsecond line\n\t third line \t\nfourth line\n\n'; + const content = `${expectedValue}`; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); + }); - test('xml_with_value_with_inner_element', () => { - const expectedValue = 'ampersand: &'; - const content = 'ampersand: &'; - const expectedContent = 'ampersand: &'; + test('xml_with_value_with_inner_element', () => { + const expectedValue = 'ampersand: &'; + const content = 'ampersand: &'; + const expectedContent = 'ampersand: &'; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); + }); }); diff --git a/tests/unit/nodes/xml-node-utils.test.ts b/tests/unit/nodes/xml-node-utils.test.ts index 8fb79ad..cb36747 100644 --- a/tests/unit/nodes/xml-node-utils.test.ts +++ b/tests/unit/nodes/xml-node-utils.test.ts @@ -1,110 +1,111 @@ +/* eslint-disable import/no-unassigned-import */ import { readFileSync } from 'node:fs'; import { DOMImplementation, DOMParser, XMLSerializer } from '@xmldom/xmldom'; import 'jest-xml-matcher'; -import { useTestCase } from '../../test-case'; import { install } from 'src/dom'; -import { CNode } from 'src/nodes/c-node'; +import { Node } from 'src/nodes/node'; import { XmlNodeUtils } from 'src/nodes/xml-node-utils'; import { Xml } from 'src/utils/xml'; +import { useTestCase } from '../../test-case.js'; describe('xml_node_utils_with_xml_dom', () => { - const { utilAsset } = useTestCase(); + const { utilAsset } = useTestCase(); - beforeEach(() => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - }); + beforeEach(() => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + }); - test('node_to_xml_string_xml_header', () => { - const node = new CNode('book', {}, [new CNode('chapter', { toc: '1' }), new CNode('chapter', { toc: '2' })]); + test('node_to_xml_string_xml_header', () => { + const node = new Node('book', {}, [new Node('chapter', { toc: '1' }), new Node('chapter', { toc: '2' })]); - let xmlString = XmlNodeUtils.nodeToXmlString(node, true); - expect(xmlString.startsWith('')).toBeTruthy(); + let xmlString = XmlNodeUtils.nodeToXmlString(node, true); + expect(xmlString.startsWith('')).toBeTruthy(); - xmlString = XmlNodeUtils.nodeToXmlString(node, false); - expect(xmlString.startsWith('')).toBeTruthy(); - }); + xmlString = XmlNodeUtils.nodeToXmlString(node, false); + expect(xmlString.startsWith('')).toBeTruthy(); + }); - test.each([ - ['simple_xml', utilAsset('nodes/sample.xml')], - ['with_texts_xml', utilAsset('nodes/sample-with-texts.xml')], - ['cfdi', utilAsset('cfdi33.xml')], - ])('export_from_file_and_export_again_%s', (_name, filename) => { - const source = readFileSync(filename, 'utf8'); + test.each([ + ['simple_xml', utilAsset('nodes/sample.xml')], + ['with_texts_xml', utilAsset('nodes/sample-with-texts.xml')], + ['cfdi', utilAsset('cfdi33.xml')], + ])('export_from_file_and_export_again_%s', (_name, filename) => { + const source = readFileSync(filename, 'utf8'); - const document = Xml.newDocumentContent(source); + const document = Xml.newDocumentContent(source); - // Create node from element - const node = XmlNodeUtils.nodeFromXmlElement(Xml.documentElement(document)); + // Create node from element + const node = XmlNodeUtils.nodeFromXmlElement(Xml.documentElement(document)); - // Create element from node - const element = XmlNodeUtils.nodeToXmlElement(node); - const xmlString = XmlNodeUtils.nodeToXmlString(node); + // Create element from node + const element = XmlNodeUtils.nodeToXmlElement(node); + const xmlString = XmlNodeUtils.nodeToXmlString(node); - // Compare versus source - const xmlSave = new XMLSerializer().serializeToString(element.ownerDocument); + // Compare versus source + const xmlSave = new XMLSerializer().serializeToString(element.ownerDocument); - expect(xmlSave).toEqualXML(source); - expect(xmlString).toEqualXML(source); - }); + expect(xmlSave).toEqualXML(source); + expect(xmlString).toEqualXML(source); + }); - test('node_from_xml_string', () => { - const node = new CNode('book', {}, [new CNode('chapter', { toc: '1' }), new CNode('chapter', { toc: '2' })]); - const xmlString = XmlNodeUtils.nodeToXmlString(node, true); - const resultNode = XmlNodeUtils.nodeFromXmlString(xmlString); - expect(resultNode.name()).toBe(node.name()); - expect(resultNode.searchAttribute('chapter', 'toc')).toBe('1'); - }); + test('node_from_xml_string', () => { + const node = new Node('book', {}, [new Node('chapter', { toc: '1' }), new Node('chapter', { toc: '2' })]); + const xmlString = XmlNodeUtils.nodeToXmlString(node, true); + const resultNode = XmlNodeUtils.nodeFromXmlString(xmlString); + expect(resultNode.name()).toBe(node.name()); + expect(resultNode.searchAttribute('chapter', 'toc')).toBe('1'); + }); - test('import_xml_with_namespace_without_prefix', () => { - const file = utilAsset('xml-with-namespace-definitions-at-child-level.xml'); - const node = XmlNodeUtils.nodeFromXmlString(readFileSync(file, 'utf8')); - const inspected = node.searchNode('base:Third', 'innerNS'); - if (!inspected) { - throw new Error('The specimen does not have the required test case'); - } + test('import_xml_with_namespace_without_prefix', () => { + const file = utilAsset('xml-with-namespace-definitions-at-child-level.xml'); + const node = XmlNodeUtils.nodeFromXmlString(readFileSync(file, 'utf8')); + const inspected = node.searchNode('base:Third', 'innerNS'); + if (!inspected) { + throw new Error('The specimen does not have the required test case'); + } - expect(inspected.get('xmlns')).toBe('http://external.com/inner'); - }); + expect(inspected.get('xmlns')).toBe('http://external.com/inner'); + }); - test('xml_with_value_with_special_chars', () => { - const expectedValue = 'ampersand: &'; - const content = 'ampersand: &'; + test('xml_with_value_with_special_chars', () => { + const expectedValue = 'ampersand: &'; + const content = 'ampersand: &'; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); + }); - test('xml_with_value_with_inner_comment', () => { - const expectedValue = 'ampersand: &'; - const content = 'ampersand: &'; - const expectedContent = 'ampersand: &'; + test('xml_with_value_with_inner_comment', () => { + const expectedValue = 'ampersand: &'; + const content = 'ampersand: &'; + const expectedContent = 'ampersand: &'; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); + }); - test('xml_with_value_with_inner_white_space', () => { - const expectedValue = '\n\nfirst line\n\tsecond line\n\t third line \t\nfourth line\n\n'; - const content = `${expectedValue}`; + test('xml_with_value_with_inner_white_space', () => { + const expectedValue = '\n\nfirst line\n\tsecond line\n\t third line \t\nfourth line\n\n'; + const content = `${expectedValue}`; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(content); + }); - test('xml_with_value_with_inner_element', () => { - const expectedValue = 'ampersand: &'; - const content = 'ampersand: &'; - const expectedContent = 'ampersand: &'; + test('xml_with_value_with_inner_element', () => { + const expectedValue = 'ampersand: &'; + const content = 'ampersand: &'; + const expectedContent = 'ampersand: &'; - const node = XmlNodeUtils.nodeFromXmlString(content); + const node = XmlNodeUtils.nodeFromXmlString(content); - expect(node.value()).toEqual(expectedValue); - expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); - }); + expect(node.value()).toEqual(expectedValue); + expect(XmlNodeUtils.nodeToXmlString(node)).toBe(expectedContent); + }); }); diff --git a/tests/unit/utils/currency-decimals.test.ts b/tests/unit/utils/currency-decimals.test.ts index caec355..7f3c068 100644 --- a/tests/unit/utils/currency-decimals.test.ts +++ b/tests/unit/utils/currency-decimals.test.ts @@ -1,75 +1,75 @@ import { CurrencyDecimals } from 'src/utils/currency-decimals'; describe('currency_decimals', () => { - test('create_generic', () => { - const currentDec = new CurrencyDecimals('FOO', 2); - - expect(currentDec.currency()).toBe('FOO'); - expect(currentDec.decimals()).toBe(2); - }); - - test.each([[''], ['ÑÑÑ'], ['XXXX']])('create_with_empty_code_%s', (currency) => { - const t = (): CurrencyDecimals => new CurrencyDecimals(currency, 2); - - expect(t).toThrow(Error); - expect(t).toThrow('currency'); - }); - - test('create_with_negative_decimals', () => { - const t = (): CurrencyDecimals => new CurrencyDecimals('FOO', -1); - - expect(t).toThrow(Error); - expect(t).toThrow('decimals'); - }); - - test('does_not_exceed', () => { - const foo = new CurrencyDecimals('FOO', 3); - expect(foo.doesNotExceedDecimals('1')).toBeTruthy(); - expect(foo.doesNotExceedDecimals('1.000')).toBeTruthy(); - expect(foo.doesNotExceedDecimals('1.999')).toBeTruthy(); - expect(foo.doesNotExceedDecimals('1.0001')).toBeFalsy(); - expect(foo.doesNotExceedDecimals('1.0000')).toBeFalsy(); - }); - - test('decimals_count', () => { - expect(CurrencyDecimals.decimalsCount('1')).toBe(0); - expect(CurrencyDecimals.decimalsCount('1.')).toBe(0); - expect(CurrencyDecimals.decimalsCount('1.0')).toBe(1); - expect(CurrencyDecimals.decimalsCount('1.00')).toBe(2); - }); - - test('known_currency_mexican_peso', () => { - const mxn = CurrencyDecimals.newFromKnownCurrencies('MXN'); - expect(mxn.currency()).toBe('MXN'); - expect(mxn.decimals()).toBe(2); - }); - - test('unknown_currency', () => { - const t = (): void => { - CurrencyDecimals.newFromKnownCurrencies('FOO'); - }; - - expect(t).toThrow(RangeError); - expect(t).toThrow('not known'); - }); - - test('unknown_currency_with_decimals', () => { - const foo = CurrencyDecimals.newFromKnownCurrencies('FOO', 6); - - expect(foo.currency()).toBe('FOO'); - expect(foo.decimals()).toBe(6); - }); - - test('known_decimals_mexican_peso', () => { - expect(CurrencyDecimals.knownCurrencyDecimals('MXN')).toBe(2); - }); - - test('round', () => { - const mxn = CurrencyDecimals.newFromKnownCurrencies('MXN'); - - expect(mxn.round(45_740.349)).toBe(45_740.35); - expect(mxn.round(1.234)).toBe(1.23); - expect(mxn.round(1.235)).toBe(1.24); - expect(mxn.round(1.236)).toBe(1.24); - }); + test('create_generic', () => { + const currentDec = new CurrencyDecimals('FOO', 2); + + expect(currentDec.currency()).toBe('FOO'); + expect(currentDec.decimals()).toBe(2); + }); + + test.each([[''], ['ÑÑÑ'], ['XXXX']])('create_with_empty_code_%s', (currency) => { + const t = (): CurrencyDecimals => new CurrencyDecimals(currency, 2); + + expect(t).toThrow(Error); + expect(t).toThrow('currency'); + }); + + test('create_with_negative_decimals', () => { + const t = (): CurrencyDecimals => new CurrencyDecimals('FOO', -1); + + expect(t).toThrow(Error); + expect(t).toThrow('decimals'); + }); + + test('does_not_exceed', () => { + const foo = new CurrencyDecimals('FOO', 3); + expect(foo.doesNotExceedDecimals('1')).toBeTruthy(); + expect(foo.doesNotExceedDecimals('1.000')).toBeTruthy(); + expect(foo.doesNotExceedDecimals('1.999')).toBeTruthy(); + expect(foo.doesNotExceedDecimals('1.0001')).toBeFalsy(); + expect(foo.doesNotExceedDecimals('1.0000')).toBeFalsy(); + }); + + test('decimals_count', () => { + expect(CurrencyDecimals.decimalsCount('1')).toBe(0); + expect(CurrencyDecimals.decimalsCount('1.')).toBe(0); + expect(CurrencyDecimals.decimalsCount('1.0')).toBe(1); + expect(CurrencyDecimals.decimalsCount('1.00')).toBe(2); + }); + + test('known_currency_mexican_peso', () => { + const mxn = CurrencyDecimals.newFromKnownCurrencies('MXN'); + expect(mxn.currency()).toBe('MXN'); + expect(mxn.decimals()).toBe(2); + }); + + test('unknown_currency', () => { + const t = (): void => { + CurrencyDecimals.newFromKnownCurrencies('FOO'); + }; + + expect(t).toThrow(RangeError); + expect(t).toThrow('not known'); + }); + + test('unknown_currency_with_decimals', () => { + const foo = CurrencyDecimals.newFromKnownCurrencies('FOO', 6); + + expect(foo.currency()).toBe('FOO'); + expect(foo.decimals()).toBe(6); + }); + + test('known_decimals_mexican_peso', () => { + expect(CurrencyDecimals.knownCurrencyDecimals('MXN')).toBe(2); + }); + + test('round', () => { + const mxn = CurrencyDecimals.newFromKnownCurrencies('MXN'); + + expect(mxn.round(45_740.349)).toBe(45_740.35); + expect(mxn.round(1.234)).toBe(1.23); + expect(mxn.round(1.235)).toBe(1.24); + expect(mxn.round(1.236)).toBe(1.24); + }); }); diff --git a/tests/unit/utils/dom-validators.browser.test.ts b/tests/unit/utils/dom-validators.browser.test.ts index 9731c68..99f8d7b 100644 --- a/tests/unit/utils/dom-validators.browser.test.ts +++ b/tests/unit/utils/dom-validators.browser.test.ts @@ -1,41 +1,41 @@ import { DomValidators } from 'src/utils/dom-validators'; describe('dom_validators_with_jsdom', () => { - let documentJSDom: Document; - let element: Element; - let attribute: Attr; + let documentJsDom: Document; + let element: Element; + let attribute: Attr; - beforeEach(() => { - documentJSDom = document.implementation.createDocument('', ''); - element = documentJSDom.createElement('myNode'); - element.setAttribute('name', 'first'); - attribute = element.attributes.getNamedItem('name') as Attr; - }); + beforeEach(() => { + documentJsDom = document.implementation.createDocument('', ''); + element = documentJsDom.createElement('myNode'); + element.setAttribute('name', 'first'); + attribute = element.attributes.getNamedItem('name')!; + }); - test('is_element', () => { - expect(DomValidators.isElement(documentJSDom)).toBeFalsy(); - expect(DomValidators.isElement(element)).toBeTruthy(); - expect(DomValidators.isElement(attribute)).toBeFalsy(); - }); + test('is_element', () => { + expect(DomValidators.isElement(documentJsDom)).toBeFalsy(); + expect(DomValidators.isElement(element)).toBeTruthy(); + expect(DomValidators.isElement(attribute)).toBeFalsy(); + }); - test('is_document', () => { - expect(DomValidators.isDocument(documentJSDom)).toBeTruthy(); - expect(DomValidators.isDocument(element)).toBeFalsy(); - expect(DomValidators.isDocument(attribute)).toBeFalsy(); - }); + test('is_document', () => { + expect(DomValidators.isDocument(documentJsDom)).toBeTruthy(); + expect(DomValidators.isDocument(element)).toBeFalsy(); + expect(DomValidators.isDocument(attribute)).toBeFalsy(); + }); - test('is_attr', () => { - expect(DomValidators.isAttr(documentJSDom)).toBeFalsy(); - expect(DomValidators.isAttr(element)).toBeFalsy(); - expect(DomValidators.isAttr(attribute)).toBeTruthy(); - }); + test('is_attr', () => { + expect(DomValidators.isAttr(documentJsDom)).toBeFalsy(); + expect(DomValidators.isAttr(element)).toBeFalsy(); + expect(DomValidators.isAttr(attribute)).toBeTruthy(); + }); - test('is_text', () => { - expect(DomValidators.isText(documentJSDom)).toBeFalsy(); - expect(DomValidators.isText(element)).toBeFalsy(); - expect(DomValidators.isText(attribute)).toBeFalsy(); + test('is_text', () => { + expect(DomValidators.isText(documentJsDom)).toBeFalsy(); + expect(DomValidators.isText(element)).toBeFalsy(); + expect(DomValidators.isText(attribute)).toBeFalsy(); - const textNode = documentJSDom.createTextNode('first'); - expect(DomValidators.isText(textNode)).toBeTruthy(); - }); + const textNode = documentJsDom.createTextNode('first'); + expect(DomValidators.isText(textNode)).toBeTruthy(); + }); }); diff --git a/tests/unit/utils/dom-validators.test.ts b/tests/unit/utils/dom-validators.test.ts index d147019..90ff4a8 100644 --- a/tests/unit/utils/dom-validators.test.ts +++ b/tests/unit/utils/dom-validators.test.ts @@ -2,40 +2,40 @@ import { DOMImplementation } from '@xmldom/xmldom'; import { DomValidators } from 'src/utils/dom-validators'; describe('dom_validators_with_xmldom', () => { - let document: Document; - let element: Element; - let attribute: Attr; - beforeEach(() => { - document = new DOMImplementation().createDocument('', ''); - element = document.createElement('myNode'); - element.setAttribute('name', 'first'); - attribute = element.attributes.getNamedItem('name') as Attr; - }); + let document: Document; + let element: Element; + let attribute: Attr; + beforeEach(() => { + document = new DOMImplementation().createDocument('', ''); + element = document.createElement('myNode'); + element.setAttribute('name', 'first'); + attribute = element.attributes.getNamedItem('name')!; + }); - test('is_element', () => { - expect(DomValidators.isElement(document)).toBeFalsy(); - expect(DomValidators.isElement(element)).toBeTruthy(); - expect(DomValidators.isElement(attribute)).toBeFalsy(); - }); + test('is_element', () => { + expect(DomValidators.isElement(document)).toBeFalsy(); + expect(DomValidators.isElement(element)).toBeTruthy(); + expect(DomValidators.isElement(attribute)).toBeFalsy(); + }); - test('is_document', () => { - expect(DomValidators.isDocument(document)).toBeTruthy(); - expect(DomValidators.isDocument(element)).toBeFalsy(); - expect(DomValidators.isDocument(attribute)).toBeFalsy(); - }); + test('is_document', () => { + expect(DomValidators.isDocument(document)).toBeTruthy(); + expect(DomValidators.isDocument(element)).toBeFalsy(); + expect(DomValidators.isDocument(attribute)).toBeFalsy(); + }); - test('is_attr', () => { - expect(DomValidators.isAttr(document)).toBeFalsy(); - expect(DomValidators.isAttr(element)).toBeFalsy(); - expect(DomValidators.isAttr(attribute)).toBeTruthy(); - }); + test('is_attr', () => { + expect(DomValidators.isAttr(document)).toBeFalsy(); + expect(DomValidators.isAttr(element)).toBeFalsy(); + expect(DomValidators.isAttr(attribute)).toBeTruthy(); + }); - test('is_text', () => { - expect(DomValidators.isText(document)).toBeFalsy(); - expect(DomValidators.isText(element)).toBeFalsy(); - expect(DomValidators.isText(attribute)).toBeFalsy(); + test('is_text', () => { + expect(DomValidators.isText(document)).toBeFalsy(); + expect(DomValidators.isText(element)).toBeFalsy(); + expect(DomValidators.isText(attribute)).toBeFalsy(); - const textNode = document.createTextNode('first'); - expect(DomValidators.isText(textNode)).toBeTruthy(); - }); + const textNode = document.createTextNode('first'); + expect(DomValidators.isText(textNode)).toBeTruthy(); + }); }); diff --git a/tests/unit/utils/xml.browser.test.ts b/tests/unit/utils/xml.browser.test.ts index a0c2a56..b66b53a 100644 --- a/tests/unit/utils/xml.browser.test.ts +++ b/tests/unit/utils/xml.browser.test.ts @@ -1,108 +1,105 @@ import { install } from 'src/dom'; -import { DOMNotFoundError } from 'src/exceptions/dom-not-found-error'; +import { DomNotFoundError } from 'src/exceptions/dom-not-found-error'; import { Xml } from 'src/utils/xml'; describe('xml_util_with_jsdom', () => { - const provideElementMake: string[][] = [ - ['empty', '', ''], - ['foo', 'foo', 'foo'], - ['ampersand', '&', '&'], - ['<', '<', '<'], - ['>', '>', '>'], - ['comilla_simple', "'", "'"], - ['comilla_doble', '"', '"'], - ['©', '&copy;', '©'], - ['mixed', 'foo & bar', 'foo & bar'], - ]; - - beforeEach(() => { - // Restart DOM definitions install - install(); - }); - - test.each([['First_Name'], ['_4-lane'], ['tél'], ['month-day']])('true_on_valid_names_%s', (name) => { - expect(Xml.isValidXmlName(name)).toBeTruthy(); - }); - - test.each([['Driver`s_License'], ['month/day'], ['first name'], ['4-lane']])( - 'false_on_invalid_names_%s', - (name) => { - expect(Xml.isValidXmlName(name)).toBeFalsy(); - }, - ); - - test('method_ownerDocument_return_same_document', () => { - install(new DOMParser(), new XMLSerializer(), document.implementation); - - const jsDocument = Xml.newDocument(); - - expect(Xml.ownerDocument(jsDocument)).toBe(jsDocument); - }); - - test('method_newDocumentContent_throw_error_if_not_install_dom', () => { - const xmlInvalid = ''; - const t = (): void => { - Xml.newDocumentContent(xmlInvalid); - }; - - expect(t).toThrow(DOMNotFoundError); - expect(t).toThrow('DOMParser'); - }); - - test('method_newDocumentContent_with_empty_xml', () => { - install(new DOMParser(), new XMLSerializer(), document.implementation); - const xmlEmpty = ''; - expect(() => Xml.newDocumentContent(xmlEmpty)).toThrow('Received xml string argument is empty'); - }); - - test('method_newDocumentContent_with_invalid_xml', () => { - install(new DOMParser(), new XMLSerializer(), document.implementation); - const xmlInvalid = ''; - expect(() => Xml.newDocumentContent(xmlInvalid)).toThrow('Cannot create a Document from xml string'); - }); - - test('method_documentElement_throw_error_if_not_install_dom', () => { - const t = (): void => { - Xml.newDocument(); - }; - - expect(t).toThrow(DOMNotFoundError); - expect(t).toThrow('DOMImplementation'); - }); - - test('method_documentElement_without_root_element', () => { - install(new DOMParser(), new XMLSerializer(), document.implementation); - expect(() => Xml.documentElement(Xml.newDocument())).toThrow('Document does not have root element'); - }); - - test('method_documentElement_with_root_element', () => { - const jsDocument = document.implementation.createDocument('', ''); - const root = jsDocument.createElement('root'); - jsDocument.appendChild(root); - expect(Xml.documentElement(jsDocument)).toStrictEqual(root); - }); - - test.each(provideElementMake)('method_createElement_with_jsdom_%s', (_name, expected, content) => { - const jsDOMParser = new DOMParser(); - const jsXMLSerializer = new XMLSerializer(); - const jsDOMImplementation = document.implementation; - install(jsDOMParser, jsXMLSerializer, jsDOMImplementation); - - const elementName = 'element'; - const jsDocument = Xml.newDocument(); - const element = Xml.createElement(jsDocument, elementName, content); - jsDocument.appendChild(element); - expect(element.textContent).toBe(content); - - const rawXml = new XMLSerializer().serializeToString(jsDocument); - // Fixed self-closing tags to full closing tags - const fixedXml = rawXml.replaceAll(/<(.*?)\s*\/>/g, '<$1>'); - expect(fixedXml).toBe(`<${elementName}>${expected}`); - }); - - test('method_createElement_with_bad_name', () => { - install(new DOMParser(), new XMLSerializer(), document.implementation); - const jsDocument = Xml.newDocument(); - expect(() => Xml.createElement(jsDocument, '')).toThrow('Cannot create element'); - }); + const provideElementMake: string[][] = [ + ['empty', '', ''], + ['foo', 'foo', 'foo'], + ['ampersand', '&', '&'], + ['<', '<', '<'], + ['>', '>', '>'], + ['comilla_simple', "'", "'"], + ['comilla_doble', '"', '"'], + ['©', '&copy;', '©'], + ['mixed', 'foo & bar', 'foo & bar'], + ]; + + beforeEach(() => { + // Restart DOM definitions install + install(); + }); + + test.each([['First_Name'], ['_4-lane'], ['tél'], ['month-day']])('true_on_valid_names_%s', (name) => { + expect(Xml.isValidXmlName(name)).toBeTruthy(); + }); + + test.each([['Driver`s_License'], ['month/day'], ['first name'], ['4-lane']])('false_on_invalid_names_%s', (name) => { + expect(Xml.isValidXmlName(name)).toBeFalsy(); + }); + + test('method_ownerDocument_return_same_document', () => { + install(new DOMParser(), new XMLSerializer(), document.implementation); + + const jsDocument = Xml.newDocument(); + + expect(Xml.ownerDocument(jsDocument)).toBe(jsDocument); + }); + + test('method_newDocumentContent_throw_error_if_not_install_dom', () => { + const xmlInvalid = ''; + const t = (): void => { + Xml.newDocumentContent(xmlInvalid); + }; + + expect(t).toThrow(DomNotFoundError); + expect(t).toThrow('DOMParser'); + }); + + test('method_newDocumentContent_with_empty_xml', () => { + install(new DOMParser(), new XMLSerializer(), document.implementation); + const xmlEmpty = ''; + expect(() => Xml.newDocumentContent(xmlEmpty)).toThrow('Received xml string argument is empty'); + }); + + test('method_newDocumentContent_with_invalid_xml', () => { + install(new DOMParser(), new XMLSerializer(), document.implementation); + const xmlInvalid = ''; + expect(() => Xml.newDocumentContent(xmlInvalid)).toThrow('Cannot create a Document from xml string'); + }); + + test('method_documentElement_throw_error_if_not_install_dom', () => { + const t = (): void => { + Xml.newDocument(); + }; + + expect(t).toThrow(DomNotFoundError); + expect(t).toThrow('DOMImplementation'); + }); + + test('method_documentElement_without_root_element', () => { + install(new DOMParser(), new XMLSerializer(), document.implementation); + expect(() => Xml.documentElement(Xml.newDocument())).toThrow('Document does not have root element'); + }); + + test('method_documentElement_with_root_element', () => { + const jsDocument = document.implementation.createDocument('', ''); + const root = jsDocument.createElement('root'); + jsDocument.appendChild(root); + expect(Xml.documentElement(jsDocument)).toStrictEqual(root); + }); + + test.each(provideElementMake)('method_createElement_with_jsdom_%s', (_name, expected, content) => { + const jsDomParser = new DOMParser(); + const jsXmlSerializer = new XMLSerializer(); + const jsDomImplementation = document.implementation; + install(jsDomParser, jsXmlSerializer, jsDomImplementation); + + const elementName = 'element'; + const jsDocument = Xml.newDocument(); + const element = Xml.createElement(jsDocument, elementName, content); + jsDocument.appendChild(element); + expect(element.textContent).toBe(content); + + const rawXml = new XMLSerializer().serializeToString(jsDocument); + // Fixed self-closing tags to full closing tags + const fixedXml = rawXml.replaceAll(/<(.*?)\s*\/>/g, '<$1>'); + expect(fixedXml).toBe(`<${elementName}>${expected}`); + }); + + test('method_createElement_with_bad_name', () => { + install(new DOMParser(), new XMLSerializer(), document.implementation); + const jsDocument = Xml.newDocument(); + expect(() => Xml.createElement(jsDocument, '')).toThrow('Cannot create element'); + }); }); diff --git a/tests/unit/utils/xml.test.ts b/tests/unit/utils/xml.test.ts index b1448b0..4d34d86 100644 --- a/tests/unit/utils/xml.test.ts +++ b/tests/unit/utils/xml.test.ts @@ -1,106 +1,103 @@ import { DOMImplementation, DOMParser, XMLSerializer } from '@xmldom/xmldom'; import { install } from 'src/dom'; -import { DOMNotFoundError } from 'src/exceptions/dom-not-found-error'; +import { DomNotFoundError } from 'src/exceptions/dom-not-found-error'; import { Xml } from 'src/utils/xml'; describe('xml_util', () => { - const provideElementMake: string[][] = [ - ['empty', '', ''], - ['foo', 'foo', 'foo'], - ['ampersand', '&', '&'], - ['<', '<', '<'], - ['>', '>', '>'], - ['comilla_simple', "'", "'"], - ['comilla_doble', '"', '"'], - ['©', '&copy;', '©'], - ['mixed', 'foo & bar', 'foo & bar'], - ]; - - beforeEach(() => { - // Restart DOM definitions install - install(); - }); - - test.each([['First_Name'], ['_4-lane'], ['tél'], ['month-day']])('true_on_valid_names_%s', (name) => { - expect(Xml.isValidXmlName(name)).toBeTruthy(); - }); - - test.each([['Driver`s_License'], ['month/day'], ['first name'], ['4-lane']])( - 'false_on_invalid_names_%s', - (name) => { - expect(Xml.isValidXmlName(name)).toBeFalsy(); - }, - ); - - test('method_ownerDocument_return_same_document', () => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - - const document = Xml.newDocument(); - - expect(Xml.ownerDocument(document)).toBe(document); - }); - - test('method_newDocumentContent_throw_error_if_not_install_dom', () => { - const xmlInvalid = ''; - const t = (): void => { - Xml.newDocumentContent(xmlInvalid); - }; - - expect(t).toThrow(DOMNotFoundError); - expect(t).toThrow('DOMParser'); - }); - - test('method_newDocumentContent_with_empty_xml', () => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - const xmlEmpty = ''; - expect(() => Xml.newDocumentContent(xmlEmpty)).toThrow('Received xml string argument is empty'); - }); - - test('method_newDocumentContent_with_invalid_xml', () => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - const xmlInvalid = ''; - expect(() => Xml.newDocumentContent(xmlInvalid)).toThrow('Cannot create a Document from xml string'); - }); - - test('method_documentElement_throw_error_if_not_install_dom', () => { - const t = (): void => { - Xml.newDocument(); - }; - - expect(t).toThrow(DOMNotFoundError); - expect(t).toThrow('DOMImplementation'); - }); - - test('method_documentElement_without_root_element', () => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - expect(() => Xml.documentElement(Xml.newDocument())).toThrow('Document does not have root element'); - }); - - test('method_documentElement_with_root_element', () => { - const document = new DOMImplementation().createDocument('', ''); - const root = document.createElement('root'); - document.appendChild(root); - expect(Xml.documentElement(document)).toStrictEqual(root); - }); - - test.each(provideElementMake)('method_createElement_with_xmldom_%s', (_name, expected, content) => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - const elementName = 'element'; - const document = Xml.newDocument(); - const element = Xml.createElement(document, elementName, content); - document.appendChild(element); - expect(element.textContent).toBe(content); - - const rawXml = new XMLSerializer().serializeToString(document); - - // Fixed self-closing tags to full closing tags - const fixedXml = rawXml.replaceAll(/<(.*?)\s*\/>/g, '<$1>'); - expect(fixedXml).toBe(`<${elementName}>${expected}`); - }); - - test('method_createElement_with_bad_name', () => { - install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); - const document = Xml.newDocument(); - expect(() => Xml.createElement(document, '')).toThrow('Cannot create element'); - }); + const provideElementMake: string[][] = [ + ['empty', '', ''], + ['foo', 'foo', 'foo'], + ['ampersand', '&', '&'], + ['<', '<', '<'], + ['>', '>', '>'], + ['comilla_simple', "'", "'"], + ['comilla_doble', '"', '"'], + ['©', '&copy;', '©'], + ['mixed', 'foo & bar', 'foo & bar'], + ]; + + beforeEach(() => { + // Restart DOM definitions install + install(); + }); + + test.each([['First_Name'], ['_4-lane'], ['tél'], ['month-day']])('true_on_valid_names_%s', (name) => { + expect(Xml.isValidXmlName(name)).toBeTruthy(); + }); + + test.each([['Driver`s_License'], ['month/day'], ['first name'], ['4-lane']])('false_on_invalid_names_%s', (name) => { + expect(Xml.isValidXmlName(name)).toBeFalsy(); + }); + + test('method_ownerDocument_return_same_document', () => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + + const document = Xml.newDocument(); + + expect(Xml.ownerDocument(document)).toBe(document); + }); + + test('method_newDocumentContent_throw_error_if_not_install_dom', () => { + const xmlInvalid = ''; + const t = (): void => { + Xml.newDocumentContent(xmlInvalid); + }; + + expect(t).toThrow(DomNotFoundError); + expect(t).toThrow('DOMParser'); + }); + + test('method_newDocumentContent_with_empty_xml', () => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + const xmlEmpty = ''; + expect(() => Xml.newDocumentContent(xmlEmpty)).toThrow('Received xml string argument is empty'); + }); + + test('method_newDocumentContent_with_invalid_xml', () => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + const xmlInvalid = ''; + expect(() => Xml.newDocumentContent(xmlInvalid)).toThrow('Cannot create a Document from xml string'); + }); + + test('method_documentElement_throw_error_if_not_install_dom', () => { + const t = (): void => { + Xml.newDocument(); + }; + + expect(t).toThrow(DomNotFoundError); + expect(t).toThrow('DOMImplementation'); + }); + + test('method_documentElement_without_root_element', () => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + expect(() => Xml.documentElement(Xml.newDocument())).toThrow('Document does not have root element'); + }); + + test('method_documentElement_with_root_element', () => { + const document = new DOMImplementation().createDocument('', ''); + const root = document.createElement('root'); + document.appendChild(root); + expect(Xml.documentElement(document)).toStrictEqual(root); + }); + + test.each(provideElementMake)('method_createElement_with_xmldom_%s', (_name, expected, content) => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + const elementName = 'element'; + const document = Xml.newDocument(); + const element = Xml.createElement(document, elementName, content); + document.appendChild(element); + expect(element.textContent).toBe(content); + + const rawXml = new XMLSerializer().serializeToString(document); + + // Fixed self-closing tags to full closing tags + const fixedXml = rawXml.replaceAll(/<(.*?)\s*\/>/g, '<$1>'); + expect(fixedXml).toBe(`<${elementName}>${expected}`); + }); + + test('method_createElement_with_bad_name', () => { + install(new DOMParser(), new XMLSerializer(), new DOMImplementation()); + const document = Xml.newDocument(); + expect(() => Xml.createElement(document, '')).toThrow('Cannot create element'); + }); }); diff --git a/tsconfig.json b/tsconfig.json index 1a51f5e..9cf2cd9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,94 +1,22 @@ { - "compilerOptions": { - /* Language and Environment */ - "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + "compilerOptions": { + /* Language and Environment */ + "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - /* Modules */ - "module": "ESNext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - "moduleResolution": "Node" /* Specify how TypeScript looks up a file from a given module specifier. */, - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + /* Modules */ + "module": "ESNext" /* Specify what module code is generated. */, + "moduleResolution": "Node" /* Specify how TypeScript looks up a file from a given module specifier. */, - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + /* Emit */ + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - /* Emit */ - "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, - // "declarationMap": true /* Create sourcemaps for d.ts files. */, - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true /* Create source map files for emitted JavaScript files. */, - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + /* Interop Constraints */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - // "skipLibCheck": true /* Skip type checking all .d.ts files. */ - }, - "include": ["src"] + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + }, + "include": ["src"] } diff --git a/tsup.config.ts b/tsup.config.ts index 6cede2a..d328cc1 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,36 +1,17 @@ -import isCI from 'is-ci'; -import { defineConfig, type Options } from 'tsup'; - -const entry = 'src/index.ts'; - -const sharedConfig = defineConfig({ - name: 'cfdiutils-common', - globalName: 'cfdiutilsCommon', - splitting: false, - sourcemap: true, - format: ['esm', 'cjs', 'iife'], - minify: isCI, - shims: true, -}); +import { defineConfig } from 'tsup'; const mainConfig = defineConfig({ - ...sharedConfig, - entry: { - 'cfdiutils-common': entry, - }, - dts: false, -}) as Options; - -const dtsConfig = defineConfig({ - ...sharedConfig, - entry: { - 'cfdiutils-common': entry, - }, - dts: { - entry, - only: true, - resolve: true, - }, -}) as Options; + splitting: true, + clean: true, + experimentalDts: true, + name: 'cfdiutils-common', + globalName: 'cfdiutilsCommon', + treeshake: true, + format: ['esm', 'cjs', 'iife'], + shims: true, + entry: { + 'cfdiutils-common': 'src/index.ts', + }, +}); -export default defineConfig([mainConfig, dtsConfig]); +export default mainConfig; diff --git a/typedoc.json b/typedoc.json index 693ddd6..b814186 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,9 +1,6 @@ { - "entryPoints": ["src/index.ts"], - "entryPointStrategy": "expand", - "out": "docs", - "plugin": ["typedoc-theme-hierarchy"], - "theme": "hierarchy", - "tsconfig": "./tsconfig.json", - "name": "@nodecfdi/cfdiutils-common" + "plugin": ["typedoc-material-theme"], + "themeColor": "#badc69", + "entryPoints": ["./src/index.ts"], + "out": "./docs" } diff --git a/vitest.config.ts b/vitest.config.ts index 5c6591f..74da046 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,17 +1,16 @@ import { defineConfig } from 'vitest/config'; +import tsconfigPaths from 'vite-tsconfig-paths'; export default defineConfig({ - test: { - globals: true, - alias: { - src: './src', - }, - coverage: { - all: true, - provider: 'istanbul', - reporter: ['text', 'lcov'], - include: ['src/**/*.ts'], - }, - environmentMatchGlobs: [['**/*.browser.test.ts', 'jsdom']], + plugins: [tsconfigPaths()], + test: { + globals: true, + coverage: { + all: true, + provider: 'istanbul', + reporter: ['text', 'lcov'], + include: ['src/**/*.ts'], }, + environmentMatchGlobs: [['**/*.browser.test.ts', 'jsdom']], + }, });