From 0abb88154e8d6227ff554ef8aa05ab156cee172a Mon Sep 17 00:00:00 2001 From: Arthur Deierlein Date: Wed, 4 Sep 2024 15:37:30 +0200 Subject: [PATCH] chore(frontend): set up typescript --- frontend/.ember-cli | 2 +- frontend/.eslintrc.js | 112 +++- .../components/task-selection/component.js | 1 + frontend/app/config/environment.d.ts | 14 + frontend/ember-cli-build.js | 1 + frontend/package.json | 37 +- frontend/pnpm-lock.yaml | 627 ++++++++++++++++-- frontend/tsconfig.json | 33 + .../ember-data/types/registries/model.d.ts | 6 + frontend/types/global.d.ts | 7 + frontend/types/timed/index.d.ts | 11 + 11 files changed, 795 insertions(+), 56 deletions(-) create mode 100644 frontend/app/config/environment.d.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/types/ember-data/types/registries/model.d.ts create mode 100644 frontend/types/global.d.ts create mode 100644 frontend/types/timed/index.d.ts diff --git a/frontend/.ember-cli b/frontend/.ember-cli index 8d84f5f07..d9ce3fd9d 100644 --- a/frontend/.ember-cli +++ b/frontend/.ember-cli @@ -11,5 +11,5 @@ Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript rather than JavaScript by default, when a TypeScript version of a given blueprint is available. */ - "isTypeScriptProject": false + "isTypeScriptProject": true } diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index 86236ebba..07df8ef80 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -1,17 +1,107 @@ "use-strict"; module.exports = { - extends: ["@adfinis/eslint-config/ember-app"], + root: true, + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: "latest", + }, + plugins: ["ember", "@typescript-eslint", "import"], + extends: [ + "eslint:recommended", + "plugin:ember/recommended", + "plugin:prettier/recommended", + ], + env: { + browser: true, + }, rules: { - "ember/no-actions-hash": "warn", - "ember/no-component-lifecycle-hooks": "warn", - "ember/no-mixins": "warn", - "ember/no-new-mixins": "warn", - "ember/no-classic-classes": "warn", - "ember/no-classic-components": "warn", - "ember/no-get": "warn", - "ember/no-observers": "warn", - "qunit/no-assert-equal": "warn", - "ember/require-tagless-components": "warn", + // possible errors + "no-await-in-loop": "error", + + // best practices + "array-callback-return": "error", + "dot-notation": "error", + eqeqeq: "error", + "no-alert": "error", + "no-else-return": "error", + "no-eval": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-floating-decimal": "error", + "one-var": ["error", "never"], + curly: ["error", "multi-line"], + + // ES6 + "no-var": "error", + "object-shorthand": "error", + "prefer-const": "error", + "prefer-destructuring": [ + "error", + { AssignmentExpression: { array: false, object: false } }, + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + + // import + "import/no-duplicates": "error", + "import/no-unresolved": "off", + "import/order": [ + "error", + { + "newlines-between": "always", + alphabetize: { order: "asc", caseInsensitive: true }, + }, + ], + + // tooling + "no-console": ["error", { allow: ["warn", "error"] }], + "no-debugger": "error", }, + overrides: [ + // js files + { + files: ["**/*.js"], + extends: [ + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + ], + rules: {}, + }, + // ts files + { + files: ["**/*.ts"], + extends: [ + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + ], + rules: {}, + }, + // node files + { + files: [ + "./.eslintrc.js", + "./.prettierrc.js", + "./.stylelintrc.js", + "./.template-lintrc.js", + "./ember-cli-build.js", + "./testem.js", + "./blueprints/*/index.js", + "./config/**/*.js", + "./lib/*/index.js", + "./server/**/*.js", + ], + env: { + browser: false, + node: true, + }, + extends: ["plugin:n/recommended"], + }, + { + // test files + files: ["tests/**/*-test.{js,ts}"], + extends: ["plugin:qunit/recommended"], + }, + ], }; diff --git a/frontend/app/components/task-selection/component.js b/frontend/app/components/task-selection/component.js index a213d5197..62c086e66 100644 --- a/frontend/app/components/task-selection/component.js +++ b/frontend/app/components/task-selection/component.js @@ -56,6 +56,7 @@ export default class TaskSelectionComponent extends Component { this._setInitial(); if (this.args.task) { + console.log("foo"); this.onTaskChange(this.args.task, { preventAction: true }); } diff --git a/frontend/app/config/environment.d.ts b/frontend/app/config/environment.d.ts new file mode 100644 index 000000000..e649732bd --- /dev/null +++ b/frontend/app/config/environment.d.ts @@ -0,0 +1,14 @@ +/** + * Type declarations for + * import config from 'my-app/config/environment' + */ +declare const config: { + environment: string; + modulePrefix: string; + podModulePrefix: string; + locationType: "history" | "hash" | "none" | "auto"; + rootURL: string; + APP: Record; +}; + +export default config; diff --git a/frontend/ember-cli-build.js b/frontend/ember-cli-build.js index a83d50b35..c1789ec38 100644 --- a/frontend/ember-cli-build.js +++ b/frontend/ember-cli-build.js @@ -6,6 +6,7 @@ const EmberApp = require("ember-cli/lib/broccoli/ember-app"); module.exports = function (defaults) { const app = new EmberApp(defaults, { + "ember-cli-babel": { enableTypescriptTransform: true }, babel: { plugins: [ require.resolve("ember-concurrency/async-arrow-task-transform"), diff --git a/frontend/package.json b/frontend/package.json index f2f7c05f5..d184155c4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,8 +17,9 @@ "lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"", "lint:hbs": "ember-template-lint . --config-path .template-lintrc-ci.js", "lint:hbs:fix": "ember-template-lint . --fix", - "lint:js": "eslint --config .eslintrc.js .", - "lint:js:fix": "eslint --config .eslintrc.js . --fix", + "lint:js": "eslint . --cache", + "lint:js:fix": "eslint . --fix", + "lint:types": "tsc --noEmit", "start": "ember server --proxy https://timed.localhost --secure-proxy=false", "test": "concurrently \"npm:lint\" \"npm:test:*\" --names \"lint,test:\"", "test:ember": "ember test" @@ -44,6 +45,37 @@ "@glimmer/tracking": "1.1.2", "@html-next/vertical-collection": "4.0.2", "@sentry/ember": "^7.98.0", + "@tsconfig/ember": "^3.0.8", + "@tsconfig/strictest": "^2.0.5", + "@types/ember": "^4.0.11", + "@types/ember-data": "^4.4.16", + "@types/ember-data__adapter": "^4.0.6", + "@types/ember-data__model": "^4.0.5", + "@types/ember-data__serializer": "^4.0.6", + "@types/ember-data__store": "^4.0.7", + "@types/ember-qunit": "^6.1.1", + "@types/ember-resolver": "^9.0.0", + "@types/ember__application": "^4.0.11", + "@types/ember__array": "^4.0.10", + "@types/ember__component": "^4.0.22", + "@types/ember__controller": "^4.0.12", + "@types/ember__debug": "^4.0.8", + "@types/ember__destroyable": "^4.0.5", + "@types/ember__engine": "^4.0.11", + "@types/ember__error": "^4.0.6", + "@types/ember__object": "^4.0.12", + "@types/ember__polyfills": "^4.0.6", + "@types/ember__routing": "^4.0.22", + "@types/ember__runloop": "^4.0.10", + "@types/ember__service": "^4.0.9", + "@types/ember__string": "^3.0.15", + "@types/ember__template": "^4.0.7", + "@types/ember__test": "^4.0.6", + "@types/ember__utils": "^4.0.7", + "@types/qunit": "^2.19.10", + "@types/rsvp": "^4.0.9", + "@typescript-eslint/eslint-plugin": "^8.4.0", + "@typescript-eslint/parser": "^8.4.0", "broccoli-asset-rev": "^3.0.0", "broccoli-funnel": "^3.0.8", "concurrently": "^8.0.1", @@ -125,6 +157,7 @@ "stylelint-scss": "^6.3.0", "tracked-built-ins": "3.1.1", "tracked-toolbox": "2.0.0", + "typescript": "^5.5.4", "webpack": "5.92.1" }, "engines": { diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index ebb84ee46..21d56dfe9 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@adfinis/eslint-config': specifier: ^2.1.1 - version: 2.1.1(@babel/core@7.22.9)(@babel/eslint-parser@7.21.3(@babel/core@7.22.9)(eslint@8.46.0))(@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.22.9))(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint-plugin-ember@11.12.0(eslint@8.46.0))(eslint-plugin-import@2.28.1(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8))(eslint-plugin-qunit@7.3.4(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8) + version: 2.1.1(@babel/core@7.22.9)(@babel/eslint-parser@7.21.3(@babel/core@7.22.9)(eslint@8.46.0))(@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.22.9))(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint-plugin-ember@11.12.0(eslint@8.46.0))(eslint-plugin-import@2.28.1(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8))(eslint-plugin-qunit@7.3.4(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8) '@apollo/client': specifier: 3.8.6 version: 3.8.6(graphql@16.8.1) @@ -68,6 +68,99 @@ importers: '@sentry/ember': specifier: ^7.98.0 version: 7.118.0(@glint/template@1.4.0)(webpack@5.92.1) + '@tsconfig/ember': + specifier: ^3.0.8 + version: 3.0.8 + '@tsconfig/strictest': + specifier: ^2.0.5 + version: 2.0.5 + '@types/ember': + specifier: ^4.0.11 + version: 4.0.11(@babel/core@7.22.9) + '@types/ember-data': + specifier: ^4.4.16 + version: 4.4.16(@babel/core@7.22.9) + '@types/ember-data__adapter': + specifier: ^4.0.6 + version: 4.0.6(@babel/core@7.22.9) + '@types/ember-data__model': + specifier: ^4.0.5 + version: 4.0.5(@babel/core@7.22.9) + '@types/ember-data__serializer': + specifier: ^4.0.6 + version: 4.0.6(@babel/core@7.22.9) + '@types/ember-data__store': + specifier: ^4.0.7 + version: 4.0.7(@babel/core@7.22.9) + '@types/ember-qunit': + specifier: ^6.1.1 + version: 6.1.1(@ember/test-helpers@2.9.3(@babel/core@7.22.9)(@glint/template@1.4.0)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1)))(@glint/template@1.4.0)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1))(qunit@2.19.4)(webpack@5.92.1) + '@types/ember-resolver': + specifier: ^9.0.0 + version: 9.0.0(@ember/string@3.1.1)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1)) + '@types/ember__application': + specifier: ^4.0.11 + version: 4.0.11(@babel/core@7.22.9) + '@types/ember__array': + specifier: ^4.0.10 + version: 4.0.10(@babel/core@7.22.9) + '@types/ember__component': + specifier: ^4.0.22 + version: 4.0.22(@babel/core@7.22.9) + '@types/ember__controller': + specifier: ^4.0.12 + version: 4.0.12(@babel/core@7.22.9) + '@types/ember__debug': + specifier: ^4.0.8 + version: 4.0.8(@babel/core@7.22.9) + '@types/ember__destroyable': + specifier: ^4.0.5 + version: 4.0.5 + '@types/ember__engine': + specifier: ^4.0.11 + version: 4.0.11(@babel/core@7.22.9) + '@types/ember__error': + specifier: ^4.0.6 + version: 4.0.6 + '@types/ember__object': + specifier: ^4.0.12 + version: 4.0.12(@babel/core@7.22.9) + '@types/ember__polyfills': + specifier: ^4.0.6 + version: 4.0.6 + '@types/ember__routing': + specifier: ^4.0.22 + version: 4.0.22(@babel/core@7.22.9) + '@types/ember__runloop': + specifier: ^4.0.10 + version: 4.0.10(@babel/core@7.22.9) + '@types/ember__service': + specifier: ^4.0.9 + version: 4.0.9(@babel/core@7.22.9) + '@types/ember__string': + specifier: ^3.0.15 + version: 3.0.15 + '@types/ember__template': + specifier: ^4.0.7 + version: 4.0.7 + '@types/ember__test': + specifier: ^4.0.6 + version: 4.0.6(@babel/core@7.22.9) + '@types/ember__utils': + specifier: ^4.0.7 + version: 4.0.7(@babel/core@7.22.9) + '@types/qunit': + specifier: ^2.19.10 + version: 2.19.10 + '@types/rsvp': + specifier: ^4.0.9 + version: 4.0.9 + '@typescript-eslint/eslint-plugin': + specifier: ^8.4.0 + version: 8.4.0(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint@8.46.0)(typescript@5.5.4) + '@typescript-eslint/parser': + specifier: ^8.4.0 + version: 8.4.0(eslint@8.46.0)(typescript@5.5.4) broccoli-asset-rev: specifier: ^3.0.0 version: 3.0.0 @@ -241,7 +334,7 @@ importers: version: 11.12.0(eslint@8.46.0) eslint-plugin-import: specifier: 2.28.1 - version: 2.28.1(eslint@8.46.0) + version: 2.28.1(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint@8.46.0) eslint-plugin-n: specifier: 15.7.0 version: 15.7.0(eslint@8.46.0) @@ -292,25 +385,28 @@ importers: version: 6.2.7 stylelint: specifier: ^16.4.0 - version: 16.6.1(typescript@5.5.2) + version: 16.6.1(typescript@5.5.4) stylelint-config-standard: specifier: ^32.0.0 - version: 32.0.0(stylelint@16.6.1(typescript@5.5.2)) + version: 32.0.0(stylelint@16.6.1(typescript@5.5.4)) stylelint-config-standard-scss: specifier: ^13.1.0 - version: 13.1.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.2)) + version: 13.1.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.4)) stylelint-prettier: specifier: ^3.0.0 - version: 3.0.0(prettier@2.8.8)(stylelint@16.6.1(typescript@5.5.2)) + version: 3.0.0(prettier@2.8.8)(stylelint@16.6.1(typescript@5.5.4)) stylelint-scss: specifier: ^6.3.0 - version: 6.3.2(stylelint@16.6.1(typescript@5.5.2)) + version: 6.3.2(stylelint@16.6.1(typescript@5.5.4)) tracked-built-ins: specifier: 3.1.1 version: 3.1.1 tracked-toolbox: specifier: 2.0.0 version: 2.0.0(@babel/core@7.22.9)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1)) + typescript: + specifier: ^5.5.4 + version: 5.5.4 webpack: specifier: 5.92.1 version: 5.92.1 @@ -1629,6 +1725,12 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@tsconfig/ember@3.0.8': + resolution: {integrity: sha512-OVnIsZIt/8q0VEtcdz3rRryNrm6gdJTxXlxefkGIrkZnME0wqslmwHlUEZ7mvh377df9FqBhNKrYNarhCW8zJA==} + + '@tsconfig/strictest@2.0.5': + resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -1654,6 +1756,86 @@ packages: '@types/cors@2.8.17': resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + '@types/ember-data@4.4.16': + resolution: {integrity: sha512-plFqPkgw7n4YlkzvApkQAIhvvYTERlx8PeI2J5gSFtMtsKuoaIo8fXm4w22ZdBQtTzeh/kwvpO2WY8R/d5Ttfg==} + + '@types/ember-data__adapter@4.0.6': + resolution: {integrity: sha512-vSrx1cqz8jO0cBYwu98SrwFk5s722C+BGpw++NregwQio3g9VbNoymx+HsYeXvsWvGUsoRewxu9K7TwAOJSsvw==} + + '@types/ember-data__model@4.0.5': + resolution: {integrity: sha512-zyfHh3tQiMdpbPZ1/RFxi4m9TdwsZxDmVY0e7V1UYp7pWvm/DeqEXqoy3WS9xa/O01xoJFpQtJHyasdXvVTfbg==} + + '@types/ember-data__serializer@4.0.6': + resolution: {integrity: sha512-ebxxySSvTiay1/hgN4fElahSuL0MX+1sMMwx/RQyy7z98ifV8wafW62BwlYtbH44aeTIdcaSBE2pm3R1aP2yUA==} + + '@types/ember-data__store@4.0.7': + resolution: {integrity: sha512-0S3Etr32i4aGvhXhZM6CXaosvX8E6c+RCx8pCxUXVdn+SmICm8jqFXsDC6Gnqq4bJeTkf9cglqz46prOVR1Tcg==} + + '@types/ember-qunit@6.1.1': + resolution: {integrity: sha512-1g5A3vPKhvB/CuN/EP9rBLXYaJOjzKyLYWeBtNDEQNkTuG1dAo/Hg0CCixgbBgLlzaDP8mR/n1xpg8HqQ8SUKg==} + deprecated: This is a stub types definition. ember-qunit provides its own type definitions, so you do not need this installed. + + '@types/ember-resolver@9.0.0': + resolution: {integrity: sha512-lEuC2QD8K6rRAbELMejrALFBgelRPt6OQtapny4Oke07ZtK/Lbf9zn5KIDl7PNkirxMD0AStsQTdUqFu6eVbVw==} + deprecated: This is a stub types definition. ember-resolver provides its own type definitions, so you do not need this installed. + + '@types/ember@4.0.11': + resolution: {integrity: sha512-v7VIex0YILK8fP87LkIfzeeYKNnu74+xwf6U56v6MUDDGfSs9q/6NCxiUfwkxD+z5nQiUcwvfKVokX8qzZFRLw==} + + '@types/ember__application@4.0.11': + resolution: {integrity: sha512-U1S7XW0V70nTWbFckWoraJbYGBJK69muP/CsPFLeAuUYHfkkDiwh1SfqgAUN9aHtrEJM5SuSYVYp2YsTI2yLuA==} + + '@types/ember__array@4.0.10': + resolution: {integrity: sha512-UrhDbopLI3jB0MqV14y8yji2IuPNmeDrtT1PRYJL4CThLHrRkfeYyFvxqvrxWxn0wXKjbbjfH1gOe7BU57QrLQ==} + + '@types/ember__component@4.0.22': + resolution: {integrity: sha512-m72EtmBN/RxOChXqRsyOg4RR5+AiB4LQ8s1CEKNYAfvANt18m4hjqxtA7QZYLTq2ZjEVJGpdMsrdDuONWjwRSQ==} + + '@types/ember__controller@4.0.12': + resolution: {integrity: sha512-80rdnSC0UJBqoUX5/vkQcM2xkRdTPTvY0dPXEfY5cC5OZITbcSeRo5qa7ZGhgNBfH6XYyh55Lo/b811LwU3N9w==} + + '@types/ember__debug@4.0.8': + resolution: {integrity: sha512-9wF7STmDHDsUxSjyCq2lpMq/03QOPkBQMGJnV8yOBnVZxB6f+FJH/kxaCprdMkUe7iwAPNEC2zrFFx1tzH75Kg==} + + '@types/ember__destroyable@4.0.5': + resolution: {integrity: sha512-spJyZxpvecssbXkaOQYcbnlWgb+TasFaKrgAYVbykZY6saMwUdMOGDDoW6uP/y/+A8Jj/fUIatPWJLepeSfgww==} + + '@types/ember__engine@4.0.11': + resolution: {integrity: sha512-ryR4Q1Xm3kQ3Ap58w10CxV3+vb3hs1cJqi7UZ5IlSdLRql7AbpS6hIjxSQ3EQ4zadeeJ6/D8JJcSwqR7eX3PFA==} + + '@types/ember__error@4.0.6': + resolution: {integrity: sha512-vYrLaGGjHkN14K89Vm8yqB2mkpJQefE5w7QJkkgYyV+smzns1vKlPbvuFevRtoeYNn4u4yY0JyF7HceNkm3H0Q==} + + '@types/ember__object@4.0.12': + resolution: {integrity: sha512-ZEpikPjZ02m1QCBiTPTayMJwVwF4UBlHlGDoScRB3IP/SUS1O5mmn1/CnSQDxzzF3ctfmhNuTZzVBBc1Y8OC1A==} + + '@types/ember__owner@4.0.9': + resolution: {integrity: sha512-iyBda4aUIjBmeiKTKmPow/EJO7xWn8m85CnQTOCqQzTWJyJpgfObbXSHahOHXOfMm279Oa5NlbmS/EontB+XiQ==} + + '@types/ember__polyfills@4.0.6': + resolution: {integrity: sha512-hbds3Qv+oVm/QKIaY1E6atvrCoJTH/MPSl4swOhX6P0RiMB2fOfFCrFSD1mP1KrU1LqpHJ2Rzs7XLe53SWVzgw==} + + '@types/ember__routing@4.0.22': + resolution: {integrity: sha512-qLk9Vd2GMxdlGmX9xbzg4Farths+AQGzYDH901Wo2Nsre+Cwv1Tk1rbCiay2V3ICYZYufytdWT6V++DISF3nvw==} + + '@types/ember__runloop@4.0.10': + resolution: {integrity: sha512-9MZfOJBXuUP7RqLjovmzy1yY2xKTxVpqHMapqy6QJ8mjAekRmq9IJ+ni2zJ5CWftyb3Lqu3Eks05CL7fnbhcJA==} + + '@types/ember__service@4.0.9': + resolution: {integrity: sha512-DrepocL/4hH5YxbDWbxEKMDcAchBPSGGa4g+LEINW1Po81RmSdKw5GZV4UO0mvRWgkdu3EbWUxbTzB4gmbDSeQ==} + + '@types/ember__string@3.0.15': + resolution: {integrity: sha512-SxoaweAJUJKSIt82clIwpi/Fm0IfeisozLnXthnBp/hE2JyVcnOb1wMIbw0CCfzercmyWG1njV45VBqy8SrLDQ==} + + '@types/ember__template@4.0.7': + resolution: {integrity: sha512-jv4hhG+8d1zdma+jhbCdJ3Ak7C22YNatGyWWvB3N9zbXq358AAPXaJoyNY8QTDbD/RIR9P6yoRk4u9vLbF6zfA==} + + '@types/ember__test@4.0.6': + resolution: {integrity: sha512-Nswm/epfTepXknT8scZvWyyop1aqJcZcyzY4THGHFcXvYQQfA9rgmgrx6vo9vCJmYHh3jm0TTAIAIfoCvGaX5g==} + + '@types/ember__utils@4.0.7': + resolution: {integrity: sha512-qQPBeWRyIPigKnZ68POlkqI5e6XA78Q4G3xHo687wQTcEtfoL/iZyPC4hn70mdijcZq8Hjch2Y3E5yhsEMzK+g==} + '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -1714,6 +1896,9 @@ packages: '@types/qs@6.9.15': resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + '@types/qunit@2.19.10': + resolution: {integrity: sha512-gVB+rxvxmbyPFWa6yjjKgcumWal3hyqoTXI0Oil161uWfo1OCzWZ/rnEumsx+6uVgrwPrCrhpQbLkzfildkSbg==} + '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -1723,6 +1908,9 @@ packages: '@types/rimraf@2.0.5': resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} + '@types/rsvp@4.0.9': + resolution: {integrity: sha512-F6vaN5mbxw2MBCu/AD9fSKwrhnto2pE77dyUsi415qz9IP9ni9ZOWXHxnXfsM4NW9UjW+it189jvvqnhv37Z7Q==} + '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -1735,6 +1923,63 @@ packages: '@types/ungap__structured-clone@0.3.3': resolution: {integrity: sha512-RNmhIPwoip6K/zZOv3ypksTAqaqLEXvlNSXKyrC93xMSOAHZCR7PifW6xKZCwkbbnbM9dwB9X56PPoNTlNwEqw==} + '@typescript-eslint/eslint-plugin@8.4.0': + resolution: {integrity: sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.4.0': + resolution: {integrity: sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.4.0': + resolution: {integrity: sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.4.0': + resolution: {integrity: sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@8.4.0': + resolution: {integrity: sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.4.0': + resolution: {integrity: sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.4.0': + resolution: {integrity: sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@8.4.0': + resolution: {integrity: sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@0.3.4': resolution: {integrity: sha512-TSVh8CpnwNAsPC5wXcIyh92Bv1gq6E9cNDeeLu7Z4h8V4/qWtXJp7y42qljRkqcpmsve1iozwv1wr+3BNdILCg==} @@ -5557,6 +5802,10 @@ packages: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -7250,6 +7499,12 @@ packages: resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} engines: {node: '>=0.10.0'} + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + ts-invariant@0.10.3: resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} engines: {node: '>=8'} @@ -7315,8 +7570,8 @@ packages: typescript-memoize@1.1.1: resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==} - typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true @@ -7665,14 +7920,14 @@ packages: snapshots: - '@adfinis/eslint-config@2.1.1(@babel/core@7.22.9)(@babel/eslint-parser@7.21.3(@babel/core@7.22.9)(eslint@8.46.0))(@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.22.9))(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint-plugin-ember@11.12.0(eslint@8.46.0))(eslint-plugin-import@2.28.1(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8))(eslint-plugin-qunit@7.3.4(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8)': + '@adfinis/eslint-config@2.1.1(@babel/core@7.22.9)(@babel/eslint-parser@7.21.3(@babel/core@7.22.9)(eslint@8.46.0))(@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.22.9))(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint-plugin-ember@11.12.0(eslint@8.46.0))(eslint-plugin-import@2.28.1(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8))(eslint-plugin-qunit@7.3.4(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8)': dependencies: '@babel/core': 7.22.9 '@babel/eslint-parser': 7.21.3(@babel/core@7.22.9)(eslint@8.46.0) '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.22.9) eslint: 8.46.0 eslint-config-prettier: 8.8.0(eslint@8.46.0) - eslint-plugin-import: 2.28.1(eslint@8.46.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint@8.46.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0(eslint@8.46.0))(eslint@8.46.0)(prettier@2.8.8) prettier: 2.8.8 optionalDependencies: @@ -10189,6 +10444,10 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} + '@tsconfig/ember@3.0.8': {} + + '@tsconfig/strictest@2.0.5': {} + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.5 @@ -10220,6 +10479,195 @@ snapshots: dependencies: '@types/node': 20.14.9 + '@types/ember-data@4.4.16(@babel/core@7.22.9)': + dependencies: + '@types/ember': 4.0.11(@babel/core@7.22.9) + '@types/ember__error': 4.0.6 + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + '@types/rsvp': 4.0.9 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember-data__adapter@4.0.6(@babel/core@7.22.9)': + dependencies: + '@types/ember-data': 4.4.16(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember-data__model@4.0.5(@babel/core@7.22.9)': + dependencies: + '@types/ember-data': 4.4.16(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember-data__serializer@4.0.6(@babel/core@7.22.9)': + dependencies: + '@types/ember-data': 4.4.16(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember-data__store@4.0.7(@babel/core@7.22.9)': + dependencies: + '@types/ember-data': 4.4.16(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember-qunit@6.1.1(@ember/test-helpers@2.9.3(@babel/core@7.22.9)(@glint/template@1.4.0)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1)))(@glint/template@1.4.0)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1))(qunit@2.19.4)(webpack@5.92.1)': + dependencies: + ember-qunit: 6.2.0(@ember/test-helpers@2.9.3(@babel/core@7.22.9)(@glint/template@1.4.0)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1)))(@glint/template@1.4.0)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1))(qunit@2.19.4)(webpack@5.92.1) + transitivePeerDependencies: + - '@ember/test-helpers' + - '@glint/template' + - ember-source + - qunit + - supports-color + - webpack + + '@types/ember-resolver@9.0.0(@ember/string@3.1.1)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1))': + dependencies: + ember-resolver: 10.0.0(@ember/string@3.1.1)(ember-source@5.4.1(@babel/core@7.22.9)(@glimmer/component@1.1.2(@babel/core@7.22.9))(@glint/template@1.4.0)(rsvp@4.8.5)(webpack@5.92.1)) + transitivePeerDependencies: + - '@ember/string' + - ember-source + - supports-color + + '@types/ember@4.0.11(@babel/core@7.22.9)': + dependencies: + '@types/ember__application': 4.0.11(@babel/core@7.22.9) + '@types/ember__array': 4.0.10(@babel/core@7.22.9) + '@types/ember__component': 4.0.22(@babel/core@7.22.9) + '@types/ember__controller': 4.0.12(@babel/core@7.22.9) + '@types/ember__debug': 4.0.8(@babel/core@7.22.9) + '@types/ember__engine': 4.0.11(@babel/core@7.22.9) + '@types/ember__error': 4.0.6 + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + '@types/ember__polyfills': 4.0.6 + '@types/ember__routing': 4.0.22(@babel/core@7.22.9) + '@types/ember__runloop': 4.0.10(@babel/core@7.22.9) + '@types/ember__service': 4.0.9(@babel/core@7.22.9) + '@types/ember__string': 3.0.15 + '@types/ember__template': 4.0.7 + '@types/ember__test': 4.0.6(@babel/core@7.22.9) + '@types/ember__utils': 4.0.7(@babel/core@7.22.9) + '@types/rsvp': 4.0.9 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__application@4.0.11(@babel/core@7.22.9)': + dependencies: + '@glimmer/component': 1.1.2(@babel/core@7.22.9) + '@types/ember': 4.0.11(@babel/core@7.22.9) + '@types/ember__engine': 4.0.11(@babel/core@7.22.9) + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + '@types/ember__owner': 4.0.9 + '@types/ember__routing': 4.0.22(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__array@4.0.10(@babel/core@7.22.9)': + dependencies: + '@types/ember': 4.0.11(@babel/core@7.22.9) + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__component@4.0.22(@babel/core@7.22.9)': + dependencies: + '@types/ember': 4.0.11(@babel/core@7.22.9) + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__controller@4.0.12(@babel/core@7.22.9)': + dependencies: + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__debug@4.0.8(@babel/core@7.22.9)': + dependencies: + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + '@types/ember__owner': 4.0.9 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__destroyable@4.0.5': {} + + '@types/ember__engine@4.0.11(@babel/core@7.22.9)': + dependencies: + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + '@types/ember__owner': 4.0.9 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__error@4.0.6': {} + + '@types/ember__object@4.0.12(@babel/core@7.22.9)': + dependencies: + '@types/ember': 4.0.11(@babel/core@7.22.9) + '@types/rsvp': 4.0.9 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__owner@4.0.9': {} + + '@types/ember__polyfills@4.0.6': {} + + '@types/ember__routing@4.0.22(@babel/core@7.22.9)': + dependencies: + '@types/ember': 4.0.11(@babel/core@7.22.9) + '@types/ember__controller': 4.0.12(@babel/core@7.22.9) + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + '@types/ember__service': 4.0.9(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__runloop@4.0.10(@babel/core@7.22.9)': + dependencies: + '@types/ember': 4.0.11(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__service@4.0.9(@babel/core@7.22.9)': + dependencies: + '@types/ember__object': 4.0.12(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__string@3.0.15': {} + + '@types/ember__template@4.0.7': {} + + '@types/ember__test@4.0.6(@babel/core@7.22.9)': + dependencies: + '@types/ember__application': 4.0.11(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@types/ember__utils@4.0.7(@babel/core@7.22.9)': + dependencies: + '@types/ember': 4.0.11(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 8.56.10 @@ -10290,6 +10738,8 @@ snapshots: '@types/qs@6.9.15': {} + '@types/qunit@2.19.10': {} + '@types/range-parser@1.2.7': {} '@types/resolve@1.20.2': {} @@ -10299,6 +10749,8 @@ snapshots: '@types/glob': 8.1.0 '@types/node': 20.14.9 + '@types/rsvp@4.0.9': {} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 @@ -10314,6 +10766,87 @@ snapshots: '@types/ungap__structured-clone@0.3.3': {} + '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint@8.46.0)(typescript@5.5.4)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.4.0(eslint@8.46.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.4.0 + '@typescript-eslint/type-utils': 8.4.0(eslint@8.46.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.4.0(eslint@8.46.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.4.0 + eslint: 8.46.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4)': + dependencies: + '@typescript-eslint/scope-manager': 8.4.0 + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.4.0 + debug: 4.3.5 + eslint: 8.46.0 + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.4.0': + dependencies: + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/visitor-keys': 8.4.0 + + '@typescript-eslint/type-utils@8.4.0(eslint@8.46.0)(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.4.0(eslint@8.46.0)(typescript@5.5.4) + debug: 4.3.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@8.4.0': {} + + '@typescript-eslint/typescript-estree@8.4.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/visitor-keys': 8.4.0 + debug: 4.3.5 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.4.0(eslint@8.46.0)(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@typescript-eslint/scope-manager': 8.4.0 + '@typescript-eslint/types': 8.4.0 + '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4) + eslint: 8.46.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@8.4.0': + dependencies: + '@typescript-eslint/types': 8.4.0 + eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@0.3.4': {} '@webassemblyjs/ast@1.12.1': @@ -12122,14 +12655,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.0(typescript@5.5.2): + cosmiconfig@9.0.0(typescript@5.5.4): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.5.2 + typescript: 5.5.4 create-ecdh@4.0.4: dependencies: @@ -13925,10 +14458,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(eslint-import-resolver-node@0.3.9)(eslint@8.46.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.46.0): dependencies: debug: 3.2.7 optionalDependencies: + '@typescript-eslint/parser': 8.4.0(eslint@8.46.0)(typescript@5.5.4) eslint: 8.46.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -13959,7 +14493,7 @@ snapshots: eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.28.1(eslint@8.46.0): + eslint-plugin-import@2.28.1(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint@8.46.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -13969,7 +14503,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.46.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(eslint-import-resolver-node@0.3.9)(eslint@8.46.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.4.0(eslint@8.46.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.46.0) has: 1.0.4 is-core-module: 2.14.0 is-glob: 4.0.3 @@ -13979,6 +14513,8 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.4.0(eslint@8.46.0)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -15785,6 +16321,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.8: {} minipass@2.9.0: @@ -17242,57 +17782,57 @@ snapshots: styled_string@0.0.1: {} - stylelint-config-recommended-scss@14.0.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.2)): + stylelint-config-recommended-scss@14.0.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.4)): dependencies: postcss-scss: 4.0.9(postcss@8.4.39) - stylelint: 16.6.1(typescript@5.5.2) - stylelint-config-recommended: 14.0.1(stylelint@16.6.1(typescript@5.5.2)) - stylelint-scss: 6.3.2(stylelint@16.6.1(typescript@5.5.2)) + stylelint: 16.6.1(typescript@5.5.4) + stylelint-config-recommended: 14.0.1(stylelint@16.6.1(typescript@5.5.4)) + stylelint-scss: 6.3.2(stylelint@16.6.1(typescript@5.5.4)) optionalDependencies: postcss: 8.4.39 - stylelint-config-recommended@11.0.0(stylelint@16.6.1(typescript@5.5.2)): + stylelint-config-recommended@11.0.0(stylelint@16.6.1(typescript@5.5.4)): dependencies: - stylelint: 16.6.1(typescript@5.5.2) + stylelint: 16.6.1(typescript@5.5.4) - stylelint-config-recommended@14.0.1(stylelint@16.6.1(typescript@5.5.2)): + stylelint-config-recommended@14.0.1(stylelint@16.6.1(typescript@5.5.4)): dependencies: - stylelint: 16.6.1(typescript@5.5.2) + stylelint: 16.6.1(typescript@5.5.4) - stylelint-config-standard-scss@13.1.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.2)): + stylelint-config-standard-scss@13.1.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.4)): dependencies: - stylelint: 16.6.1(typescript@5.5.2) - stylelint-config-recommended-scss: 14.0.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.2)) - stylelint-config-standard: 36.0.1(stylelint@16.6.1(typescript@5.5.2)) + stylelint: 16.6.1(typescript@5.5.4) + stylelint-config-recommended-scss: 14.0.0(postcss@8.4.39)(stylelint@16.6.1(typescript@5.5.4)) + stylelint-config-standard: 36.0.1(stylelint@16.6.1(typescript@5.5.4)) optionalDependencies: postcss: 8.4.39 - stylelint-config-standard@32.0.0(stylelint@16.6.1(typescript@5.5.2)): + stylelint-config-standard@32.0.0(stylelint@16.6.1(typescript@5.5.4)): dependencies: - stylelint: 16.6.1(typescript@5.5.2) - stylelint-config-recommended: 11.0.0(stylelint@16.6.1(typescript@5.5.2)) + stylelint: 16.6.1(typescript@5.5.4) + stylelint-config-recommended: 11.0.0(stylelint@16.6.1(typescript@5.5.4)) - stylelint-config-standard@36.0.1(stylelint@16.6.1(typescript@5.5.2)): + stylelint-config-standard@36.0.1(stylelint@16.6.1(typescript@5.5.4)): dependencies: - stylelint: 16.6.1(typescript@5.5.2) - stylelint-config-recommended: 14.0.1(stylelint@16.6.1(typescript@5.5.2)) + stylelint: 16.6.1(typescript@5.5.4) + stylelint-config-recommended: 14.0.1(stylelint@16.6.1(typescript@5.5.4)) - stylelint-prettier@3.0.0(prettier@2.8.8)(stylelint@16.6.1(typescript@5.5.2)): + stylelint-prettier@3.0.0(prettier@2.8.8)(stylelint@16.6.1(typescript@5.5.4)): dependencies: prettier: 2.8.8 prettier-linter-helpers: 1.0.0 - stylelint: 16.6.1(typescript@5.5.2) + stylelint: 16.6.1(typescript@5.5.4) - stylelint-scss@6.3.2(stylelint@16.6.1(typescript@5.5.2)): + stylelint-scss@6.3.2(stylelint@16.6.1(typescript@5.5.4)): dependencies: known-css-properties: 0.31.0 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.1 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - stylelint: 16.6.1(typescript@5.5.2) + stylelint: 16.6.1(typescript@5.5.4) - stylelint@16.6.1(typescript@5.5.2): + stylelint@16.6.1(typescript@5.5.4): dependencies: '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 @@ -17301,7 +17841,7 @@ snapshots: '@dual-bundle/import-meta-resolve': 4.1.0 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.5.2) + cosmiconfig: 9.0.0(typescript@5.5.4) css-functions-list: 3.2.2 css-tree: 2.3.1 debug: 4.3.5 @@ -17673,6 +18213,10 @@ snapshots: trim-right@1.0.1: {} + ts-api-utils@1.3.0(typescript@5.5.4): + dependencies: + typescript: 5.5.4 + ts-invariant@0.10.3: dependencies: tslib: 2.6.3 @@ -17747,8 +18291,7 @@ snapshots: typescript-memoize@1.1.1: {} - typescript@5.5.2: - optional: true + typescript@5.5.4: {} uc.micro@1.0.6: {} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 000000000..79f0e7826 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,33 @@ +{ + "extends": [ + "@tsconfig/strictest/tsconfig.json", + "@tsconfig/ember/tsconfig.json" + ], + "compilerOptions": { + // The combination of `baseUrl` with `paths` allows Ember's classic package + // layout, which is not resolvable with the Node resolution algorithm, to + // work with TypeScript. + "allowJs": true, + "baseUrl": ".", + "paths": { + "timed/tests/*": [ + "tests/*" + ], + "timed/mirage/*": [ + "mirage/*" + ], + "timed/*": [ + "app/*" + ], + "*": [ + "types/*" + ] + } + }, + "include": [ + "app/**/*", + "tests/**/*", + "types/**/*", + "mirage/**/*" + ] +} \ No newline at end of file diff --git a/frontend/types/ember-data/types/registries/model.d.ts b/frontend/types/ember-data/types/registries/model.d.ts new file mode 100644 index 000000000..e7a68fcd0 --- /dev/null +++ b/frontend/types/ember-data/types/registries/model.d.ts @@ -0,0 +1,6 @@ +/** + * Catch-all for ember-data. + */ +export default interface ModelRegistry { + [key: string]: any; +} diff --git a/frontend/types/global.d.ts b/frontend/types/global.d.ts new file mode 100644 index 000000000..9c026f740 --- /dev/null +++ b/frontend/types/global.d.ts @@ -0,0 +1,7 @@ +// Types for compiled templates +declare module "timed/templates/*" { + import { TemplateFactory } from "ember-cli-htmlbars"; + + const tmpl: TemplateFactory; + export default tmpl; +} diff --git a/frontend/types/timed/index.d.ts b/frontend/types/timed/index.d.ts new file mode 100644 index 000000000..8a50f34a4 --- /dev/null +++ b/frontend/types/timed/index.d.ts @@ -0,0 +1,11 @@ +import Ember from "ember"; + +declare global { + // Prevents ESLint from "fixing" this via its auto-fix to turn it into a type + // alias (e.g. after running any Ember CLI generator) + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface Array extends Ember.ArrayPrototypeExtensions {} + // interface Function extends Ember.FunctionPrototypeExtensions {} +} + +export {};