diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 701947ed..00000000 --- a/.eslintignore +++ /dev/null @@ -1,22 +0,0 @@ -# unconventional js -/blueprints/*/files/ -/vendor/ - -# compiled output -/dist/ -/tmp/ - -# dependencies -/bower_components/ -/node_modules/ - -# misc -/coverage/ -!.* -.*/ -.eslintcache - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index ab45552e..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - ecmaFeatures: { - legacyDecorators: true - } - }, - plugins: ['ember'], - extends: ['eslint:recommended', 'plugin:ember/recommended', 'plugin:prettier/recommended'], - env: { - browser: true - }, - rules: { - 'no-multiple-empty-lines': [2, { max: 1 }], - - 'ember/no-jquery': 'off', - 'ember/no-observers': 'off', - 'ember/no-new-mixins': 'off', - 'ember/no-mixins': 'off', - 'ember/no-get': 'off', - 'ember/avoid-leaking-state-in-ember-objects': 'off', - 'ember/closure-actions': 'off', - 'ember/no-global-jquery': 'off', - 'ember/no-classic-classes': 'off', - 'ember/no-classic-components': 'off', - 'ember/require-tagless-components': 'off', - 'ember/no-actions-hash': 'off', - 'ember/no-component-lifecycle-hooks': 'off' - }, - overrides: [ - // node files - { - files: [ - '.eslintrc.js', - '.template-lintrc.js', - 'ember-cli-build.js', - 'index.js', - 'testem.js', - 'blueprints/*/index.js', - 'config/**/*.js', - 'tests/dummy/config/**/*.js' - ], - excludedFiles: ['addon/**', 'addon-test-support/**', 'app/**', 'tests/dummy/app/**'], - parserOptions: { - sourceType: 'script' - }, - env: { - browser: false, - node: true - }, - plugins: ['node'], - extends: ['plugin:node/recommended'] - } - ] -}; diff --git a/addon-test-support/rows-fetcher.ts b/addon-test-support/rows-fetcher.ts index 76852672..416e4d7b 100644 --- a/addon-test-support/rows-fetcher.ts +++ b/addon-test-support/rows-fetcher.ts @@ -1,8 +1,7 @@ import { Row, RowsFetcherResponse } from '@upfluence/hypertable/core/interfaces'; export default class RowsFetcher { - // @ts-ignore - fetch(page: number, perPage: number): Promise { + fetch(_page: number, _perPage: number): Promise { return Promise.resolve({ rows: [ { @@ -59,8 +58,7 @@ export default class RowsFetcher { } export class AllRowsFetcher { - // @ts-ignore - fetch(page: number, perPage: number): Promise { + fetch(_page: number, _perPage: number): Promise { return Promise.resolve({ rows: [ { diff --git a/addon-test-support/table-manager.ts b/addon-test-support/table-manager.ts index 72f89e6f..d3013dcb 100644 --- a/addon-test-support/table-manager.ts +++ b/addon-test-support/table-manager.ts @@ -12,7 +12,7 @@ import { } from '@upfluence/hypertable/core/interfaces'; export const buildColumnDefinition = (key: string, extra?: { [key: string]: any }): ColumnDefinition => { - let defaultColumnDefinition = { + const defaultColumnDefinition = { key: key, type: 'text', name: `Name: ${key}`, diff --git a/addon/components/hyper-table-v2/column.ts b/addon/components/hyper-table-v2/column.ts index 608e49b7..6f15b1b1 100644 --- a/addon/components/hyper-table-v2/column.ts +++ b/addon/components/hyper-table-v2/column.ts @@ -49,7 +49,7 @@ export default class HyperTableV2Column extends Component 0 || this.args.column.order !== undefined; } diff --git a/addon/components/hyper-table-v2/filtering-renderers/common/facets-loader.ts b/addon/components/hyper-table-v2/filtering-renderers/common/facets-loader.ts index 179a569c..24fe059c 100644 --- a/addon/components/hyper-table-v2/filtering-renderers/common/facets-loader.ts +++ b/addon/components/hyper-table-v2/filtering-renderers/common/facets-loader.ts @@ -79,7 +79,11 @@ export default class HyperTableV2FacetsLoader extends Component f.key === this.movingOptionKey); + const filter = this.args.column.filters.find((f) => f.key === this.movingOptionKey); this._currentMovingDateOption = filter ? filter.value : null; this.filterOption = this._currentMovingDateOption ? this.movingOptionKey : 'fixed'; args.handler.on('reset-columns', (columns) => { @@ -60,8 +60,8 @@ export default class HyperTableV2FilteringRenderersDate extends Component filter.key === 'lower_bound'); - let upperBoundFilter = this.args.column.filters.find((filter) => filter.key === 'upper_bound'); + const lowerBoundFilter = this.args.column.filters.find((filter) => filter.key === 'lower_bound'); + const upperBoundFilter = this.args.column.filters.find((filter) => filter.key === 'upper_bound'); if (lowerBoundFilter && upperBoundFilter) { this._currentDateValue = [ moment.unix(parseInt(lowerBoundFilter.value)).toDate(), @@ -104,7 +104,7 @@ export default class HyperTableV2FilteringRenderersDate extends Component { return !!this.initialLoadAnimation?.includeSelectionColumnInExtraEffect; } - @computed('args.handler.columns.@each.{filters,order}') + @computed('args.handler.columns.@each.{filters,order}', 'features.global_filters_reset') get displayResetButton(): boolean { const filtersApplied: boolean = this.args.handler.columns.some((col) => col.filters?.length || col.order); return filtersApplied && this.features.global_filters_reset; diff --git a/addon/components/hyper-table-v2/manage-columns.ts b/addon/components/hyper-table-v2/manage-columns.ts index aa0080a0..770c44f4 100644 --- a/addon/components/hyper-table-v2/manage-columns.ts +++ b/addon/components/hyper-table-v2/manage-columns.ts @@ -37,7 +37,7 @@ export default class HyperTableV2ManageColumns extends Component { - let fields = A( + const fields = A( (this.args.handler.columnDefinitions || []).filter((columnDefinition) => { const search = (this.searchColumnDefinitionKeyword || '').toLowerCase(); const hasSearched = diff --git a/addon/components/hyper-table-v2/selection.ts b/addon/components/hyper-table-v2/selection.ts index bccdd8a4..f43663f4 100644 --- a/addon/components/hyper-table-v2/selection.ts +++ b/addon/components/hyper-table-v2/selection.ts @@ -15,7 +15,7 @@ export default class HyperTableV2Selection extends Component 0) { classes.push('selection-container--visible'); diff --git a/addon/core/handler.ts b/addon/core/handler.ts index 9a95878e..b884d539 100644 --- a/addon/core/handler.ts +++ b/addon/core/handler.ts @@ -168,7 +168,6 @@ export default class TableHandler { * @returns {TableHandler} */ on(event: string, handler: (...args: any[]) => any): TableHandler { - // @ts-ignore Works but the declaration from @types/ember__object does not match the documentation/actual code. addListener(this, event, handler); return this; @@ -184,7 +183,7 @@ export default class TableHandler { return this.tableManager .upsertColumns({ columns: [...this.columns, ...[{ definition: definition, filters: [] }]] }) .then(({ columns }) => { - this._reinitColumnsAndRows(columns); + this.reinitColumnsAndRows(columns); }); } @@ -203,7 +202,7 @@ export default class TableHandler { .then(({ columns }) => { this.columns = columns; if (columnToRemove.length > 0 && columnToRemove[0].filters.length > 0) { - this._reinitColumnsAndRows(columns); + this.reinitColumnsAndRows(columns); this.triggerEvent('remove-column'); } }); @@ -235,7 +234,7 @@ export default class TableHandler { // Triggers the redraw of the table. if (shouldRefresh) { - this.rows = this.rows; + this.rows = [...this.rows]; this.triggerEvent('mutate-rows'); } @@ -282,7 +281,7 @@ export default class TableHandler { set(column, 'filters', newFilters); return this.tableManager.upsertColumns({ columns: this.columns }).then(({ columns }) => { - return this._reinitColumnsAndRows(columns).then(() => { + return this.reinitColumnsAndRows(columns).then(() => { this.triggerEvent('apply-filters', column, filters); }); }); @@ -304,7 +303,7 @@ export default class TableHandler { return this.tableManager.upsertColumns({ columns: this.columns }).then(({ columns }) => { this._lastOrderedColumn = column; - this._reinitColumnsAndRows(columns); + this.reinitColumnsAndRows(columns); this.triggerEvent('apply-order', column, direction); }); } @@ -326,7 +325,7 @@ export default class TableHandler { } return this.tableManager.upsertColumns({ columns: this.columns }).then(({ columns }) => { - this._reinitColumnsAndRows(columns); + this.reinitColumnsAndRows(columns); this.triggerEvent('reset-columns', columnsToReset); }); } @@ -432,18 +431,7 @@ export default class TableHandler { triggerTetherContainer(on: string, options: Tether.ITetherOptions): void { if (this.tetherOn !== on) { this.tetherOn = on; - - scheduleOnce('afterRender', this, () => { - if (this.tetherInstance) { - this.tetherInstance.setOptions(options); - } else { - this.tetherInstance = new Tether(options); - } - - scheduleOnce('afterRender', this, () => { - (this.tetherInstance).element.classList.add(`js--visible`); - }); - }); + scheduleOnce('afterRender', this, this.upsertTetherInstance, options); } else { this.tetherOn = ''; this.destroyTetherInstance(); @@ -462,7 +450,7 @@ export default class TableHandler { */ destroyTetherInstance(): void { if (this.tetherInstance) { - //@ts-ignore + //@ts-expect-error - element does not exist on Tether this.tetherInstance.element.remove(); this.tetherInstance.destroy(); this.tetherInstance = undefined; @@ -474,10 +462,26 @@ export default class TableHandler { this.currentPage = 1; } - private _reinitColumnsAndRows(columns: Column[]): Promise { + private upsertTetherInstance(options: Tether.ITetherOptions): void { + if (this.tetherInstance) { + this.tetherInstance.setOptions(options); + } else { + this.tetherInstance = new Tether(options); + } + + scheduleOnce('afterRender', this, this.showTetherInstance); + } + + private showTetherInstance(): void { + if (!this.tetherInstance) return; + + (this.tetherInstance).element.classList.add('js--visible'); + } + + private reinitColumnsAndRows(columns: Column[]): Promise { let shouldRedraw = false; columns.forEach((column) => { - let existingColumn = this.columns.find((c) => c.definition.key === column.definition.key); + const existingColumn = this.columns.find((c) => c.definition.key === column.definition.key); if (!existingColumn) { this.columns.splice(columns.indexOf(column), 0, column); @@ -485,7 +489,7 @@ export default class TableHandler { } }); if (shouldRedraw) { - this.columns = this.columns; + this.columns = [...this.columns]; } this.rows = []; diff --git a/addon/types/table.js b/addon/types/table.js index ff7456d0..63150ab0 100644 --- a/addon/types/table.js +++ b/addon/types/table.js @@ -194,7 +194,7 @@ export default EmberObject.extend({ toggleColumnVisibility(field, column) { return new Promise((resolve) => { let _c = this.columns.findBy('key', field.key); - let _action = null; + let _action; if (_c) { field.set('visible', false); diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..1df6569c --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig } from 'eslint/config'; +import upfluence from '@upfluence/w-conf/eslint'; + +export default defineConfig(...upfluence); \ No newline at end of file diff --git a/index.js b/index.js index 845a7248..f98bdd61 100644 --- a/index.js +++ b/index.js @@ -10,7 +10,6 @@ module.exports = { this._super.included.apply(this, arguments); if (parent.project.pkg.name === name) { - // eslint-disable-next-line node/no-unpublished-require this.options.babel.plugins.push(...require('ember-cli-code-coverage').buildBabelPlugin()); } }, diff --git a/package.json b/package.json index 3681e1e7..46813687 100644 --- a/package.json +++ b/package.json @@ -85,9 +85,8 @@ "@types/rsvp": "^4.0.4", "@types/sinon": "^10.0.6", "@types/tether": "^1.4.6", - "@typescript-eslint/parser": "^5.32.0", "@upfluence/oss-components": "^3.98.16", - "@upfluence/w-conf": "^0.2.0", + "@upfluence/w-conf": "^0.4.0", "broccoli-asset-rev": "^3.0.0", "ember-cli": "~3.28.6", "ember-cli-code-coverage": "^3.0.0", @@ -110,7 +109,7 @@ "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^3.15.0", "ember-try": "^4.0.0", - "eslint": "^7.32.0", + "eslint": "^10.5.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-ember": "^10.5.8", "eslint-plugin-node": "^11.1.0", @@ -119,7 +118,7 @@ "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", "prettier": "^3.8.1", - "qunit": "^2.17.2", + "qunit": "^2.20.0", "qunit-dom": "^1.6.0", "typescript": "^4.7.4", "webpack": "5" @@ -128,7 +127,7 @@ "@babel/helper-compilation-targets": "7.9.6" }, "engines": { - "node": "12.* || 14.* || >= 16" + "node": ">= 20" }, "ember": { "edition": "octane" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc71a2ed..f6a0550f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,15 +150,12 @@ importers: '@types/tether': specifier: ^1.4.6 version: 1.4.9 - '@typescript-eslint/parser': - specifier: ^5.32.0 - version: 5.62.0(eslint@7.32.0)(typescript@4.9.5) '@upfluence/oss-components': specifier: ^3.98.16 version: 3.98.16(@babel/core@7.26.0)(@ember/test-helpers@2.9.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@3.28.12(@babel/core@7.26.0)))(@glint/template@1.5.1)(ember-source@3.28.12(@babel/core@7.26.0))(qunit@2.23.1)(typescript@4.9.5)(webpack@5.97.1) '@upfluence/w-conf': - specifier: ^0.2.0 - version: 0.2.0(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.4))(prettier@3.8.4) + specifier: ^0.4.0 + version: 0.4.0(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.4))(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(eslint@10.9.1)(prettier@3.8.4)(typescript@4.9.5) broccoli-asset-rev: specifier: ^3.0.0 version: 3.0.0 @@ -226,23 +223,23 @@ importers: specifier: ^4.0.0 version: 4.0.0 eslint: - specifier: ^7.32.0 - version: 7.32.0 + specifier: ^10.5.0 + version: 10.9.1 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.2(eslint@7.32.0) + version: 9.1.2(eslint@10.9.1) eslint-plugin-ember: specifier: ^10.5.8 - version: 10.6.1(eslint@7.32.0) + version: 10.6.1(eslint@10.9.1) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@7.32.0) + version: 11.1.0(eslint@10.9.1) eslint-plugin-prettier: specifier: ^5.5.1 - version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@7.32.0))(eslint@7.32.0)(prettier@3.8.4) + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@10.9.1))(eslint@10.9.1)(prettier@3.8.4) eslint-plugin-qunit: specifier: ^6.2.0 - version: 6.2.0(eslint@7.32.0) + version: 6.2.0(eslint@10.9.1) loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -253,7 +250,7 @@ importers: specifier: ^3.8.1 version: 3.8.4 qunit: - specifier: ^2.17.2 + specifier: ^2.20.0 version: 2.23.1 qunit-dom: specifier: ^1.6.0 @@ -271,9 +268,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.12.11': - resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} - '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -394,10 +388,6 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.25.9': - resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} - engines: {node: '>=6.9.0'} - '@babel/parser@7.26.5': resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} engines: {node: '>=6.0.0'} @@ -992,9 +982,53 @@ packages: '@glint/template': optional: true - '@eslint/eslintrc@0.4.3': - resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} - engines: {node: ^10.12.0 || >=12.0.0} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.7.0': + resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@floating-ui/core@1.7.2': resolution: {integrity: sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==} @@ -1073,6 +1107,9 @@ packages: '@glimmer/interfaces@0.84.3': resolution: {integrity: sha512-dk32ykoNojt0mvEaIW6Vli5MGTbQo58uy3Epj7ahCgTHmWOKuw/0G83f2UmFprRwFx689YTXG38I/vbpltEjzg==} + '@glimmer/interfaces@0.94.6': + resolution: {integrity: sha512-sp/1WePvB/8O+jrcUHwjboNPTKrdGicuHKA9T/lh0vkYK2qM5Xz4i25lQMQ38tEMiw7KixrjHiTUiaXRld+IwA==} + '@glimmer/reference@0.65.4': resolution: {integrity: sha512-yuRVE4qyqrlCndDMrHKDWUbDmGDCjPzsFtlTmxxnhDMJAdQsnr2cRLITHvQRDm1tXfigVvyKnomeuYhRRbBqYQ==} @@ -1082,6 +1119,9 @@ packages: '@glimmer/syntax@0.84.3': resolution: {integrity: sha512-ioVbTic6ZisLxqTgRBL2PCjYZTFIwobifCustrozRU2xGDiYvVIL0vt25h2c1ioDsX59UgVlDkIK4YTAQQSd2A==} + '@glimmer/syntax@0.95.0': + resolution: {integrity: sha512-W/PHdODnpONsXjbbdY9nedgIHpglMfOzncf/moLVrKIcCfeQhw2vG07Rs/YW8KeJCgJRCLkQsi+Ix7XvrurGAg==} + '@glimmer/tracking@1.1.2': resolution: {integrity: sha512-cyV32zsHh+CnftuRX84ALZpd2rpbDrhLhJnTXn9W//QpqdRZ5rdMsxSY9fOsj0CKEc706tmEU299oNnDc0d7tA==} @@ -1094,6 +1134,9 @@ packages: '@glimmer/util@0.84.3': resolution: {integrity: sha512-qFkh6s16ZSRuu2rfz3T4Wp0fylFj3HBsONGXQcrAdZjdUaIS6v3pNj6mecJ71qRgcym9Hbaq/7/fefIwECUiKw==} + '@glimmer/util@0.94.8': + resolution: {integrity: sha512-HfCKeZ74clF9BsPDBOqK/yRNa/ke6niXFPM6zRn9OVYw+ZAidLs7V8He/xljUHlLRL322kaZZY8XxRW7ALEwyg==} + '@glimmer/validator@0.44.0': resolution: {integrity: sha512-i01plR0EgFVz69GDrEuFgq1NheIjZcyTy3c7q+w7d096ddPVeVcRzU3LKaqCfovvLJ+6lJx40j45ecycASUUyw==} @@ -1103,6 +1146,9 @@ packages: '@glimmer/vm-babel-plugins@0.80.3': resolution: {integrity: sha512-9ej6xlm5MzHBJ5am2l0dbbn8Z0wJoYoMpM8FcrGMlUP6SPMLWxvxpMsApgQo8u6dvZRCjR3/bw3fdf7GOy0AFw==} + '@glimmer/wire-format@0.94.8': + resolution: {integrity: sha512-A+Cp5m6vZMAEu0Kg/YwU2dJZXyYxVJs2zI57d3CP6NctmX7FsT8WjViiRUmt5abVmMmRH5b8BUovqY6GSMAdrw==} + '@glint/template@1.5.1': resolution: {integrity: sha512-KBWG3XZemv8VyFsq3m7eebXmQuY+AShgKSUlbjiqQaPfMK3a1ri1oS3wqTS5eRGwcfQgbbEHH2rkgppB7yoz5w==} @@ -1112,14 +1158,29 @@ packages: '@handlebars/parser@2.0.0': resolution: {integrity: sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==} - '@humanwhocodes/config-array@0.5.0': - resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@handlebars/parser@2.2.2': + resolution: {integrity: sha512-n/SZW+12rwikx/f8YcSv9JCi5p9vn1Bnts9ZtVvfErG4h0gbjHI1H1ZMhVUnaOC7yzFc6PtsCKIK8XeTnL90Gw==} + engines: {node: ^18 || ^20 || ^22 || >=24} - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - deprecated: Use @eslint/object-schema instead + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -1156,6 +1217,13 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1168,6 +1236,139 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@one-ini/wasm@0.2.1': + resolution: {integrity: sha512-TUqERXGNTifZ9y2g3wPxQrw3HpHv/02DsW3D90T9x0hhonrL1ZqpSmNrU2XkoIq0fP1N6gZfVQzy2Fw1ZvGBNg==} + + '@oxc-parser/binding-android-arm-eabi@0.130.0': + resolution: {integrity: sha512-h/xYU8/7ADWzVSf5I+YalLpj33LOy9CI/zgbJNIZ5eunRBG+Czqa3lZsvuPHHf3rOt6z1c5+UzoxjbAzAvhwVw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxc-parser/binding-android-arm64@0.130.0': + resolution: {integrity: sha512-oFWFJrsGv9siFM4HjMqKNB7IuIZD/SMmZdCXl8xyx7lDplGvPKyewpOo272rSWgMXe2Wx7bWI0Yj+gkHv4qbeg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.130.0': + resolution: {integrity: sha512-sGUzupdTplK9jQg7eJZ878HfEgQjJNBc6dAYVWJ9W5aU+J8rLfRJhTVsKThiu1pNwm6Y1qKCcbC6WhNWSXR3Ig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.130.0': + resolution: {integrity: sha512-PsB4cdCISbC00Uy8eiD8bc2AkGWjZqrSrJnkBFuG2ptrrf6mZ2F5gLFSjOAVMMgZPg8B1D7OydJwLWSfyI2Plg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.130.0': + resolution: {integrity: sha512-DgABp3l38hS77JbXCV4qk1+n6DPym5u8zzwuweokezm2tX194nDSJDENbDRECxVsiNbprKATLbk+Z5wlHT0OHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.130.0': + resolution: {integrity: sha512-4Kn3CTEmwFrzhTSC/JuUW16qovmaMdX7jeSKbL8w0pLtLww7To1a2XJi9Z5uD8QWUkfUHhqfV+VD6dVzBnWzoA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.130.0': + resolution: {integrity: sha512-D35KZM3F4rRu1uAFKyBlg3Gaf/ybCjyaPR1hfgvk5ex8NtcTmRgc0JgSighEyNg96TPrFhemFba68SZuxaha8w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.130.0': + resolution: {integrity: sha512-Q9o7oVlo955KHwS8l1u0bCzIx+JsZUA3XToLXC+MsMhye/9LeBQbt84nh120cl2XLy+TEzvugYDiHShg5yaX6Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-arm64-musl@0.130.0': + resolution: {integrity: sha512-EiJ/gC0ljbcwVpycC8YWw6ggMbtsPX8XMOt0mPx0aqWeMsNR+L9m05Flbvd5T+GlivG+GkSWQL7tM9SRFpM/dw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-ppc64-gnu@0.130.0': + resolution: {integrity: sha512-b+h/lsLLurp756dMGizNs5uPaJfyEdWrTcV5t8M609jWm1DEHB1StpRXCkyvwtkJx3m+qL5BNQ0dEKan/4yGFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-gnu@0.130.0': + resolution: {integrity: sha512-O19Cil83XAyjEFfo8WhkMwY58ALqZ7ckjGL+25mjMIuF84urWBeANH0FC8B8BsSSygWU3/1aY3ADdDbp+wlBnw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-riscv64-musl@0.130.0': + resolution: {integrity: sha512-BgXRVC0+83n3YzCscLQjj6nbyeBIVeZYPTI4fFMAE4WNm2+4RXhWp03IVizL7esIz36kgmT48aebk1iM+cs8sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-linux-s390x-gnu@0.130.0': + resolution: {integrity: sha512-6tJz0xvnGhsokE7N1WlUSBXibpYmT9xSJFS1Ce41Km/+8gQvdlW8MLhRv8PD0L7ix8vRG0FDDepp3jdOFzdVdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-gnu@0.130.0': + resolution: {integrity: sha512-9aCWj83dp3heTQGmGnZGdIWgxjZrr/7VQ0TGFHH5PKByxJKF2Hcr4qvaSUHhhGEa3MSsDjTL1YDP8RAgdL5/Cg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxc-parser/binding-linux-x64-musl@0.130.0': + resolution: {integrity: sha512-afXt87aZBqrUVli8TB/I8H1G50RDWcwirjWtXGXYqJ2ZqWEiErH7V72j3LUSDZaivmtu2OLX0KQ/mbhP81mr7A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxc-parser/binding-openharmony-arm64@0.130.0': + resolution: {integrity: sha512-I0NCrZV/YZuCGWgqwNN/GO/iXlLF2z+Wgc7u+Aa9N4P51oYeIa0XT+zVBUne4csO9GqxskXgI4g8JzzWGRpfOw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxc-parser/binding-wasm32-wasi@0.130.0': + resolution: {integrity: sha512-sJgQkGaBX0WJvPUDfwciex6IcTk5O5NLQ1bhEb6f3nBruh1GshKMRSMt2bxZlYrgBzjyBbJzsnO+InPG0bg+fA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.130.0': + resolution: {integrity: sha512-bjcma99sQrNh6RY4mPO9yTkfxql6TDFoN3HWdK31RCKXwNhcDgJXW/l8PUtzKNiQ+9vpKJfJtQq+LklBuxSOBA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-ia32-msvc@0.130.0': + resolution: {integrity: sha512-hRYbv6HhpSTzT4xTiIkadLI7upLQxuOdLPR/9nL1fTjwhgutBTPXrwaAPb/jTFVx6/8C7Jb5HcUKhmNwloTbFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.130.0': + resolution: {integrity: sha512-RBpA9TsRucJq6HNVNCFF1iKg+QeTkLdZf7hi4xaOGCPvMZWvDHjQgSOEZMUpuW4JNciHbxNhLEYmz5CVygjVGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.130.0': + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@pkgr/core@0.3.6': resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1217,6 +1418,9 @@ packages: svelte: optional: true + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -1313,9 +1517,15 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} @@ -1403,36 +1613,64 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/parser@5.62.0': - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/eslint-plugin@8.68.0': + resolution: {integrity: sha512-WASHDpCm6qO5jj9g1a+8NiW5+GCkAyLReR56/4VruYmNgfUmqpxOfZ2Yfb8xGfJPWv5Qi6LSD8sXdces3vbp/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser': ^8.68.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/parser@8.68.0': + resolution: {integrity: sha512-fHq2VC1kpyYfvEcbiMjOpySY4WS7voEp89yAThrHRX5sm9j2lzYppCb2umFMEed4fWcyeLjHxrz0mpjNBaBxMQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/project-service@8.68.0': + resolution: {integrity: sha512-5GQtWZCXFcFYux955pvoS02WLc49pXNlvIxocKjS0clvwo3in1RdlzVKyiqQH9vE5AKWFLTaUgeQkOrTS+0Qxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@8.68.0': + resolution: {integrity: sha512-T5eXpcaJNg8bhjHJ8Rjp68Vq/QBteYtTKY8TZqVNPaUbuz0f6jI9t6aDkylwvalpAB9XTTFeFOjrjXAZ3YvmVA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.68.0': + resolution: {integrity: sha512-F7zrGQfiJHojPwi8vhxZQC1tWtJzvL74cK/nqri2lk8YUXvYaYwl263xOJ69jDWPUk1hmcdoayFwk9lX09npVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/type-utils@8.68.0': + resolution: {integrity: sha512-X77zqoY1EjeWGs/0JNxeaMfp5C5lIz4Tw8y66F1Ne8Faq6g424sBNYM6xBAqElfGZPLpWS+CZAp0DXyKDzWiHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.68.0': + resolution: {integrity: sha512-9RnpsGJjrAllCMefGVVsImJM24YurhC0Q1h4UbvivtvOqXmR/vEJge2OoE++z9m6hyg8T1Q8t5SNT6tHSbrxcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.68.0': + resolution: {integrity: sha512-OKKsD0tYmoNiU5PW2zehO1yO56jYOm1ShYlxon/Z0SJNidAkdVg86eg9ruRuoXf8xfnuWZGbwDsStkoXbZtIIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.68.0': + resolution: {integrity: sha512-PB5gJMMOg0Q5P1tsgWtEAqQacJXq0qEqRHDX/YJ4FaTMLfZPpHB3gjl2EJuiZyPABxmj4ZQYiY9m1bdAJ5y7tQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.68.0': + resolution: {integrity: sha512-YR65gGdGvTUAWLldC3xLOvOzamdGzB4A5/N8rehEaHs3Zvoe39BhgY+u0SPch1OvrVTfLcc55wsSgK2NcnTS/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@upfluence/oss-components@3.98.16': resolution: {integrity: sha512-RRpmwe7+srdUk9yGumxRdg5k8Q5UTdu1NBIubU6ZAanXma4pcc+YmgjLCugUUT9zy9rklxh11InVSplzJHkpUw==, tarball: https://npm.pkg.github.com/download/@upfluence/oss-components/3.98.16/24c3852e34400180598a1749d6835867552ce6e6} @@ -1440,10 +1678,12 @@ packages: peerDependencies: qunit: "^2.x ||\_^3.x" - '@upfluence/w-conf@0.2.0': - resolution: {integrity: sha512-mPOnRNxCu0PQYabb/kAzYF77mt6WBxiYHSi8LbrpaY4to2vzCmaqgKh7Qk0UX/wVCd5LF57zDhuaB5AVRRy7/Q==, tarball: https://npm.pkg.github.com/download/@upfluence/w-conf/0.2.0/715f8a1840f318574a084575ba1ef2ad5c99f2a7} + '@upfluence/w-conf@0.4.0': + resolution: {integrity: sha512-orYsfnNwxV27s+7L1/ZJnaO9n1oGPjC3zlDteFiidN8dxN1CXLo+uMIEIsAfE6E7qcWlZotqVQONXfbcFPDFIw==, tarball: https://npm.pkg.github.com/download/@upfluence/w-conf/0.4.0/495abd465e07e03b1c5409e2e75ecb10aba8d8ce} + engines: {node: '>=20.0.0'} peerDependencies: '@trivago/prettier-plugin-sort-imports': ^5.2.2 + eslint: '>=10.5.0' prettier: ^3.6.2 '@webassemblyjs/ast@1.14.1': @@ -1572,13 +1812,13 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} engines: {node: '>=0.4.0'} hasBin: true @@ -1608,6 +1848,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -1622,10 +1865,6 @@ packages: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} engines: {node: '>=0.4.2'} - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} @@ -1699,6 +1938,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} @@ -1756,10 +1999,6 @@ packages: resolution: {integrity: sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==} engines: {node: '>=4'} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - async-disk-cache@1.3.5: resolution: {integrity: sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ==} @@ -1792,6 +2031,10 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + babel-code-frame@6.26.0: resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} @@ -2049,6 +2292,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2124,12 +2371,13 @@ packages: brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - brace-expansion@2.1.1: resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} + braces@2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} @@ -2553,6 +2801,10 @@ packages: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -2788,6 +3040,9 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-tag@4.2.0: + resolution: {integrity: sha512-f/o+F3qSa4gg23I7RWy6cMDxP2nPo99YWusxw2bjne7ZC6Acqqf4uB/+87AekOq1ehTocHH7b7nMd2X4S3NHVw==} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -2879,6 +3134,10 @@ packages: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -2940,6 +3199,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} @@ -3033,10 +3301,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - domain-browser@1.2.0: resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} engines: {node: '>=0.4', npm: '>=1.2'} @@ -3069,6 +3333,11 @@ packages: resolution: {integrity: sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==} engines: {node: '>=0.8'} + editorconfig@3.0.2: + resolution: {integrity: sha512-T0ix8GhtxyKVfUFEcvdNDt3YGqlwkFHbD4/5bgFUDgFmxhI/cSRAeJ87/Sz//Cq8Eam6JX/e23RkoFO71P7aAA==} + engines: {node: '>=20'} + hasBin: true + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -3238,6 +3507,21 @@ packages: resolution: {integrity: sha512-SB9NcZ27OtoUk+gfalsc3QU17+54OoqR668qHcuvHByk4KAhGxCKlkm9EBlKJcGr7yceOOAJqohTcCEBqfRw9g==} engines: {node: '>= 0.10.0'} + ember-eslint-parser@0.14.6: + resolution: {integrity: sha512-Z4fA1E/3uGZeBLPcz5aCiic3OoZ9YVxQBkImgGXdtgHLLuF/51drGor/FCwT9cCs1XZqY8HWRy4aarl+MZCfwQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@babel/eslint-parser': ^7.28.6 || ^8.0.0 + '@typescript-eslint/parser': '*' + peerDependenciesMeta: + '@babel/eslint-parser': + optional: true + '@typescript-eslint/parser': + optional: true + + ember-estree@0.6.11: + resolution: {integrity: sha512-aZyheQGUXyHu8GARPd1YyjbDMGkvqBYKzPj6RVp8qqMqA1L1MbkWKsljWE3K1CwiJcHwTPgm/O3oxS0TY1AX9Q==} + ember-export-application-global@2.0.1: resolution: {integrity: sha512-B7wiurPgsxsSGzJuPFkpBWnaeuCu2PGpG2BjyrfA1VcL7//o+5RSnZqiCEY326y7qmxb2GoCgo0ft03KBU0rRw==} engines: {node: '>= 4'} @@ -3377,9 +3661,9 @@ packages: resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} engines: {node: '>=10.13.0'} - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + enhanced-resolve@5.24.5: + resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} + engines: {node: '>=10.13.0'} ensure-posix-path@1.1.1: resolution: {integrity: sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==} @@ -3452,6 +3736,18 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + eslint-config-prettier@9.1.2: resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==} hasBin: true @@ -3464,12 +3760,41 @@ packages: peerDependencies: eslint: '>= 6' + eslint-plugin-ember@13.5.0: + resolution: {integrity: sha512-q1s/irrc2l1KeE1l5S1UiO7ZrvGF5aYm903CMQ7lHFc09F/78/uvgzvA4wPZ9TFMl07r2ttoIINrEOFy05RtGg==} + engines: {node: '>= 20.19'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '>= 8.40.0' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + eslint-plugin-es@3.0.1: resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' + eslint-plugin-n@18.3.0: + resolution: {integrity: sha512-cPVguuDe6DrIPb/qUXHf8P89MaVTUmiYWwpt5gX5AILsvRIiZAxMFXcFR6QHYBksqKJpjfUBlL/RleCJUWcD7w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: '>=8.57.1' + ts-declaration-location: ^1.0.6 + typescript: '>=5.0.0' + peerDependenciesMeta: + ts-declaration-location: + optional: true + typescript: + optional: true + eslint-plugin-node@11.1.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} @@ -3494,6 +3819,12 @@ packages: resolution: {integrity: sha512-KvPmkIC2MHpfRxs/r8WUeeGkG6y+3qwSi2AZIBtjcM/YG6Z3k0GxW5Hbu3l7X0TDhljVCeBb9Q5puUkHzl83Mw==} engines: {node: 10.x || 12.x || >=14.0.0} + eslint-plugin-qunit@8.2.6: + resolution: {integrity: sha512-S1jC/DIW9J8VtNX4uG1vlf5FZVrfQFlcuiYmvTHR2IICUhubHqpWA5o+qS1tujh+81Gs39omKV2D4OXfbSJE5g==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + peerDependencies: + eslint: '>=8.38.0' + eslint-scope@4.0.3: resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} engines: {node: '>=4.0.0'} @@ -3502,6 +3833,10 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} @@ -3524,19 +3859,27 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@7.32.0: - resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} - engines: {node: ^10.12.0 || >=12.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.9.1: + resolution: {integrity: sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true esm@3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} - espree@7.3.1: - resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} - engines: {node: ^10.12.0 || >=12.0.0} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@3.0.0: resolution: {integrity: sha512-xoBq/MIShSydNZOkjkoCEjqod963yHNXTLC40ypBhop6yPqflPz/vTinmCfSrGcywVLnSftRf6a0kJLdFdzemw==} @@ -3548,8 +3891,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -3693,6 +4036,15 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figgy-pudding@3.5.2: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} deprecated: This module is no longer supported. @@ -3705,9 +4057,9 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -3791,9 +4143,9 @@ packages: resolution: {integrity: sha512-SRgwIMXlxkb6AUgaVjIX+jCEqdhyXu9hah7mcK+lWynjKtX73Ux1TDv71B7XyaQ+LJxkYRHl5yCL8IycAvQRUw==} engines: {node: 10.* || >= 12.*} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatpickr@4.6.13: resolution: {integrity: sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==} @@ -3902,9 +4254,6 @@ packages: resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} - functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -3961,6 +4310,9 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} + get-tsconfig@4.14.3: + resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} + get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -3979,6 +4331,10 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -4006,9 +4362,13 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globals@17.11.0: + resolution: {integrity: sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==} + engines: {node: '>=18'} globals@9.18.0: resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} @@ -4156,6 +4516,14 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + html-tags@5.1.0: + resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} + engines: {node: '>=20.10'} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -4204,23 +4572,19 @@ packages: iferr@0.1.5: resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} - ignore@4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} - engines: {node: '>= 4'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.7: + resolution: {integrity: sha512-dML0wP6oak21rsNYCJpJB6O1BJIEwNpGrTw0URPfAk4hm0e3pRfCtzkfB6olBcXcVlU2rouCyz7lCyRB0OMVCA==} + engines: {node: '>= 4'} + image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} hasBin: true - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -4665,6 +5029,13 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + leek@0.0.24: resolution: {integrity: sha512-6PVFIYXxlYF0o6hrAsHtGpTmi06otkwNrMcmQ0K96SeSRHPREPa9J3nJZ1frliVH7XT0XFswoJFQoXsDukzGNQ==} @@ -4766,6 +5137,9 @@ packages: lodash.assign@3.2.0: resolution: {integrity: sha512-/VVxzgGBmbphasTg51FrztxQJ/VgAUpol6zmJuSVSGcNg4g7FA4z7rQV8Ovr9V3vFBNWZhvKWHfpAytjTVUfFA==} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@3.1.1: resolution: {integrity: sha512-lcmJwMpdPAtChA4hfiwxTtgFeNAaow701wWUgVUqeD0XJF7vMXIN+bu/2FJSGxT0NUbZy9g9VFrlOFfPjl+0Ew==} @@ -4808,9 +5182,6 @@ packages: lodash.templatesettings@4.2.0: resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} - lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -4898,12 +5269,18 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mathml-tag-names@4.0.0: + resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} @@ -4998,6 +5375,10 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -5283,6 +5664,10 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + oxc-parser@0.130.0: + resolution: {integrity: sha512-X0PJ+NmOok8qP3vK9uaW431ngkdM9UPEK7KG466urtIL2+EYTEgbZK2yqe2MWKJKBjRlFweP/pJPx0x9muMEVw==} + engines: {node: ^20.19.0 || >=22.12.0} + p-cancelable@1.1.0: resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} engines: {node: '>=6'} @@ -5345,10 +5730,6 @@ packages: parallel-transform@1.2.0: resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - parse-asn1@5.1.7: resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} engines: {node: '>= 0.10'} @@ -5450,6 +5831,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pidtree@0.3.1: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} engines: {node: '>=0.10'} @@ -5572,10 +5957,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -5816,10 +6197,6 @@ packages: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -5843,6 +6220,9 @@ packages: resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} engines: {node: '>= 0.8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated @@ -5976,6 +6356,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -6082,10 +6467,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -6296,10 +6677,6 @@ packages: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - style-loader@2.0.0: resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} engines: {node: '>= 10.13.0'} @@ -6332,6 +6709,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + symlink-or-copy@1.3.1: resolution: {integrity: sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==} @@ -6346,10 +6726,6 @@ packages: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} - table@6.9.0: - resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} - engines: {node: '>=10.0.0'} - tap-parser@7.0.0: resolution: {integrity: sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==} hasBin: true @@ -6362,6 +6738,10 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -6414,9 +6794,6 @@ packages: tether@1.4.7: resolution: {integrity: sha512-Z0J1aExjoFU8pybVkQAo/vD2wfSO63r+XOPfWQMC5qtf1bI7IWqNk4MiyBcgvvnY8kqnY06dVdvwTK2S3PU/Fw==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - textextensions@2.6.0: resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==} engines: {node: '>=0.8'} @@ -6440,6 +6817,10 @@ packages: tiny-lr@2.0.0: resolution: {integrity: sha512-f6nh0VMRvhGx4KCeK1lQ/jaL0Zdb5WdR+Jk8q9OSUQnaSDxAEGH1fgqLZ+cMl5EW3F2MGnCsalBO1IsnnogW1Q==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tmp@0.0.28: resolution: {integrity: sha512-c2mmfiBmND6SOVxzogm1oda0OJ1HZVIk/5n26N59dDTh80MUeavpiCls4PGAdkX1PFkKokLpcf7prSjCeXLsJg==} engines: {node: '>=0.4.0'} @@ -6504,18 +6885,18 @@ packages: resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} engines: {node: '>=0.10.0'} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tty-browserify@0.0.0: resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} @@ -6535,14 +6916,14 @@ packages: resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} engines: {node: '>=8'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -6569,6 +6950,13 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typescript-eslint@8.68.0: + resolution: {integrity: sha512-MHy0Y0ynqeEbx/S45+i/bBssdy3X6KNBfmJAP35GrgtNxu2TQ5K5xsFDhAnmsq1jvpdoZOPG1LGtJo0HWqYCrQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + typescript-memoize@1.1.1: resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==} @@ -6914,10 +7302,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.12.11': - dependencies: - '@babel/highlight': 7.25.9 - '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 @@ -7006,7 +7390,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.9.6(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -7091,13 +7475,6 @@ snapshots: '@babel/template': 7.25.9 '@babel/types': 7.26.5 - '@babel/highlight@7.25.9': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/parser@7.26.5': dependencies: '@babel/types': 7.26.5 @@ -7803,7 +8180,7 @@ snapshots: find-up: 5.0.0 lodash: 4.17.21 resolve: 1.22.10 - semver: 7.6.3 + semver: 7.8.5 transitivePeerDependencies: - supports-color @@ -7829,7 +8206,7 @@ snapshots: fs-extra: 9.1.0 lodash: 4.17.21 resolve-package-path: 4.0.3 - semver: 7.6.3 + semver: 7.8.5 typescript-memoize: 1.1.1 '@embroider/shared-internals@1.8.3': @@ -7896,20 +8273,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/eslintrc@0.4.3': + '@emnapi/core@1.10.0': dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 7.3.1 - globals: 13.24.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - js-yaml: 3.14.1 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.10.1(eslint@10.9.1)': + dependencies: + eslint: 10.9.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.6 transitivePeerDependencies: - supports-color + '@eslint/config-helpers@0.7.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/js@10.0.1(eslint@10.9.1)': + optionalDependencies: + eslint: 10.9.1 + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.2': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + '@floating-ui/core@1.7.2': dependencies: '@floating-ui/utils': 0.2.10 @@ -8034,6 +8447,11 @@ snapshots: dependencies: '@simple-dom/interface': 1.4.0 + '@glimmer/interfaces@0.94.6': + dependencies: + '@simple-dom/interface': 1.4.0 + type-fest: 4.41.0 + '@glimmer/reference@0.65.4': dependencies: '@glimmer/env': 0.1.7 @@ -8056,6 +8474,14 @@ snapshots: '@handlebars/parser': 2.0.0 simple-html-tokenizer: 0.5.11 + '@glimmer/syntax@0.95.0': + dependencies: + '@glimmer/interfaces': 0.94.6 + '@glimmer/util': 0.94.8 + '@glimmer/wire-format': 0.94.8 + '@handlebars/parser': 2.2.2 + simple-html-tokenizer: 0.5.11 + '@glimmer/tracking@1.1.2': dependencies: '@glimmer/env': 0.1.7 @@ -8075,6 +8501,10 @@ snapshots: '@glimmer/interfaces': 0.84.3 '@simple-dom/interface': 1.4.0 + '@glimmer/util@0.94.8': + dependencies: + '@glimmer/interfaces': 0.94.6 + '@glimmer/validator@0.44.0': {} '@glimmer/validator@0.65.4': @@ -8088,21 +8518,33 @@ snapshots: transitivePeerDependencies: - '@babel/core' + '@glimmer/wire-format@0.94.8': + dependencies: + '@glimmer/interfaces': 0.94.6 + '@glint/template@1.5.1': {} '@handlebars/parser@1.1.0': {} '@handlebars/parser@2.0.0': {} - '@humanwhocodes/config-array@0.5.0': + '@handlebars/parser@2.2.2': {} + + '@humanfs/core@0.19.2': dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@1.2.1': {} + '@humanwhocodes/retry@0.4.3': {} '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -8146,6 +8588,13 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.3 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8158,6 +8607,74 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.18.0 + '@one-ini/wasm@0.2.1': {} + + '@oxc-parser/binding-android-arm-eabi@0.130.0': + optional: true + + '@oxc-parser/binding-android-arm64@0.130.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.130.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.130.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.130.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.130.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.130.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.130.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.130.0': + optional: true + + '@oxc-parser/binding-linux-ppc64-gnu@0.130.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.130.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-musl@0.130.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.130.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.130.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.130.0': + optional: true + + '@oxc-parser/binding-openharmony-arm64@0.130.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.130.0': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.130.0': + optional: true + + '@oxc-parser/binding-win32-ia32-msvc@0.130.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.130.0': + optional: true + + '@oxc-project/types@0.130.0': {} + '@pkgr/core@0.3.6': {} '@simple-dom/interface@1.4.0': {} @@ -8200,6 +8717,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 @@ -8353,7 +8875,7 @@ snapshots: '@types/eslint@7.29.0': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@types/eslint@9.6.1': @@ -8361,8 +8883,12 @@ snapshots: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 + '@types/esrecurse@4.3.1': {} + '@types/estree@1.0.6': {} + '@types/estree@1.0.9': {} + '@types/express-serve-static-core@4.19.6': dependencies: '@types/node': 22.10.5 @@ -8462,43 +8988,96 @@ snapshots: '@types/trusted-types@2.0.7': optional: true - '@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(eslint@10.9.1)(typescript@4.9.5)': dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - debug: 4.4.0 - eslint: 7.32.0 - optionalDependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/type-utils': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.68.0 + eslint: 10.9.1 + ignore: 7.0.7 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5)': + dependencies: + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.68.0 + debug: 4.4.3 + eslint: 10.9.1 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.68.0(typescript@4.9.5)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.68.0(typescript@4.9.5) + '@typescript-eslint/types': 8.68.0 + debug: 4.4.3 typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@5.62.0': + '@typescript-eslint/scope-manager@8.68.0': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/visitor-keys': 8.68.0 - '@typescript-eslint/types@5.62.0': {} + '@typescript-eslint/tsconfig-utils@8.68.0(typescript@4.9.5)': + dependencies: + typescript: 4.9.5 - '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': + '@typescript-eslint/type-utils@8.68.0(eslint@10.9.1)(typescript@4.9.5)': dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.0 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.3 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + debug: 4.4.3 + eslint: 10.9.1 + ts-api-utils: 2.5.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@5.62.0': + '@typescript-eslint/types@8.68.0': {} + + '@typescript-eslint/typescript-estree@8.68.0(typescript@4.9.5)': dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/project-service': 8.68.0(typescript@4.9.5) + '@typescript-eslint/tsconfig-utils': 8.68.0(typescript@4.9.5) + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/visitor-keys': 8.68.0 + debug: 4.4.3 + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.68.0(eslint@10.9.1)(typescript@4.9.5)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1) + '@typescript-eslint/scope-manager': 8.68.0 + '@typescript-eslint/types': 8.68.0 + '@typescript-eslint/typescript-estree': 8.68.0(typescript@4.9.5) + eslint: 10.9.1 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.68.0': + dependencies: + '@typescript-eslint/types': 8.68.0 + eslint-visitor-keys: 5.0.1 '@upfluence/oss-components@3.98.16(@babel/core@7.26.0)(@ember/test-helpers@2.9.4(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@3.28.12(@babel/core@7.26.0)))(@glint/template@1.5.1)(ember-source@3.28.12(@babel/core@7.26.0))(qunit@2.23.1)(typescript@4.9.5)(webpack@5.97.1)': dependencies: @@ -8534,10 +9113,24 @@ snapshots: - typescript - webpack - '@upfluence/w-conf@0.2.0(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.4))(prettier@3.8.4)': + '@upfluence/w-conf@0.4.0(@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.4))(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(eslint@10.9.1)(prettier@3.8.4)(typescript@4.9.5)': dependencies: + '@eslint/js': 10.0.1(eslint@10.9.1) '@trivago/prettier-plugin-sort-imports': 6.0.2(prettier@3.8.4) + eslint: 10.9.1 + eslint-config-prettier: 10.1.8(eslint@10.9.1) + eslint-plugin-ember: 13.5.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(eslint@10.9.1)(typescript@4.9.5) + eslint-plugin-n: 18.3.0(eslint@10.9.1)(typescript@4.9.5) + eslint-plugin-qunit: 8.2.6(eslint@10.9.1) + globals: 17.11.0 prettier: 3.8.4 + typescript-eslint: 8.68.0(eslint@10.9.1)(typescript@4.9.5) + transitivePeerDependencies: + - '@babel/eslint-parser' + - '@typescript-eslint/parser' + - supports-color + - ts-declaration-location + - typescript '@webassemblyjs/ast@1.14.1': dependencies: @@ -8719,16 +9312,16 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@7.4.1): + acorn-jsx@5.3.2(acorn@8.18.0): dependencies: - acorn: 7.4.1 + acorn: 8.18.0 acorn@6.4.2: {} - acorn@7.4.1: {} - acorn@8.14.0: {} + acorn@8.18.0: {} + ajv-errors@1.0.1(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -8753,6 +9346,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -8771,8 +9371,6 @@ snapshots: amdefine@1.0.1: {} - ansi-colors@4.1.3: {} - ansi-escapes@3.2.0: {} ansi-escapes@4.3.2: @@ -8833,6 +9431,8 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.2: {} + arr-diff@4.0.0: {} arr-flatten@1.1.0: {} @@ -8885,8 +9485,6 @@ snapshots: ast-types@0.13.3: {} - astral-regex@2.0.0: {} - async-disk-cache@1.3.5: dependencies: debug: 2.6.9 @@ -8901,7 +9499,7 @@ snapshots: async-disk-cache@2.1.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 heimdalljs: 0.2.6 istextorbinary: 2.6.0 mkdirp: 0.5.6 @@ -8935,6 +9533,8 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 + axobject-query@4.1.0: {} + babel-code-frame@6.26.0: dependencies: chalk: 1.1.3 @@ -9473,6 +10073,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} base64id@2.0.0: {} @@ -9566,13 +10168,13 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 - brace-expansion@2.1.1: + brace-expansion@5.0.9: dependencies: - balanced-match: 1.0.2 + balanced-match: 4.0.4 braces@2.3.2: dependencies: @@ -9808,7 +10410,7 @@ snapshots: dependencies: array-equal: 1.0.2 broccoli-plugin: 4.0.7 - debug: 4.4.0 + debug: 4.4.3 fs-tree-diff: 2.0.1 heimdalljs: 0.2.6 minimatch: 3.1.2 @@ -10385,6 +10987,8 @@ snapshots: colors@1.4.0: {} + commander@14.0.3: {} + commander@2.20.3: {} commander@2.8.1: @@ -10474,6 +11078,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-tag@4.2.0: {} + content-type@1.0.5: {} continuable-cache@0.3.1: {} @@ -10594,6 +11200,11 @@ snapshots: mdn-data: 2.0.30 source-map-js: 1.2.1 + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + cssesc@3.0.0: {} cyclist@1.0.2: {} @@ -10638,6 +11249,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decimal.js@10.4.3: {} decode-uri-component@0.2.2: {} @@ -10718,10 +11333,6 @@ snapshots: dependencies: path-type: 4.0.0 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - domain-browser@1.2.0: {} dompurify@3.4.11: @@ -10759,6 +11370,13 @@ snapshots: errlop: 2.2.0 semver: 6.3.1 + editorconfig@3.0.2: + dependencies: + '@one-ini/wasm': 0.2.1 + commander: 14.0.3 + minimatch: 10.2.6 + semver: 7.8.5 + ee-first@1.1.1: {} electron-to-chromium@1.5.80: {} @@ -11147,12 +11765,12 @@ snapshots: dependencies: ansi-to-html: 0.6.15 broccoli-stew: 3.0.0 - debug: 4.4.0 + debug: 4.4.3 execa: 4.1.0 fs-extra: 9.1.0 resolve: 1.22.10 rsvp: 4.8.5 - semver: 7.6.3 + semver: 7.8.5 stagehand: 1.0.1 walk-sync: 2.2.0 transitivePeerDependencies: @@ -11367,6 +11985,28 @@ snapshots: ember-disable-prototype-extensions@1.1.3: {} + ember-eslint-parser@0.14.6(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(typescript@4.9.5): + dependencies: + '@glimmer/syntax': 0.95.0 + '@typescript-eslint/tsconfig-utils': 8.68.0(typescript@4.9.5) + content-tag: 4.2.0 + ember-estree: 0.6.11 + eslint-scope: 9.1.2 + html-tags: 5.1.0 + mathml-tag-names: 4.0.0 + svg-tags: 1.0.0 + optionalDependencies: + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + transitivePeerDependencies: + - typescript + + ember-estree@0.6.11: + dependencies: + '@glimmer/env': 0.1.7 + '@glimmer/syntax': 0.95.0 + content-tag: 4.2.0 + oxc-parser: 0.130.0 + ember-export-application-global@2.0.1: {} ember-flatpickr@3.2.3(@babel/core@7.26.0)(@glint/template@1.5.1)(ember-source@3.28.12(@babel/core@7.26.0)): @@ -11686,10 +12326,10 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 - enquirer@2.4.1: + enhanced-resolve@5.24.5: dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 + graceful-fs: 4.2.11 + tapable: 2.3.3 ensure-posix-path@1.1.1: {} @@ -11800,55 +12440,117 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.2(eslint@7.32.0): + eslint-compat-utils@0.5.1(eslint@10.9.1): + dependencies: + eslint: 10.9.1 + semver: 7.8.5 + + eslint-config-prettier@10.1.8(eslint@10.9.1): + dependencies: + eslint: 10.9.1 + + eslint-config-prettier@9.1.2(eslint@10.9.1): dependencies: - eslint: 7.32.0 + eslint: 10.9.1 - eslint-plugin-ember@10.6.1(eslint@7.32.0): + eslint-plugin-ember@10.6.1(eslint@10.9.1): dependencies: '@ember-data/rfc395-data': 0.0.4 css-tree: 2.3.1 ember-rfc176-data: 0.3.18 - eslint: 7.32.0 - eslint-utils: 3.0.0(eslint@7.32.0) + eslint: 10.9.1 + eslint-utils: 3.0.0(eslint@10.9.1) estraverse: 5.3.0 lodash.kebabcase: 4.1.1 requireindex: 1.2.0 snake-case: 3.0.4 - eslint-plugin-es@3.0.1(eslint@7.32.0): + eslint-plugin-ember@13.5.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(eslint@10.9.1)(typescript@4.9.5): dependencies: - eslint: 7.32.0 + '@ember-data/rfc395-data': 0.0.4 + aria-query: 5.3.2 + axobject-query: 4.1.0 + css-tree: 3.2.1 + editorconfig: 3.0.2 + ember-eslint-parser: 0.14.6(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(typescript@4.9.5) + ember-rfc176-data: 0.3.18 + eslint: 10.9.1 + eslint-utils: 3.0.0(eslint@10.9.1) + estraverse: 5.3.0 + html-tags: 3.3.1 + language-tags: 1.0.9 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + mathml-tag-names: 4.0.0 + requireindex: 1.2.0 + snake-case: 3.0.4 + svg-tags: 1.0.0 + optionalDependencies: + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + transitivePeerDependencies: + - '@babel/eslint-parser' + - typescript + + eslint-plugin-es-x@7.8.0(eslint@10.9.1): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1) + '@eslint-community/regexpp': 4.12.2 + eslint: 10.9.1 + eslint-compat-utils: 0.5.1(eslint@10.9.1) + + eslint-plugin-es@3.0.1(eslint@10.9.1): + dependencies: + eslint: 10.9.1 eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-node@11.1.0(eslint@7.32.0): + eslint-plugin-n@18.3.0(eslint@10.9.1)(typescript@4.9.5): dependencies: - eslint: 7.32.0 - eslint-plugin-es: 3.0.1(eslint@7.32.0) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1) + enhanced-resolve: 5.24.5 + eslint: 10.9.1 + eslint-plugin-es-x: 7.8.0(eslint@10.9.1) + get-tsconfig: 4.14.3 + globals: 15.15.0 + globrex: 0.1.2 + ignore: 5.3.2 + semver: 7.8.5 + optionalDependencies: + typescript: 4.9.5 + + eslint-plugin-node@11.1.0(eslint@10.9.1): + dependencies: + eslint: 10.9.1 + eslint-plugin-es: 3.0.1(eslint@10.9.1) eslint-utils: 2.1.0 ignore: 5.3.2 minimatch: 3.1.2 resolve: 1.22.10 semver: 6.3.1 - eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@7.32.0))(eslint@7.32.0)(prettier@3.8.4): + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@10.9.1))(eslint@10.9.1)(prettier@3.8.4): dependencies: - eslint: 7.32.0 + eslint: 10.9.1 prettier: 3.8.4 prettier-linter-helpers: 1.0.1 synckit: 0.11.13 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.2(eslint@7.32.0) + eslint-config-prettier: 9.1.2(eslint@10.9.1) - eslint-plugin-qunit@6.2.0(eslint@7.32.0): + eslint-plugin-qunit@6.2.0(eslint@10.9.1): dependencies: - eslint-utils: 3.0.0(eslint@7.32.0) + eslint-utils: 3.0.0(eslint@10.9.1) requireindex: 1.2.0 transitivePeerDependencies: - eslint + eslint-plugin-qunit@8.2.6(eslint@10.9.1): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1) + eslint: 10.9.1 + requireindex: 1.2.0 + eslint-scope@4.0.3: dependencies: esrecurse: 4.3.0 @@ -11859,13 +12561,20 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-utils@2.1.0: dependencies: eslint-visitor-keys: 1.3.0 - eslint-utils@3.0.0(eslint@7.32.0): + eslint-utils@3.0.0(eslint@10.9.1): dependencies: - eslint: 7.32.0 + eslint: 10.9.1 eslint-visitor-keys: 2.1.0 eslint-visitor-keys@1.3.0: {} @@ -11874,64 +12583,56 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@7.32.0: - dependencies: - '@babel/code-frame': 7.12.11 - '@eslint/eslintrc': 0.4.3 - '@humanwhocodes/config-array': 0.5.0 - ajv: 6.12.6 - chalk: 4.1.2 + eslint-visitor-keys@5.0.1: {} + + eslint@10.9.1: + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@10.9.1) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.7.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.0 - doctrine: 3.0.0 - enquirer: 2.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 5.1.1 - eslint-utils: 2.1.0 - eslint-visitor-keys: 2.1.0 - espree: 7.3.1 - esquery: 1.6.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 - globals: 13.24.0 - ignore: 4.0.6 - import-fresh: 3.3.0 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - js-yaml: 3.14.1 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.6 natural-compare: 1.4.0 optionator: 0.9.4 - progress: 2.0.3 - regexpp: 3.2.0 - semver: 7.6.3 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - table: 6.9.0 - text-table: 0.2.0 - v8-compile-cache: 2.4.0 transitivePeerDependencies: - supports-color esm@3.2.25: {} - espree@7.3.1: + espree@11.2.0: dependencies: - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - eslint-visitor-keys: 1.3.0 + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + eslint-visitor-keys: 5.0.1 esprima@3.0.0: {} esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -12146,6 +12847,10 @@ snapshots: dependencies: bser: 2.1.1 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + figgy-pudding@3.5.2: {} figures@2.0.0: @@ -12156,9 +12861,9 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 file-uri-to-path@1.0.0: optional: true @@ -12288,11 +12993,10 @@ snapshots: matcher-collection: 2.0.1 walk-sync: 2.2.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.2 keyv: 4.5.4 - rimraf: 3.0.2 flatpickr@4.6.13: {} @@ -12442,8 +13146,6 @@ snapshots: hasown: 2.0.2 is-callable: 1.2.7 - functional-red-black-tree@1.0.1: {} - functions-have-names@1.2.3: {} fuse.js@6.6.2: {} @@ -12503,6 +13205,10 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.7 + get-tsconfig@4.14.3: + dependencies: + resolve-pkg-maps: 1.0.0 + get-value@2.0.6: {} git-hooks-list@1.0.3: {} @@ -12519,6 +13225,10 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} glob@5.0.15: @@ -12561,9 +13271,9 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@15.15.0: {} + + globals@17.11.0: {} globals@9.18.0: {} @@ -12749,6 +13459,10 @@ snapshots: html-escaper@2.0.2: {} + html-tags@3.3.1: {} + + html-tags@5.1.0: {} + http-cache-semantics@4.2.0: {} http-errors@1.6.3: @@ -12796,18 +13510,13 @@ snapshots: iferr@0.1.5: {} - ignore@4.0.6: {} - ignore@5.3.2: {} + ignore@7.0.7: {} + image-size@0.5.5: optional: true - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - imurmurhash@0.1.4: {} include-path-searcher@0.1.0: {} @@ -13250,6 +13959,12 @@ snapshots: kind-of@6.0.3: {} + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + leek@0.0.24: dependencies: debug: 2.6.9 @@ -13374,6 +14089,8 @@ snapshots: lodash._createassigner: 3.1.1 lodash.keys: 3.1.2 + lodash.camelcase@4.3.0: {} + lodash.debounce@3.1.1: dependencies: lodash._getnative: 3.9.1 @@ -13416,8 +14133,6 @@ snapshots: dependencies: lodash._reinterpolate: 3.0.0 - lodash.truncate@4.4.2: {} - lodash.uniq@4.5.0: {} lodash@4.17.21: {} @@ -13515,6 +14230,8 @@ snapshots: math-intrinsics@1.1.0: {} + mathml-tag-names@4.0.0: {} + md5.js@1.3.5: dependencies: hash-base: 3.0.5 @@ -13523,6 +14240,8 @@ snapshots: mdn-data@2.0.30: {} + mdn-data@2.27.1: {} + mdurl@1.0.1: {} media-typer@0.3.0: {} @@ -13623,13 +14342,17 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.9 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 minimatch@8.0.4: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.1.1 minimatch@9.0.9: dependencies: @@ -13964,6 +14687,31 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + oxc-parser@0.130.0: + dependencies: + '@oxc-project/types': 0.130.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.130.0 + '@oxc-parser/binding-android-arm64': 0.130.0 + '@oxc-parser/binding-darwin-arm64': 0.130.0 + '@oxc-parser/binding-darwin-x64': 0.130.0 + '@oxc-parser/binding-freebsd-x64': 0.130.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.130.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.130.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.130.0 + '@oxc-parser/binding-linux-arm64-musl': 0.130.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.130.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.130.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.130.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.130.0 + '@oxc-parser/binding-linux-x64-gnu': 0.130.0 + '@oxc-parser/binding-linux-x64-musl': 0.130.0 + '@oxc-parser/binding-openharmony-arm64': 0.130.0 + '@oxc-parser/binding-wasm32-wasi': 0.130.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.130.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.130.0 + '@oxc-parser/binding-win32-x64-msvc': 0.130.0 + p-cancelable@1.1.0: {} p-defer@3.0.0: {} @@ -14019,10 +14767,6 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - parse-asn1@5.1.7: dependencies: asn1.js: 4.10.1 @@ -14107,6 +14851,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.7: {} + pidtree@0.3.1: {} pify@3.0.0: {} @@ -14205,8 +14951,6 @@ snapshots: process@0.11.10: {} - progress@2.0.3: {} - promise-inflight@1.0.1(bluebird@3.7.2): optionalDependencies: bluebird: 3.7.2 @@ -14489,8 +15233,6 @@ snapshots: expand-tilde: 2.0.2 global-modules: 1.0.0 - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} resolve-package-path@1.2.7: @@ -14517,6 +15259,8 @@ snapshots: http-errors: 1.6.3 path-is-absolute: 1.0.1 + resolve-pkg-maps@1.0.0: {} + resolve-url@0.2.1: {} resolve@1.22.10: @@ -14656,6 +15400,8 @@ snapshots: semver@7.6.3: {} + semver@7.8.5: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -14800,12 +15546,6 @@ snapshots: slash@3.0.0: {} - slice-ansi@4.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -15070,8 +15810,6 @@ snapshots: strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} - style-loader@2.0.0(webpack@5.97.1): dependencies: loader-utils: 2.0.4 @@ -15100,6 +15838,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svg-tags@1.0.0: {} + symlink-or-copy@1.3.1: {} sync-disk-cache@1.3.4: @@ -15114,7 +15854,7 @@ snapshots: sync-disk-cache@2.1.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 heimdalljs: 0.2.6 mkdirp: 0.5.6 rimraf: 3.0.2 @@ -15126,14 +15866,6 @@ snapshots: dependencies: '@pkgr/core': 0.3.6 - table@6.9.0: - dependencies: - ajv: 8.17.1 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - tap-parser@7.0.0: dependencies: events-to-array: 1.1.2 @@ -15144,6 +15876,8 @@ snapshots: tapable@2.2.1: {} + tapable@2.3.3: {} + temp-dir@2.0.0: {} temp@0.9.4: @@ -15279,8 +16013,6 @@ snapshots: tether@1.4.7: {} - text-table@0.2.0: {} - textextensions@2.6.0: {} through2@2.0.5: @@ -15315,6 +16047,11 @@ snapshots: transitivePeerDependencies: - supports-color + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + tmp@0.0.28: dependencies: os-tmpdir: 1.0.2 @@ -15383,15 +16120,14 @@ snapshots: trim-right@1.0.1: {} + ts-api-utils@2.5.0(typescript@4.9.5): + dependencies: + typescript: 4.9.5 + tslib@1.14.1: {} tslib@2.8.1: {} - tsutils@3.21.0(typescript@4.9.5): - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - tty-browserify@0.0.0: {} type-check@0.4.0: @@ -15404,10 +16140,10 @@ snapshots: type-fest@0.11.0: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} + type-fest@4.41.0: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -15452,6 +16188,17 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@8.68.0(eslint@10.9.1)(typescript@4.9.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.68.0(@typescript-eslint/parser@8.68.0(eslint@10.9.1)(typescript@4.9.5))(eslint@10.9.1)(typescript@4.9.5) + '@typescript-eslint/parser': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.68.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.68.0(eslint@10.9.1)(typescript@4.9.5) + eslint: 10.9.1 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + typescript-memoize@1.1.1: {} typescript@4.9.5: {} diff --git a/tests/dummy/app/controllers/application.ts b/tests/dummy/app/controllers/application.ts index dd9f308f..a3ab69e2 100644 --- a/tests/dummy/app/controllers/application.ts +++ b/tests/dummy/app/controllers/application.ts @@ -43,7 +43,7 @@ const columns = [ ]; const buildColumnDefinition = (key: string, extra: { [key: string]: any }): ColumnDefinition => { - let defaultColumnDefinition = { + const defaultColumnDefinition = { key: key, type: 'text', name: `Name: ${key}`, @@ -97,8 +97,7 @@ class Manager implements TableManager { } class RowsFetcher { - // @ts-ignore - fetch(page: number, perPage: number) { + fetch(_page: number, _perPage: number) { return Promise.resolve({ rows: [ { @@ -220,8 +219,8 @@ export default class Application extends Controller { rowsFetcher = new RowsFetcher(); handler = new TableHandler(this, this.tableManager, this.rowsFetcher); - init() { - super.init(); + constructor(...args: ConstructorParameters) { + super(...args); this.handler.on('row-click', (row) => { console.log(row); diff --git a/tests/integration/components/hyper-table-v2-test.ts b/tests/integration/components/hyper-table-v2-test.ts index eec3ae9b..47bfcbd1 100644 --- a/tests/integration/components/hyper-table-v2-test.ts +++ b/tests/integration/components/hyper-table-v2-test.ts @@ -24,9 +24,9 @@ module('Integration | Component | hyper-table-v2', function (hooks) { await render(hbs``); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.fetchColumns.calledOnce); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.fetchRows.calledOnce); }); @@ -350,7 +350,7 @@ module('Integration | Component | hyper-table-v2', function (hooks) { assert.dom('.upf-checkbox').exists({ count: 4 }); }); - test('the selection column is present when the feature is enabled', async function (assert: Assert) { + test('the selection column selected count is present when the feature is enabled', async function (assert: Assert) { await render(hbs``); assert.dom('.selected-count').exists(); @@ -436,7 +436,7 @@ module('Integration | Component | hyper-table-v2', function (hooks) { await click('.hypertable__column.hypertable__column--selection header .upf-checkbox'); const countText = document.querySelector('.selection-container .count-container span')?.innerHTML; - assert.equal( + assert.strictEqual( this.intlService.t('hypertable.selection.all_records_selected', { count: this.handler.rowsMeta.total }), countText ); @@ -568,18 +568,18 @@ module('Integration | Component | hyper-table-v2', function (hooks) { await click('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox'); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.updateSelection.calledWithExactly(this.handler.rows[0])); - assert.equal(this.handler.selection.length, 1); + assert.strictEqual(this.handler.selection.length, 1); assert.ok(this.handler.selection.includes(this.handler.rows[0])); assert.dom('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox input').isChecked(); assert.dom('.selected-count').hasText('1'); await click('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox'); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.updateSelection.calledWithExactly(this.handler.rows[0])); - assert.equal(this.handler.selection.length, 0); + assert.strictEqual(this.handler.selection.length, 0); assert .dom('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox input') .isNotChecked(); @@ -596,14 +596,13 @@ module('Integration | Component | hyper-table-v2', function (hooks) { assert.deepEqual(this.handler.selection, []); await click('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox'); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.updateSelection.calledWithExactly(this.handler.rows[0])); - assert.equal(this.handler.selection.length, 1); + assert.strictEqual(this.handler.selection.length, 1); await click('.hypertable__column.hypertable__column--selection .hypertable__cell:last-child .upf-checkbox'); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.updateSelection.calledWithExactly(this.handler.rows[1])); - // await this.pauseTest(); - assert.equal(this.handler.selection, 'all'); + assert.strictEqual(this.handler.selection, 'all'); }); test('clicking on one multiline checkbox toggles its exclusion status', async function (this: TestContext, assert: Assert) { @@ -616,9 +615,9 @@ module('Integration | Component | hyper-table-v2', function (hooks) { await click('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox'); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.updateExclusion.calledWithExactly(this.handler.rows[0])); - assert.equal(this.handler.exclusion.length, 1); + assert.strictEqual(this.handler.exclusion.length, 1); assert.ok(this.handler.exclusion.includes(this.handler.rows[0])); assert .dom('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox input') @@ -627,9 +626,9 @@ module('Integration | Component | hyper-table-v2', function (hooks) { await click('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox'); - // @ts-ignore + // @ts-expect-error - handlerSpy not typed assert.ok(handlerSpy.updateExclusion.calledWithExactly(this.handler.rows[0])); - assert.equal(this.handler.exclusion.length, 0); + assert.strictEqual(this.handler.exclusion.length, 0); assert.dom('.hypertable__column.hypertable__column--selection .hypertable__cell .upf-checkbox input').isChecked(); assert.dom('.selected-count').hasText('12'); }); diff --git a/tests/integration/components/hyper-table-v2/cell-renderers/date-test.ts b/tests/integration/components/hyper-table-v2/cell-renderers/date-test.ts index 32af9be1..965a05f6 100644 --- a/tests/integration/components/hyper-table-v2/cell-renderers/date-test.ts +++ b/tests/integration/components/hyper-table-v2/cell-renderers/date-test.ts @@ -29,8 +29,8 @@ module('Integration | Component | hyper-table-v2/cell-renderers/date', function hbs`` ); - assert.equal(this.column.definition.key, 'date'); - assert.equal(this.row[this.column.definition.key], '1643386394'); + assert.strictEqual(this.column.definition.key, 'date'); + assert.strictEqual(this.row[this.column.definition.key], 1643386394); assert.dom().hasText(moment.unix(this.row[this.column.definition.key]).format(DEFAULT_DATE_FORMAT)); }); @@ -42,8 +42,8 @@ module('Integration | Component | hyper-table-v2/cell-renderers/date', function hbs`` ); - assert.equal(this.column.definition.key, 'date'); - assert.equal(this.row[this.column.definition.key], '0'); + assert.strictEqual(this.column.definition.key, 'date'); + assert.strictEqual(this.row[this.column.definition.key], 0); assert.dom().hasText('—'); }); diff --git a/tests/integration/components/hyper-table-v2/cell-renderers/numeric-test.ts b/tests/integration/components/hyper-table-v2/cell-renderers/numeric-test.ts index 78ddc6d7..94c9a323 100644 --- a/tests/integration/components/hyper-table-v2/cell-renderers/numeric-test.ts +++ b/tests/integration/components/hyper-table-v2/cell-renderers/numeric-test.ts @@ -27,8 +27,8 @@ module('Integration | Component | hyper-table-v2/cell-renderers/numeric', functi hbs`` ); - assert.equal(this.column.definition.key, 'total'); - assert.equal(this.row[this.column.definition.key], '123'); + assert.strictEqual(this.column.definition.key, 'total'); + assert.strictEqual(this.row[this.column.definition.key], 123); assert.dom().hasText('123'); }); @@ -40,8 +40,8 @@ module('Integration | Component | hyper-table-v2/cell-renderers/numeric', functi hbs`` ); - assert.equal(this.column.definition.key, 'total'); - assert.equal(this.row[this.column.definition.key], '123123'); + assert.strictEqual(this.column.definition.key, 'total'); + assert.strictEqual(this.row[this.column.definition.key], 123123); assert.dom().hasText('123k'); }); diff --git a/tests/integration/components/hyper-table-v2/cell-renderers/text-test.ts b/tests/integration/components/hyper-table-v2/cell-renderers/text-test.ts index 43925375..52e039a9 100644 --- a/tests/integration/components/hyper-table-v2/cell-renderers/text-test.ts +++ b/tests/integration/components/hyper-table-v2/cell-renderers/text-test.ts @@ -27,8 +27,8 @@ module('Integration | Component | hyper-table-v2/cell-renderers/text', function hbs`` ); - assert.equal(this.column.definition.key, 'foo'); - assert.equal(this.row[this.column.definition.key], 'ekip'); + assert.strictEqual(this.column.definition.key, 'foo'); + assert.strictEqual(this.row[this.column.definition.key], 'ekip'); assert.dom('span').hasText('ekip'); }); diff --git a/tests/integration/components/hyper-table-v2/cell-test.ts b/tests/integration/components/hyper-table-v2/cell-test.ts index c6e73f28..659379da 100644 --- a/tests/integration/components/hyper-table-v2/cell-test.ts +++ b/tests/integration/components/hyper-table-v2/cell-test.ts @@ -34,7 +34,7 @@ module('Integration | Component | hyper-table-v2/cell', function (hooks) { await render(hbs``); - // @ts-ignore + // @ts-expect-error - renderingResolverSpy not typed assert.ok(renderingResolverSpy.lookupCellComponent.calledOnceWithExactly(this.column.definition)); assert.dom('.hypertable__cell').hasText('ekip'); }); diff --git a/tests/integration/components/hyper-table-v2/column-test.ts b/tests/integration/components/hyper-table-v2/column-test.ts index 14db0353..81a7827c 100644 --- a/tests/integration/components/hyper-table-v2/column-test.ts +++ b/tests/integration/components/hyper-table-v2/column-test.ts @@ -34,12 +34,12 @@ module('Integration | Component | hyper-table-v2/column', function (hooks) { test('it has the right size class', async function (this: TestContext, assert: Assert) { await render(hbs``); - assert.equal(this.column.definition.size, 'M'); + assert.strictEqual(this.column.definition.size, 'M'); assert.dom('.hypertable__column').hasClass('hypertable__column--size-M'); this.set('column', this.handler.columns[1]); - assert.equal(this.column.definition.size, 'L'); + assert.strictEqual(this.column.definition.size, 'L'); assert.dom('.hypertable__column').hasClass('hypertable__column--size-L'); }); @@ -115,7 +115,6 @@ module('Integration | Component | hyper-table-v2/column', function (hooks) { test('it renders the correct tooltip for the double arrow icon', async function (this: TestContext, assert: Assert) { await render(hbs``); - // @ts-ignore await assert.tooltip('.order-command').hasTitle('Order'); }); @@ -150,7 +149,6 @@ module('Integration | Component | hyper-table-v2/column', function (hooks) { test('it renders the correct tooltip', async function (this: TestContext, assert: Assert) { await render(hbs``); - // @ts-ignore await assert.tooltip('.filter-command').hasTitle('Filters'); }); diff --git a/tests/integration/components/hyper-table-v2/filtering-renderers/common/existence-test.ts b/tests/integration/components/hyper-table-v2/filtering-renderers/common/existence-test.ts index fb3762a6..5f695b36 100644 --- a/tests/integration/components/hyper-table-v2/filtering-renderers/common/existence-test.ts +++ b/tests/integration/components/hyper-table-v2/filtering-renderers/common/existence-test.ts @@ -29,6 +29,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/exis await this.handler.fetchColumns(); this.column = this.handler.columns[0]; + this.applyFiltersSpy = sinon.spy(this.handler, 'applyFilters'); }); test('it renders', async function (assert: Assert) { @@ -39,33 +40,27 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/exis }); test('clicking on the buttons should trigger the applyFilters method', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); await render( hbs`` ); await click('.fx-row:first-child .oss-radio-btn'); - // @ts-ignore - assert.ok(handlerSpy.applyFilters.calledWith(this.column, [{ key: 'existence', value: 'with' }])); + assert.ok(this.applyFiltersSpy.calledWith(this.column, [{ key: 'existence', value: 'with' }])); await click('.fx-row:last-child .oss-radio-btn'); - // @ts-ignore - assert.ok(handlerSpy.applyFilters.calledWith(this.column, [{ key: 'existence', value: 'without' }])); + assert.ok(this.applyFiltersSpy.calledWith(this.column, [{ key: 'existence', value: 'without' }])); }); test('cliking on the buttons should trigger the applyFilters method with a custom filtering key', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); await render( hbs`` ); await click('.fx-row:first-child .oss-radio-btn'); - // @ts-ignore - assert.ok(handlerSpy.applyFilters.calledWith(this.column, [{ key: 'bozo', value: 'with' }])); + assert.ok(this.applyFiltersSpy.calledWith(this.column, [{ key: 'bozo', value: 'with' }])); await click('.fx-row:last-child .oss-radio-btn'); - // @ts-ignore - assert.ok(handlerSpy.applyFilters.calledWith(this.column, [{ key: 'bozo', value: 'without' }])); + assert.ok(this.applyFiltersSpy.calledWith(this.column, [{ key: 'bozo', value: 'without' }])); }); test('The component should select the proper radiobutton when rendered with a pre-applied filter', async function (this: TestContext, assert: Assert) { diff --git a/tests/integration/components/hyper-table-v2/filtering-renderers/common/facets-loader-test.ts b/tests/integration/components/hyper-table-v2/filtering-renderers/common/facets-loader-test.ts index 992f86d9..6b40725a 100644 --- a/tests/integration/components/hyper-table-v2/filtering-renderers/common/facets-loader-test.ts +++ b/tests/integration/components/hyper-table-v2/filtering-renderers/common/facets-loader-test.ts @@ -73,7 +73,7 @@ module('Integration | Component | hyper-table-v2/facets-loader', function (hooks module('facet toggling', function () { test('the selected facet is added to the filters if not already present', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); + const applyFiltersSpy = sinon.spy(this.handler, 'applyFilters'); await render( hbs`` @@ -82,21 +82,19 @@ module('Integration | Component | hyper-table-v2/facets-loader', function (hooks assert.dom('.hypertable__facetting .item .upf-checkbox input').isNotChecked(); await click('.hypertable__facetting .item'); assert.dom('.hypertable__facetting .item .upf-checkbox input').isChecked(); - //@ts-ignore - assert.ok(handlerSpy.applyFilters.calledWithExactly(this.column, [{ key: 'value', value: 'band:1' }])); + assert.ok(applyFiltersSpy.calledWithExactly(this.column, [{ key: 'value', value: 'band:1' }])); }); test('the facet is deleted from the filters if already present', async function (this: TestContext, assert: Assert) { this.column.filters = [{ key: 'value', value: 'band:1' }]; - const handlerSpy = sinon.spy(this.handler); + const applyFiltersSpy = sinon.spy(this.handler, 'applyFilters'); await render( hbs`` ); assert.dom('.hypertable__facetting .item .upf-checkbox input').isChecked(); await click('.hypertable__facetting .item'); - //@ts-ignore - assert.ok(handlerSpy.applyFilters.calledWithExactly(this.column, [{ key: 'value', value: '' }])); + assert.ok(applyFiltersSpy.calledWithExactly(this.column, [{ key: 'value', value: '' }])); }); test('facet identifiers that are already in the column are checked by default when rendering', async function (this: TestContext, assert: Assert) { @@ -148,7 +146,7 @@ module('Integration | Component | hyper-table-v2/facets-loader', function (hooks }); test('facets are fetched with the typed keyword when searching', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); + const fetchFacetsSpy = sinon.spy(this.handler, 'fetchFacets'); await render( hbs`` @@ -159,12 +157,11 @@ module('Integration | Component | hyper-table-v2/facets-loader', function (hooks '.oss-input-container input', 'keyup', 'Enter', - //@ts-ignore + //@ts-expect-error - code does not exist on triggerKeyEvent { code: 'Enter' } ); - //@ts-ignore - assert.ok(handlerSpy.fetchFacets.calledWithExactly(this.column.definition.key, 'value', 'test')); + assert.ok(fetchFacetsSpy.calledWithExactly(this.column.definition.key, 'value', 'test')); }); }); diff --git a/tests/integration/components/hyper-table-v2/filtering-renderers/common/ordering-test.ts b/tests/integration/components/hyper-table-v2/filtering-renderers/common/ordering-test.ts index ffbed3d5..b7b816dd 100644 --- a/tests/integration/components/hyper-table-v2/filtering-renderers/common/ordering-test.ts +++ b/tests/integration/components/hyper-table-v2/filtering-renderers/common/ordering-test.ts @@ -64,24 +64,22 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/orde }); test('it calls the Handler#applyOrder method correctly via the radio buttons', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); + const applyOrderSpy = sinon.spy(this.handler, 'applyOrder'); await render( hbs`` ); - assert.equal(this.column.order, undefined); + assert.strictEqual(this.column.order, undefined); await click('.oss-toggle-buttons-container .oss-toggle-buttons-btn:nth-child(1)'); - //@ts-ignore - assert.ok(handlerSpy.applyOrder.calledWith(this.column, 'asc')); + assert.ok(applyOrderSpy.calledWith(this.column, 'asc')); assert.deepEqual(this.column.order, { direction: 'asc', key: 'date' }); await click('.oss-toggle-buttons-container .oss-toggle-buttons-btn:nth-child(2)'); - //@ts-ignore - assert.ok(handlerSpy.applyOrder.calledWith(this.column, 'desc')); + assert.ok(applyOrderSpy.calledWith(this.column, 'desc')); assert.deepEqual(this.column.order, { direction: 'desc', key: 'date' diff --git a/tests/integration/components/hyper-table-v2/filtering-renderers/common/search-test.ts b/tests/integration/components/hyper-table-v2/filtering-renderers/common/search-test.ts index 11aa2b5c..6bee53cf 100644 --- a/tests/integration/components/hyper-table-v2/filtering-renderers/common/search-test.ts +++ b/tests/integration/components/hyper-table-v2/filtering-renderers/common/search-test.ts @@ -30,6 +30,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/sear await this.handler.fetchColumns(); this.column = this.handler.columns[0]; + this.applyFiltersSpy = sinon.spy(this.handler, 'applyFilters'); }); test('it has the right data-control-name', async function (assert: Assert) { @@ -40,7 +41,6 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/sear }); test('When text is inputted, the applyFilters is called', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); await render( hbs`` ); @@ -50,13 +50,12 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/sear '.oss-input-container input', 'keyup', 'Enter', - //@ts-ignore + //@ts-expect-error - code does not exist on triggerKeyEvent { code: 'Enter' } ); assert.ok( - //@ts-ignore - handlerSpy.applyFilters.calledWith(this.column, [ + this.applyFiltersSpy.calledWith(this.column, [ { key: 'value', value: 'test' @@ -66,7 +65,6 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/sear }); test('the provided filter key is used when apply filters', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); await render( hbs`` ); @@ -76,13 +74,12 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/sear '.oss-input-container input', 'keyup', 'Enter', - //@ts-ignore + //@ts-expect-error - code does not exist on triggerKeyEvent { code: 'Enter' } ); assert.ok( - //@ts-ignore - handlerSpy.applyFilters.calledWith(this.column, [ + this.applyFiltersSpy.calledWith(this.column, [ { key: 'foobar', value: 'test' @@ -109,7 +106,6 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/sear }); test('When the remove icon is clicked, the text input is cleared, #handler.applyFilters is triggered', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); await render( hbs`` ); @@ -117,8 +113,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/common/sear await fillIn('.oss-input-container input', 'test'); await click('.oss-input-container .suffix .fa-times'); assert.ok( - //@ts-ignore - handlerSpy.applyFilters.calledWith(this.column, [ + this.applyFiltersSpy.calledWith(this.column, [ { key: 'value', value: '' diff --git a/tests/integration/components/hyper-table-v2/filtering-renderers/date-test.ts b/tests/integration/components/hyper-table-v2/filtering-renderers/date-test.ts index 239f6b80..cbaf1008 100644 --- a/tests/integration/components/hyper-table-v2/filtering-renderers/date-test.ts +++ b/tests/integration/components/hyper-table-v2/filtering-renderers/date-test.ts @@ -55,7 +55,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/date', func hbs`` ); - assert.equal(this.column.order, undefined); + assert.strictEqual(this.column.order, undefined); await click( '[data-control-name="hypertable__column_filtering_for_date_ordering"] .oss-toggle-buttons-btn:nth-child(1)' ); @@ -101,8 +101,8 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/date', func await click( 'div[data-control-name="hypertable__column_filtering_for_date_filter_by_radiogroup"] .oss-toggle-buttons-btn:nth-child(1)' ); - let filterOptions = findAll('.filters__option'); - assert.equal(filterOptions.length, 6); + const filterOptions = findAll('.filters__option'); + assert.strictEqual(filterOptions.length, 6); assert.dom(filterOptions[0]).hasText('Today'); assert.dom(filterOptions[1]).hasText('Yesterday'); assert.dom(filterOptions[2]).hasText('This Week'); @@ -112,8 +112,8 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/date', func }); test('when the filter is set to Moving, when clicking on a filter option, applyFilter is triggered with the proper timezone in the filter extras', async function (this: TestContext, assert: Assert) { - let intlTimezoneStub = sinon.stub(Intl, 'DateTimeFormat').returns({ - // @ts-ignore + const intlTimezoneStub = sinon.stub(Intl, 'DateTimeFormat').returns({ + // @ts-expect-error - incorrect type resolvedOptions: () => { return { timeZone: 'Africa/Atlantis' }; } @@ -156,9 +156,9 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/date', func (filter: any) => filter.key === 'upper_bound' )?.value; const dateSetInFilters = new Date(timestampSetInFilters * 1000); - assert.true(dateSetInFilters.getHours() === 23); - assert.true(dateSetInFilters.getMinutes() === 59); - assert.true(dateSetInFilters.getSeconds() === 59); + assert.strictEqual(dateSetInFilters.getHours(), 23); + assert.strictEqual(dateSetInFilters.getMinutes(), 59); + assert.strictEqual(dateSetInFilters.getSeconds(), 59); }); test('clicking in the flatpickr input should open flatpickr', async function (assert: Assert) { @@ -173,7 +173,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/date', func }); }); - module('clear column', async function () { + module('clear column', function () { test('it calls the Handler#resetColumns with the column when the dedicated button is clicked', async function (this: TestContext, assert: Assert) { this.handler.applyFilters(this.column, [{ key: 'moving', value: 'today' }]); this.handler.applyOrder(this.column, 'asc'); @@ -182,7 +182,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/date', func await click('[data-control-name="hypertable__column_filtering_for_date_clear_filters"]'); assert.ok(this.handlerSpy.resetColumns.calledWith([this.column])); - assert.equal(this.column.order, undefined); + assert.strictEqual(this.column.order, undefined); assert.deepEqual(this.column.filters, []); }); }); diff --git a/tests/integration/components/hyper-table-v2/filtering-renderers/numeric-test.ts b/tests/integration/components/hyper-table-v2/filtering-renderers/numeric-test.ts index a0135a70..d936bd29 100644 --- a/tests/integration/components/hyper-table-v2/filtering-renderers/numeric-test.ts +++ b/tests/integration/components/hyper-table-v2/filtering-renderers/numeric-test.ts @@ -65,7 +65,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/numeric', f hbs`` ); - assert.equal(this.column.order, undefined); + assert.strictEqual(this.column.order, undefined); await click( 'div[data-control-name="hypertable__column_filtering_for_total_ordering"] .oss-toggle-buttons-btn:nth-child(1)' ); @@ -180,7 +180,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/numeric', f '[data-control-name="hypertable__column_filtering_for_total_range_from"]', 'keydown', 'Enter', - //@ts-ignore + //@ts-expect-error - code does not exist on triggerKeyEvent { code: 'Enter' } ); assert.ok( @@ -195,7 +195,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/numeric', f '[data-control-name="hypertable__column_filtering_for_total_range_to"]', 'keydown', 'Enter', - //@ts-ignore + //@ts-expect-error - code does not exist on triggerKeyEvent { code: 'Enter' } ); @@ -257,7 +257,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/numeric', f }); }); - module('clear column', async function () { + module('clear column', function () { test('it calls the Handler#resetColumns with the column when the dedicated button is clicked', async function (this: TestContext, assert: Assert) { const handlerSpy = sinon.spy(this.handler as TableHandler); this.handler.applyFilters(this.column, [{ key: 'lower_bound', value: '10' }]); @@ -269,7 +269,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/numeric', f await click('[data-control-name="hypertable__column_filtering_for_total_clear_filters"]'); assert.ok(handlerSpy.resetColumns.calledWith([this.column])); - assert.equal(this.column.order, undefined); + assert.strictEqual(this.column.order, undefined); assert.deepEqual(this.column.filters, []); }); }); diff --git a/tests/integration/components/hyper-table-v2/filtering-renderers/text-test.ts b/tests/integration/components/hyper-table-v2/filtering-renderers/text-test.ts index 9058a7b4..4f454a01 100644 --- a/tests/integration/components/hyper-table-v2/filtering-renderers/text-test.ts +++ b/tests/integration/components/hyper-table-v2/filtering-renderers/text-test.ts @@ -56,16 +56,15 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/text', func }); test('it calls the Handler#applyOrder method correctly via the radio buttons', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); + const applyOrderSpy = sinon.spy(this.handler, 'applyOrder'); await render(hbs``); - assert.equal(this.column.order, undefined); + assert.strictEqual(this.column.order, undefined); await click( 'div[data-control-name="hypertable__column_filtering_for_foo_ordering"] .oss-toggle-buttons-btn:nth-child(1)' ); - //@ts-ignore - assert.ok(handlerSpy.applyOrder.calledWith(this.column, 'asc')); + assert.ok(applyOrderSpy.calledWith(this.column, 'asc')); assert.deepEqual(this.column.order, { direction: 'asc', key: 'foo' @@ -75,8 +74,7 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/text', func 'div[data-control-name="hypertable__column_filtering_for_foo_ordering"] .oss-toggle-buttons-btn:nth-child(2)' ); - //@ts-ignore - assert.ok(handlerSpy.applyOrder.calledWith(this.column, 'desc')); + assert.ok(applyOrderSpy.calledWith(this.column, 'desc')); assert.deepEqual(this.column.order, { direction: 'desc', key: 'foo' @@ -100,31 +98,29 @@ module('Integration | Component | hyper-table-v2/filtering-renderers/text', func }); }); - module('clear column', async function () { + module('clear column', function () { test('it calls the Handler#resetColumns with the column when the dedicated button is clicked', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); + const resetColumnsSpy = sinon.spy(this.handler, 'resetColumns'); this.handler.applyFilters(this.column, [{ key: 'foo', value: 'bar' }]); this.handler.applyOrder(this.column, 'asc'); await render(hbs``); await click('[data-control-name="hypertable__column_filtering_for_foo_clear_filters"]'); - //@ts-ignore - assert.ok(handlerSpy.resetColumns.calledWith([this.column])); - assert.equal(this.column.order, undefined); + assert.ok(resetColumnsSpy.calledWith([this.column])); + assert.strictEqual(this.column.order, undefined); assert.deepEqual(this.column.filters, []); }); }); module('remove column', function () { test('it calls the Handler#removeColumn with the column when the dedicated button is clicked', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); + const removeColumnSpy = sinon.spy(this.handler, 'removeColumn'); await render(hbs``); await click('[data-control-name="hypertable__column_filtering_for_foo_remove_column"]'); - //@ts-ignore - assert.ok(handlerSpy.removeColumn.calledWith(this.column.definition)); + assert.ok(removeColumnSpy.calledWith(this.column.definition)); }); }); }); diff --git a/tests/integration/components/hyper-table-v2/header-renderers/base-test.ts b/tests/integration/components/hyper-table-v2/header-renderers/base-test.ts index 07129209..e25b59a5 100644 --- a/tests/integration/components/hyper-table-v2/header-renderers/base-test.ts +++ b/tests/integration/components/hyper-table-v2/header-renderers/base-test.ts @@ -23,7 +23,7 @@ module('Integration | Component | hyper-table-v2/header-renderers/base', functio await render(hbs``); - assert.equal(this.column.definition.key, 'foo'); + assert.strictEqual(this.column.definition.key, 'foo'); assert.dom().hasText('Name: foo'); }); }); diff --git a/tests/integration/components/hyper-table-v2/manage-columns-test.ts b/tests/integration/components/hyper-table-v2/manage-columns-test.ts index 7f00fd00..74b00963 100644 --- a/tests/integration/components/hyper-table-v2/manage-columns-test.ts +++ b/tests/integration/components/hyper-table-v2/manage-columns-test.ts @@ -101,12 +101,13 @@ module('Integration | Component | hyper-table-v2/manage-columns', function (hook test('it displays all the column definitions for default category', async function (assert) { await render(hbs``); + + assert.expect(7); await click('.upf-btn.upf-btn--default'); - // await this.pauseTest(); document.querySelectorAll('.fields-list .field').forEach((element, index) => { // index + 1 because the first column is not visible - assert.equal( + assert.strictEqual( element.firstElementChild?.getAttribute('data-control-name'), `column_definition_toggle_checkbox_${COLUMN_DEFINITIONS[index + 1].key}` ); @@ -114,10 +115,10 @@ module('Integration | Component | hyper-table-v2/manage-columns', function (hook const clusterNames = document.querySelectorAll('.fields-list .cluster-name'); - assert.equal(clusterNames[0].textContent?.trim(), 'instagram'); - assert.equal(clusterNames[1].textContent?.trim(), 'x'); - assert.equal(clusterNames[2].textContent?.trim(), 'youtube'); - assert.expect(7); + assert.strictEqual(clusterNames[0].textContent?.trim(), 'instagram'); + assert.strictEqual(clusterNames[1].textContent?.trim(), 'x'); + assert.strictEqual(clusterNames[2].textContent?.trim(), 'youtube'); + }); test('it sets the category. as active when user select a category', async function (assert) { @@ -136,18 +137,18 @@ module('Integration | Component | hyper-table-v2/manage-columns', function (hook const columnDefinitionsVisible = document.querySelector('.fields-list')?.children || []; - assert.equal(columnDefinitionsVisible[0].textContent?.trim(), 'instagram'); - assert.equal( + assert.strictEqual(columnDefinitionsVisible[0].textContent?.trim(), 'instagram'); + assert.strictEqual( columnDefinitionsVisible[1].firstElementChild?.getAttribute('data-control-name'), 'column_definition_toggle_checkbox_foo' ); - assert.equal(columnDefinitionsVisible[2].textContent?.trim(), 'x'); - assert.equal( + assert.strictEqual(columnDefinitionsVisible[2].textContent?.trim(), 'x'); + assert.strictEqual( columnDefinitionsVisible[3].firstElementChild?.getAttribute('data-control-name'), 'column_definition_toggle_checkbox_doe' ); - assert.equal(columnDefinitionsVisible[4].textContent?.trim(), 'youtube'); - assert.equal( + assert.strictEqual(columnDefinitionsVisible[4].textContent?.trim(), 'youtube'); + assert.strictEqual( columnDefinitionsVisible[5].firstElementChild?.getAttribute('data-control-name'), 'column_definition_toggle_checkbox_bar' ); @@ -160,7 +161,7 @@ module('Integration | Component | hyper-table-v2/manage-columns', function (hook const columnDefinitionsVisible = document.querySelector('.fields-list')?.children || []; - assert.equal( + assert.strictEqual( columnDefinitionsVisible[0].firstElementChild?.getAttribute('data-control-name'), 'column_definition_toggle_checkbox_code' ); @@ -174,7 +175,7 @@ module('Integration | Component | hyper-table-v2/manage-columns', function (hook const columnDefinitionsChecked = document.querySelectorAll('.fields-list .field input:checked'); assert.strictEqual(columnDefinitionsChecked.length, 1); - assert.equal( + assert.strictEqual( columnDefinitionsChecked[0].parentElement?.getAttribute('data-control-name'), 'column_definition_toggle_checkbox_code' ); @@ -191,7 +192,9 @@ module('Integration | Component | hyper-table-v2/manage-columns', function (hook }); test('it removes the column in the table', async function (this: TestContext, assert) { - let upsertColumnsMock = sinon.stub(this.tableManager, 'upsertColumns').callsFake(({ columns }) => { + assert.expect(2); + const upsertColumnsMock = sinon.stub(this.tableManager, 'upsertColumns').callsFake((args: any) => { + const { columns } = args; assert.deepEqual(columns, [ { definition: { @@ -224,7 +227,9 @@ module('Integration | Component | hyper-table-v2/manage-columns', function (hook }); test('it adds the column in the table', async function (this: TestContext, assert) { - const upsertColumnsMock = sinon.stub(this.tableManager, 'upsertColumns').callsFake(({ columns }) => { + assert.expect(4); + const upsertColumnsMock = sinon.stub(this.tableManager, 'upsertColumns').callsFake((args: any) => { + const { columns } = args; const updatedColumns = [ { definition: { diff --git a/tests/integration/components/hyper-table-v2/search-test.ts b/tests/integration/components/hyper-table-v2/search-test.ts index 917a7d21..9b65c804 100644 --- a/tests/integration/components/hyper-table-v2/search-test.ts +++ b/tests/integration/components/hyper-table-v2/search-test.ts @@ -28,6 +28,7 @@ module('Integration | Component | hyper-table-v2/search', function (hooks) { await this.handler.fetchColumns(); this.column = this.handler.columns[0]; + this.applyFiltersSpy = sinon.spy(this.handler, 'applyFilters'); }); test('It renders', async function (assert) { @@ -42,21 +43,17 @@ module('Integration | Component | hyper-table-v2/search', function (hooks) { module('When text is inserted in the input', () => { test('The handler.applyFilters is called', async function (this: TestContext, assert) { - const handlerSpy = sinon.spy(this.handler); - await render(hbs``); await fillIn('.oss-input-container input', 'test'); await triggerKeyEvent( '.oss-input-container input', 'keyup', 'Enter', - //@ts-ignore + //@ts-expect-error - code does not exist on triggerKeyEvent { code: 'Enter' } ); - // @ts-ignore assert.ok( - //@ts-ignore - handlerSpy.applyFilters.calledWith(this.column, [ + this.applyFiltersSpy.calledWith(this.column, [ { key: 'value', value: 'test' @@ -72,14 +69,12 @@ module('Integration | Component | hyper-table-v2/search', function (hooks) { }); test('When the remove icon is clicked, the text input is cleared, #handler.applyFilters is triggered', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler); await render(hbs``); assert.dom('.oss-input-container').exists(); await fillIn('.oss-input-container input', 'test'); await click('.oss-input-container .suffix .fa-times'); assert.ok( - //@ts-ignore - handlerSpy.applyFilters.calledWith(this.column, [ + this.applyFiltersSpy.calledWith(this.column, [ { key: 'value', value: '' diff --git a/tests/integration/components/hyper-table-v2/selection-test.ts b/tests/integration/components/hyper-table-v2/selection-test.ts index 79c290a5..90dc4c95 100644 --- a/tests/integration/components/hyper-table-v2/selection-test.ts +++ b/tests/integration/components/hyper-table-v2/selection-test.ts @@ -61,7 +61,7 @@ module('Integration | Component | hyper-table-v2/selection', function (hooks) { `); - assert.equal( + assert.strictEqual( document.querySelector('.count-container span')?.innerHTML, this.intlService.t('hypertable.selection.all_records_selected', { count: 5 }) ); diff --git a/tests/integration/components/hyper-table/store-test.js b/tests/integration/components/hyper-table/store-test.js index af7e24e0..f6129dc4 100644 --- a/tests/integration/components/hyper-table/store-test.js +++ b/tests/integration/components/hyper-table/store-test.js @@ -12,16 +12,17 @@ module('Integration | Component | hyper-table/localstorage', function (hooks) { this.table = this.owner.lookup('service:hypertable-manager').createTable({}); this.table.updateData([]); - assert.equal(this.table.store, null); + assert.strictEqual(this.table.store, null); }); }); module('feature is enabled', function () { test('it throws an error if the feature is enable but no options.name is passed', async function (assert) { + assert.expect(1); try { this.table = this.owner.lookup('service:hypertable-manager').createTable({ features: { localStorage: true } }); } catch (err) { - assert.equal( + assert.strictEqual( err.message, '[Hypertable] Trying to use localStorage store without a store name. Please set "options.name".' ); @@ -33,8 +34,8 @@ module('Integration | Component | hyper-table/localstorage', function (hooks) { .lookup('service:hypertable-manager') .createTable({ name: 'foo', features: { localStorage: true } }); - assert.equal(this.table.store.constructor, LocalStorageStore); - assert.equal(this.table.store.key, 'foo'); + assert.strictEqual(this.table.store.constructor, LocalStorageStore); + assert.strictEqual(this.table.store.key, 'foo'); }); test('it correctly updates the localStorage', async function (assert) { diff --git a/tests/test-helper.ts b/tests/test-helper.ts index 33deb47b..6380347c 100644 --- a/tests/test-helper.ts +++ b/tests/test-helper.ts @@ -1,11 +1,9 @@ -// @ts-ignore import { setApplication } from '@ember/test-helpers'; import registerAssertions from '@upfluence/oss-components/test-support/register-assertions'; -// @ts-ignore import Application from 'dummy/app'; import config from 'dummy/config/environment'; -// @ts-ignore +// @ts-expect-error - required due to legacy typing missing type definitions import { forceModulesToBeLoaded, sendCoverage } from 'ember-cli-code-coverage/test-support'; import { start } from 'ember-qunit'; import QUnit from 'qunit'; @@ -19,7 +17,6 @@ QUnit.done(async function () { await sendCoverage(); }); -// @ts-ignore setApplication(Application.create(config.APP)); start(); diff --git a/tests/unit/core/handler-test.ts b/tests/unit/core/handler-test.ts index 65930660..bb082649 100644 --- a/tests/unit/core/handler-test.ts +++ b/tests/unit/core/handler-test.ts @@ -29,26 +29,26 @@ module('Unit | core/handler', function (hooks) { test('Handler#fetchColumns', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - assert.equal(handler.columns.length, 0); + assert.strictEqual(handler.columns.length, 0); await handler.fetchColumns(); - assert.equal(handler.columns.length, 4); + assert.strictEqual(handler.columns.length, 4); }); test('Handler#fetchColumns triggers the columns-loaded event', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const handlerSpy = sinon.spy(handler, 'triggerEvent'); + const triggerEventSpy = sinon.spy(handler, 'triggerEvent'); await handler.fetchColumns(); - assert.ok(handlerSpy.calledOnceWithExactly('columns-loaded')); + assert.ok(triggerEventSpy.calledOnceWithExactly('columns-loaded')); }); module('Handler#fetchRows', () => { test('it adds the correct number of rows', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - assert.equal(handler.rows.length, 0); + assert.strictEqual(handler.rows.length, 0); await handler.fetchRows(); - assert.equal(handler.rows.length, 3); + assert.strictEqual(handler.rows.length, 3); }); test('it removes duplicated row by record_id', async function (this: TestContext, assert: Assert) { @@ -57,19 +57,19 @@ module('Unit | core/handler', function (hooks) { await handler.fetchRows(); await handler.fetchRows(); - assert.equal(handler.rows.length, 3); - assert.equal(handler.rows[0].record_id, 12); - assert.equal(handler.rows[0].foo, 'ekip'); - assert.equal(handler.rows[1].record_id, 13); - assert.equal(handler.rows[1].foo, 'second'); - assert.equal(handler.rows[2].record_id, 14); - assert.equal(handler.rows[2].foo, 'third'); + assert.strictEqual(handler.rows.length, 3); + assert.strictEqual(handler.rows[0].record_id, 12); + assert.strictEqual(handler.rows[0].foo, 'ekip'); + assert.strictEqual(handler.rows[1].record_id, 13); + assert.strictEqual(handler.rows[1].foo, 'second'); + assert.strictEqual(handler.rows[2].record_id, 14); + assert.strictEqual(handler.rows[2].foo, 'third'); }); }); test('Handler#addColumn', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - assert.equal(handler.columns.length, 0); + assert.strictEqual(handler.columns.length, 0); await handler.addColumn({ key: 'foo', type: 'text', @@ -85,8 +85,8 @@ module('Unit | core/handler', function (hooks) { facetable_by: ['value'] }); - assert.equal(handler.columns.length, 1); - assert.equal(handler.columns[0].definition.key, 'foo'); + assert.strictEqual(handler.columns.length, 1); + assert.strictEqual(handler.columns[0].definition.key, 'foo'); }); module('Handler#removeColumn', function () { @@ -113,10 +113,9 @@ module('Unit | core/handler', function (hooks) { } ]; - assert.equal(handler.columns.length, 1); + assert.strictEqual(handler.columns.length, 1); await handler.removeColumn(handler.columns[0].definition); - assert.equal(handler.columns.length, 0); - // @ts-ignore + assert.strictEqual(handler.columns.length, 0); assert.ok(handlerTriggerEventSpy.notCalled); }); @@ -143,10 +142,9 @@ module('Unit | core/handler', function (hooks) { } ]; - assert.equal(handler.columns.length, 1); + assert.strictEqual(handler.columns.length, 1); await handler.removeColumn(handler.columns[0].definition); - assert.equal(handler.columns.length, 0); - // @ts-ignore + assert.strictEqual(handler.columns.length, 0); assert.ok(handlerTriggerEventSpy.calledOnceWithExactly('remove-column')); }); }); @@ -162,7 +160,7 @@ module('Unit | core/handler', function (hooks) { this.handler.applyFilters(this.handler.columns[0], [{ key: 'foo', value: 'bar' }]); - assert.equal(this.handler.columns[0].filters.length, 2); + assert.strictEqual(this.handler.columns[0].filters.length, 2); assert.deepEqual(this.handler.columns[0].filters, [ { key: 'fizz', @@ -176,11 +174,11 @@ module('Unit | core/handler', function (hooks) { }); test('new filters trigger event with the apply-filters event', async function (this: TestContext, assert: Assert) { - const handlerSpy = sinon.spy(this.handler, 'triggerEvent'); + const triggerEventSpy = sinon.spy(this.handler, 'triggerEvent'); await this.handler.applyFilters(this.handler.columns[0], [{ key: 'foo', value: 'bar' }]); assert.ok( - handlerSpy.calledOnceWithExactly('apply-filters', this.handler.columns[0], [{ key: 'foo', value: 'bar' }]) + triggerEventSpy.calledOnceWithExactly('apply-filters', this.handler.columns[0], [{ key: 'foo', value: 'bar' }]) ); }); @@ -192,7 +190,7 @@ module('Unit | core/handler', function (hooks) { { key: 'fizz', value: 'buzz' } ]); - assert.equal(this.handler.columns[0].filters.length, 2); + assert.strictEqual(this.handler.columns[0].filters.length, 2); assert.deepEqual(this.handler.columns[0].filters, [ { key: 'foo', value: 'batman' }, { key: 'fizz', value: 'buzz' } @@ -210,7 +208,7 @@ module('Unit | core/handler', function (hooks) { { key: 'fizz', value: 'buzz' } ]); - assert.equal(this.handler.columns[0].filters.length, 1); + assert.strictEqual(this.handler.columns[0].filters.length, 1); assert.deepEqual(this.handler.columns[0].filters, [{ key: 'fizz', value: 'buzz' }]); }); }); @@ -225,19 +223,19 @@ module('Unit | core/handler', function (hooks) { handler.resetColumns(handler.columns); - assert.equal(handler.columns.filter((column) => column.filters.length > 0 || column.order).length, 0); - assert.equal(handler.columns[0].filters.length, 0); - assert.equal(handler.columns[1].order, undefined); + assert.strictEqual(handler.columns.filter((column) => column.filters.length > 0 || column.order).length, 0); + assert.strictEqual(handler.columns[0].filters.length, 0); + assert.strictEqual(handler.columns[1].order, undefined); }); test('it triggers the reset-columns event', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const handlerSpy = sinon.spy(handler, 'triggerEvent'); + const triggerEventSpy = sinon.spy(handler, 'triggerEvent'); await handler.fetchColumns(); await handler.resetColumns(handler.columns); - assert.ok(handlerSpy.calledWithExactly('reset-columns', handler.columns)); + assert.ok(triggerEventSpy.calledWithExactly('reset-columns', handler.columns)); }); test('if all items where globally selected, the selection is properly reset', async function (this: TestContext, assert: Assert) { @@ -249,7 +247,7 @@ module('Unit | core/handler', function (hooks) { handler.applyOrder(handler.columns[1], 'asc'); handler.selectAllGlobal(); - assert.equal(handler.selection, 'all'); + assert.strictEqual(handler.selection, 'all'); await handler.resetColumns(handler.columns); @@ -265,36 +263,34 @@ module('Unit | core/handler', function (hooks) { handler.applyOrder(handler.columns[1], 'asc'); handler.toggleSelectAll(true); - assert.equal(handler.selection.length, 3); + assert.strictEqual(handler.selection.length, 3); handler.resetColumns(handler.columns); - assert.equal(handler.selection.length, 0); + assert.strictEqual(handler.selection.length, 0); }); }); test('Handler#resetRows', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const rowsFetcherSpy = sinon.spy(this.rowsFetcher); + const fetchSpy = sinon.spy(this.rowsFetcher, 'fetch'); await handler.fetchRows(); await handler.resetRows(); - // @ts-ignore - assert.ok(rowsFetcherSpy.fetch.calledTwice); - // @ts-ignore - assert.ok(rowsFetcherSpy.fetch.calledWithExactly(1, 30)); - assert.equal(handler.rows.length, 3); + assert.ok(fetchSpy.calledTwice); + assert.ok(fetchSpy.calledWithExactly(1, 30)); + assert.strictEqual(handler.rows.length, 3); }); test('Handler#resetRows triggers the reset-rows event', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const handlerSpy = sinon.spy(handler, 'triggerEvent'); + const triggerEventSpy = sinon.spy(handler, 'triggerEvent'); await handler.fetchRows(); await handler.resetRows(); - assert.ok(handlerSpy.calledOnceWithExactly('reset-rows')); + assert.ok(triggerEventSpy.calledOnceWithExactly('reset-rows')); }); test('Handler#removeRow', async function (this: TestContext, assert: Assert) { @@ -302,12 +298,11 @@ module('Unit | core/handler', function (hooks) { const handlerTriggerEventSpy = sinon.spy(handler, 'triggerEvent'); await handler.fetchRows(); - assert.equal(handler.rows.length, 3); + assert.strictEqual(handler.rows.length, 3); handler.removeRow(12); - assert.equal(handler.rows.length, 2); - assert.equal(handler.rows[0].recordId, 13); - // @ts-ignore + assert.strictEqual(handler.rows.length, 2); + assert.strictEqual(handler.rows[0].recordId, 13); assert.ok(handlerTriggerEventSpy.calledOnceWithExactly('remove-row')); }); @@ -322,38 +317,35 @@ module('Unit | core/handler', function (hooks) { return true; }); - assert.equal(handler.rows[0].bar, 'woop woop'); - // @ts-ignore + assert.strictEqual(handler.rows[0].bar, 'woop woop'); assert.ok(handlerTriggerEventSpy.calledOnceWithExactly('mutate-rows')); assert.true(didRefresh); didRefresh = handler.mutateRow(13, (): boolean => false); - assert.equal(handler.rows[1].bar, 'second bar'); - // @ts-ignore + assert.strictEqual(handler.rows[1].bar, 'second bar'); assert.ok(handlerTriggerEventSpy.calledOnceWithExactly('mutate-rows')); assert.false(didRefresh); }); test('Handler#applyOrder', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const tableManagerSpy = sinon.spy(this.tableManager); + const upsertColumnsSpy = sinon.spy(this.tableManager, 'upsertColumns'); await handler.fetchColumns(); handler.applyOrder(handler.columns[0], 'asc'); - // @ts-ignore - assert.ok(tableManagerSpy.upsertColumns.calledOnceWithExactly({ columns: handler.columns })); - assert.equal(handler.currentPage, 1); + assert.ok(upsertColumnsSpy.calledOnceWithExactly({ columns: handler.columns })); + assert.strictEqual(handler.currentPage, 1); }); test('Handler#applyOrder triggers the apply-order event', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const handlerSpy = sinon.spy(handler, 'triggerEvent'); + const triggerEventSpy = sinon.spy(handler, 'triggerEvent'); await handler.fetchColumns(); await handler.applyOrder(handler.columns[0], 'asc'); - assert.ok(handlerSpy.calledWithExactly('apply-order', handler.columns[0], 'asc')); + assert.ok(triggerEventSpy.calledWithExactly('apply-order', handler.columns[0], 'asc')); }); module('Handler#toggleSelectAll', () => { @@ -363,7 +355,7 @@ module('Unit | core/handler', function (hooks) { await handler.fetchRows(); handler.toggleSelectAll(true); - assert.equal(handler.selection.length, 3); + assert.strictEqual(handler.selection.length, 3); }); test('it selects all the rows', async function (this: TestContext, assert: Assert) { @@ -373,7 +365,7 @@ module('Unit | core/handler', function (hooks) { await handler.fetchRows(); handler.toggleSelectAll(true); - assert.equal(handler.selection, 'all'); + assert.strictEqual(handler.selection, 'all'); }); test('it clears the selected rows', async function (this: TestContext, assert: Assert) { @@ -391,19 +383,19 @@ module('Unit | core/handler', function (hooks) { test('Handler#selectAllGlobal', async function (this: TestContext, assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); populateSelectionAndExclusionHandler(handler); - assert.equal(handler.selection.length, 1); - assert.equal(handler.exclusion.length, 1); + assert.strictEqual(handler.selection.length, 1); + assert.strictEqual(handler.exclusion.length, 1); handler.selectAllGlobal(); - assert.equal(handler.selection, 'all'); + assert.strictEqual(handler.selection, 'all'); assert.deepEqual(handler.exclusion, []); }); - test('Handler#selectAllGlobal', async function (this: TestContext, assert) { + test('Handler#clearSelection', async function (this: TestContext, assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); populateSelectionAndExclusionHandler(handler); - assert.equal(handler.selection.length, 1); - assert.equal(handler.exclusion.length, 1); + assert.strictEqual(handler.selection.length, 1); + assert.strictEqual(handler.exclusion.length, 1); handler.clearSelection(); assert.deepEqual(handler.selection, []); @@ -423,39 +415,39 @@ module('Unit | core/handler', function (hooks) { assert.deepEqual(handler.selection, []); }); - module('Handler#onBottomReached', function () { + module('Handler#onBottomReached', function (hooks) { + hooks.beforeEach(function (this: TestContext) { + this.handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); + this.fetchRowsSpy = sinon.spy(this.handler, 'fetchRows'); + }); + test('it does nothing if the maximum rows have been loaded already', async function (this: TestContext, assert: Assert) { sinon.stub(this.rowsFetcher, 'fetch').callsFake((_: number, _1: number) => { return Promise.resolve({ rows: [], meta: { total: 0 } }); }); - const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const handlerSpy = sinon.spy(handler); - await handler.fetchRows(); + await this.handler.fetchRows(); - handler.onBottomReached(); + this.handler.onBottomReached(); - assert.ok(handlerSpy.fetchRows.calledOnce); + assert.ok(this.fetchRowsSpy.calledOnce); }); test('it calls the Handler#fetchRows method if there are more rows to be fetched', async function (this: TestContext, assert: Assert) { - const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const handlerSpy = sinon.spy(handler); - await handler.fetchRows(); - handler.onBottomReached(); + await this.handler.fetchRows(); + this.handler.onBottomReached(); - assert.ok(handlerSpy.fetchRows.calledTwice); + assert.ok(this.fetchRowsSpy.calledTwice); }); }); module('Handler#fetchFacets', function () { test('it calls the fetchFacets method of the manager correctly', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const tableManagerSpy = sinon.spy(this.tableManager); + const fetchFacetsSpy = sinon.spy(this.tableManager, 'fetchFacets'); const resp = await handler.fetchFacets('foo', 'id'); - // @ts-ignore - assert.ok(tableManagerSpy.fetchFacets.calledOnceWithExactly('foo', 'id', undefined)); + assert.ok(fetchFacetsSpy.calledOnceWithExactly('foo', 'id', undefined)); assert.deepEqual(resp, { facets: [ { @@ -481,28 +473,26 @@ module('Unit | core/handler', function (hooks) { module('Handler#updateRowById', function () { test('it skips the row refresh if the record_id is not loaded yet', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const rowsFetcherSpy = sinon.spy(this.rowsFetcher); + const fetchByIdSpy = sinon.spy(this.rowsFetcher, 'fetchById'); await handler.fetchRows(); - assert.equal(handler.rows.find((r) => r.record_id === 12)!.bar, 'hello'); + assert.strictEqual(handler.rows.find((r) => r.record_id === 12)!.bar, 'hello'); await handler.updateRowById(667); - // @ts-ignore - assert.ok(rowsFetcherSpy.fetchById.notCalled); - assert.equal(handler.rows.find((r) => r.record_id === 12)!.bar, 'hello'); + assert.ok(fetchByIdSpy.notCalled); + assert.strictEqual(handler.rows.find((r) => r.record_id === 12)!.bar, 'hello'); }); test('it calls the updateRowById method of the manager correctly', async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - const rowsFetcherSpy = sinon.spy(this.rowsFetcher); + const fetchByIdSpy = sinon.spy(this.rowsFetcher, 'fetchById'); await handler.fetchRows(); - assert.equal(handler.rows.find((r) => r.record_id === 12)!.bar, 'hello'); + assert.strictEqual(handler.rows.find((r) => r.record_id === 12)!.bar, 'hello'); await handler.updateRowById(12); - // @ts-ignore - assert.ok(rowsFetcherSpy.fetchById.calledOnceWithExactly(12)); - assert.equal(handler.rows.find((r) => r.record_id === 12)!.bar, 'world'); + assert.ok(fetchByIdSpy.calledOnceWithExactly(12)); + assert.strictEqual(handler.rows.find((r) => r.record_id === 12)!.bar, 'world'); }); }); @@ -511,18 +501,18 @@ module('Unit | core/handler', function (hooks) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); await handler.fetchRows(); - assert.equal(handler.rows.find((r) => r.record_id === 12)!._isLoading, undefined); + assert.strictEqual(handler.rows.find((r) => r.record_id === 12)!._isLoading, undefined); await handler.toggleRowLoadingState(667); - assert.equal(handler.rows.find((r) => r.record_id === 12)!._isLoading, undefined); + assert.strictEqual(handler.rows.find((r) => r.record_id === 12)!._isLoading, undefined); }); test("calling the method properly updates the row's loading state", async function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); await handler.fetchRows(); - assert.equal(handler.rows.find((r) => r.record_id === 12)!._isLoading, undefined); + assert.strictEqual(handler.rows.find((r) => r.record_id === 12)!._isLoading, undefined); await handler.toggleRowLoadingState(12); - assert.equal(handler.rows.find((r) => r.record_id === 12)!._isLoading, true); + assert.true(handler.rows.find((r) => r.record_id === 12)!._isLoading); }); }); @@ -531,24 +521,23 @@ module('Unit | core/handler', function (hooks) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); handler.currentPage = 2; - assert.equal(handler.currentPage, 2); + assert.strictEqual(handler.currentPage, 2); handler.teardown(); - assert.equal(handler.currentPage, 1); + assert.strictEqual(handler.currentPage, 1); }); }); module('Events', function () { test('callbacks are called properly when an event is subscribed to', function (this: TestContext, assert: Assert) { const handler = new TableHandler(getContext(), this.tableManager, this.rowsFetcher); - + assert.expect(1); handler.on('row-click', (row: Row) => { - assert.equal(row, handler.rows[0]); + assert.strictEqual(row, handler.rows[0]); }); handler.triggerEvent('row-click', handler.rows[0]); - assert.expect(1); }); }); diff --git a/tests/unit/core/rendering-resolver-test.ts b/tests/unit/core/rendering-resolver-test.ts index 1663ab2f..d1a956df 100644 --- a/tests/unit/core/rendering-resolver-test.ts +++ b/tests/unit/core/rendering-resolver-test.ts @@ -23,7 +23,7 @@ module('Unit | core/rendering-resolver', function (hooks) { const renderingResolver = new BaseRenderingResolver(getContext()); const resolved = await renderingResolver.lookupHeaderComponent(buildColumnDefinition('foo')); assert.deepEqual(resolved.component, ensureSafeComponent(BaseHeaderRenderer, getContext())); - assert.equal(resolved.args, undefined); + assert.strictEqual(resolved.args, undefined); }); test('it returns the amount cell rendering component for a money column', async function (assert: Assert) { diff --git a/tsconfig.json b/tsconfig.json index 8ada3ef8..64460d36 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,6 +30,8 @@ "@upfluence/hypertable/test-support/*": ["addon-test-support/*"], "@upfluence/oss-components": ["node_modules/@upfluence/oss-components/addon"], "@upfluence/oss-components/*": ["node_modules/@upfluence/oss-components/addon/*"], + "@upfluence/oss-components/test-support": ["./node_modules/@upfluence/oss-components/addon-test-support"], + "@upfluence/oss-components/test-support/*": ["./node_modules/@upfluence/oss-components/addon-test-support/*"], "*": ["types/*"] } },