From fc70bf9bada0f3d0f7f26dada4edfbafde7a784f Mon Sep 17 00:00:00 2001 From: Daniele Calleri Date: Thu, 5 Oct 2023 18:00:06 +0200 Subject: [PATCH 1/3] refactor: migrate addon to TypeScript --- ember-autofocus-modifier/rollup.config.mjs | 2 +- .../src/modifiers/autofocus.js | 70 ---- .../src/modifiers/autofocus.ts | 80 ++++ .../src/template-registry.ts | 5 + ember-autofocus-modifier/tsconfig.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 347 +++++++++--------- 7 files changed, 255 insertions(+), 253 deletions(-) delete mode 100644 ember-autofocus-modifier/src/modifiers/autofocus.js create mode 100644 ember-autofocus-modifier/src/modifiers/autofocus.ts create mode 100644 ember-autofocus-modifier/src/template-registry.ts diff --git a/ember-autofocus-modifier/rollup.config.mjs b/ember-autofocus-modifier/rollup.config.mjs index d63bb801..7c5448f5 100644 --- a/ember-autofocus-modifier/rollup.config.mjs +++ b/ember-autofocus-modifier/rollup.config.mjs @@ -18,7 +18,7 @@ export default { plugins: [ // These are the modules that users should be able to import from your // addon. Anything not listed here may get optimized away. - addon.publicEntrypoints(["modifiers/**/*.js"]), + addon.publicEntrypoints(["modifiers/**/*.js", "template-registry.js"]), // These are the modules that should get reexported into the traditional // "app" tree. Things in here should also be in publicEntrypoints above, but diff --git a/ember-autofocus-modifier/src/modifiers/autofocus.js b/ember-autofocus-modifier/src/modifiers/autofocus.js deleted file mode 100644 index c97794e9..00000000 --- a/ember-autofocus-modifier/src/modifiers/autofocus.js +++ /dev/null @@ -1,70 +0,0 @@ -import { modifier } from "ember-modifier"; -import { next } from "@ember/runloop"; - -const focusableElements = [ - "BUTTON", - "SUMMARY", - "IFRAME", - "INPUT", - "SELECT", - "TEXTAREA", -]; - -const DEFAULT_SELECTOR = - "input:not([disabled]):not([readonly]),textarea:not([disabled]):not([readonly])"; - -export default modifier( - function autofocus(element, [selector = DEFAULT_SELECTOR], { disabled }) { - if (disabled) { - return; - } - - // Instead of selecting a child element by default, should this (in a major), - // be a behavior that is changed via a passed flag? - const targetElement = element.querySelector(selector) || element; - const isChildElement = targetElement !== element; - - /** - * Only applies to the element that {{autofocus}} is applied to. - * opts-out if we're selecting a child element. - */ - const shouldMoveFocus = - !isChildElement && - !focusableElements.some( - (item) => - element.tagName === item || - element.isContentEditable || - element.hasAttribute("aria-disabled") || - element.hasAttribute("href") || - element.hasAttribute("tabindex"), - ); - - /** - * if {{autofocus}} is applied to a non-focusable element, - * For A11y purposes, this is used to move focus to the non-focusable element. - * This is helpful when new elements are inserted on to the screen (yet not focus-trapped), - * and we want the tab-behavior to move "near" the inserted content. - * - * This still prevents the non-focusable element from being tabbed to, as non-focusable - * elements are still not focusable. - * - * But this is a behavior we can use to help out screen readers and keyboard users alike to - * more smoothly interact with newly-inserted content (without needing to focus an interactive-specifically - * maybe the inserted contents are just buttons, for example). - */ - if (shouldMoveFocus) { - element.setAttribute("tabindex", "-1"); - } - - next(function () { - targetElement.focus(); - }); - - return () => { - if (shouldMoveFocus) { - element.removeAttribute("tabindex"); - } - }; - }, - { eager: false }, -); diff --git a/ember-autofocus-modifier/src/modifiers/autofocus.ts b/ember-autofocus-modifier/src/modifiers/autofocus.ts new file mode 100644 index 00000000..e98d798d --- /dev/null +++ b/ember-autofocus-modifier/src/modifiers/autofocus.ts @@ -0,0 +1,80 @@ +import { modifier } from "ember-modifier"; +import { next } from "@ember/runloop"; + +const focusableElements = [ + "BUTTON", + "SUMMARY", + "IFRAME", + "INPUT", + "SELECT", + "TEXTAREA", +] as const; + +const DEFAULT_SELECTOR = + "input:not([disabled]):not([readonly]),textarea:not([disabled]):not([readonly])"; + +interface ModifierArgs { + Element: HTMLElement; + Args: { + Positional: [string?] | undefined; // Optional selector + Named: { + disabled?: boolean; // Optional 'disabled' parameter + }; + }; +} + +export default modifier(function autofocus( + element: HTMLElement, + [selector] = [DEFAULT_SELECTOR], + { disabled } = { disabled: false }, +) { + if (disabled) { + return; + } + + const targetElement: HTMLElement = + element.querySelector(selector ?? DEFAULT_SELECTOR) || element; + const isChildElement = targetElement !== element; + + /** + * Only applies to the element that {{autofocus}} is applied to. + * opts-out if we're selecting a child element. + */ + const shouldMoveFocus = + !isChildElement && + !focusableElements.some( + (item) => + element.tagName === item || + element.isContentEditable || + element.hasAttribute("aria-disabled") || + element.hasAttribute("href") || + element.hasAttribute("tabindex"), + ); + + /** + * if {{autofocus}} is applied to a non-focusable element, + * For A11y purposes, this is used to move focus to the non-focusable element. + * This is helpful when new elements are inserted on to the screen (yet not focus-trapped), + * and we want the tab-behavior to move "near" the inserted content. + * + * This still prevents the non-focusable element from being tabbed to, as non-focusable + * elements are still not focusable. + * + * But this is a behavior we can use to help out screen readers and keyboard users alike to + * more smoothly interact with newly-inserted content (without needing to focus an interactive-specifically + * maybe the inserted contents are just buttons, for example). + */ + if (shouldMoveFocus) { + element.setAttribute("tabindex", "-1"); + } + + next(function () { + targetElement.focus(); + }); + + return (): void => { + if (shouldMoveFocus) { + element.removeAttribute("tabindex"); + } + }; +}); diff --git a/ember-autofocus-modifier/src/template-registry.ts b/ember-autofocus-modifier/src/template-registry.ts new file mode 100644 index 00000000..3d51f9c5 --- /dev/null +++ b/ember-autofocus-modifier/src/template-registry.ts @@ -0,0 +1,5 @@ +import type autofocus from "./modifiers/autofocus"; + +export default interface Registry { + autofocus: typeof autofocus; +} diff --git a/ember-autofocus-modifier/tsconfig.json b/ember-autofocus-modifier/tsconfig.json index fa7eb7fe..c99fc3f3 100644 --- a/ember-autofocus-modifier/tsconfig.json +++ b/ember-autofocus-modifier/tsconfig.json @@ -5,7 +5,7 @@ "environment": "ember-loose" }, "compilerOptions": { - "allowJs": true, + "allowJs": false, "declarationDir": "declarations", "skipLibCheck": true } diff --git a/package.json b/package.json index a283a697..650bc7a0 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ }, "pnpm": { "overrides": { - "ember-source": "4.12.0" + "ember-source": "4.12.2" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27149681..ec849213 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - ember-source: 4.12.0 + ember-source: 4.12.2 importers: @@ -34,10 +34,10 @@ importers: version: 1.8.6 ember-modifier: specifier: ^4.1.0 - version: 4.1.0(ember-source@4.12.0) + version: 4.1.0(ember-source@4.12.2) ember-source: specifier: ^3.28.0 || ^4.0.0 - version: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + version: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) devDependencies: '@babel/core': specifier: ^7.23.0 @@ -138,7 +138,7 @@ importers: version: 3.1.1 '@ember/test-helpers': specifier: 2.9.3 - version: 2.9.3(@babel/core@7.23.0)(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.0) + version: 2.9.3(@babel/core@7.23.0)(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.2) '@embroider/macros': specifier: 1.13.2 version: 1.13.2(@glint/template@1.2.0) @@ -186,7 +186,7 @@ importers: version: 4.12.2 ember-cli-app-version: specifier: 6.0.1 - version: 6.0.1(ember-source@4.12.0) + version: 6.0.1(ember-source@4.12.2) ember-cli-babel: specifier: 8.0.0 version: 8.0.0(@babel/core@7.23.0) @@ -225,13 +225,13 @@ importers: version: 8.0.0 ember-qunit: specifier: 8.0.1 - version: 8.0.1(@ember/test-helpers@2.9.3)(@glint/template@1.2.0)(ember-source@4.12.0)(qunit@2.20.0) + version: 8.0.1(@ember/test-helpers@2.9.3)(@glint/template@1.2.0)(ember-source@4.12.2)(qunit@2.20.0) ember-resolver: specifier: 11.0.1 - version: 11.0.1(ember-source@4.12.0) + version: 11.0.1(ember-source@4.12.2) ember-source: - specifier: 4.12.0 - version: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + specifier: 4.12.2 + version: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) ember-source-channel-url: specifier: 3.0.0 version: 3.0.0 @@ -378,7 +378,7 @@ packages: dependencies: '@babel/compat-data': 7.22.20 '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.0 + browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 @@ -1440,7 +1440,7 @@ packages: babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.23.0) babel-plugin-polyfill-corejs3: 0.8.4(@babel/core@7.23.0) babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.23.0) - core-js-compat: 3.32.2 + core-js-compat: 3.33.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -1561,7 +1561,7 @@ packages: - supports-color dev: true - /@ember/test-helpers@2.9.3(@babel/core@7.23.0)(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.0): + /@ember/test-helpers@2.9.3(@babel/core@7.23.0)(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.2): resolution: {integrity: sha512-ejVg4Dj+G/6zyLvQsYOvmGiOLU6AS94tY4ClaO1E2oVvjjtVJIRmVLFN61I+DuyBg9hS3cFoPjQRTZB9MRIbxQ==} engines: {node: 10.* || 12.* || 14.* || 15.* || >= 16.*} peerDependencies: @@ -1569,13 +1569,13 @@ packages: dependencies: '@ember/test-waiters': 3.0.2 '@embroider/macros': 1.13.2(@glint/template@1.2.0) - '@embroider/util': 1.12.0(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.0) + '@embroider/util': 1.12.0(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.2) broccoli-debug: 0.6.5 broccoli-funnel: 3.0.8 ember-cli-babel: 7.26.11 ember-cli-htmlbars: 6.3.0 ember-destroyable-polyfill: 2.0.3(@babel/core@7.23.0) - ember-source: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + ember-source: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) transitivePeerDependencies: - '@babel/core' - '@glint/environment-ember-loose' @@ -1602,7 +1602,7 @@ packages: dependencies: '@embroider/core': 3.3.0(@glint/template@1.2.0) '@rollup/pluginutils': 4.2.1 - content-tag: 1.1.0 + content-tag: 1.1.2 fs-extra: 10.1.0 minimatch: 3.1.2 rollup-plugin-copy-assets: 2.0.3(rollup@2.67.0) @@ -1622,7 +1622,7 @@ packages: resolution: {integrity: sha512-siC9kP78uucEbpDcVyxjkwa76pcs5rVzDVpWO4PDc9EAXRX+pzmUuSTLAK3GztUwx7/PWhz1BenAivqdSvSgfg==} engines: {node: 12.* || 14.* || >= 16} dependencies: - '@embroider/shared-internals': 2.4.0 + '@embroider/shared-internals': 2.5.0 broccoli-funnel: 3.0.8 semver: 7.5.4 transitivePeerDependencies: @@ -1645,7 +1645,7 @@ packages: broccoli-source: 3.0.1 debug: 4.3.4 fast-sourcemap-concat: 1.4.0 - filesize: 10.0.12 + filesize: 10.1.0 fs-extra: 9.1.0 fs-tree-diff: 2.0.1 handlebars: 4.7.8 @@ -1685,22 +1685,6 @@ packages: transitivePeerDependencies: - supports-color - /@embroider/shared-internals@2.4.0: - resolution: {integrity: sha512-pFE05ebenWMC9XAPRjadYCXXb6VmqjkhYN5uqkhPo+VUmMHnx7sZYYxqGjxfVuhC/ghS/BNlOffOCXDOoE7k7g==} - engines: {node: 12.* || 14.* || >= 16} - dependencies: - babel-import-util: 2.0.1 - debug: 4.3.4 - ember-rfc176-data: 0.3.18 - fs-extra: 9.1.0 - js-string-escape: 1.0.1 - lodash: 4.17.21 - resolve-package-path: 4.0.3 - semver: 7.5.4 - typescript-memoize: 1.1.1 - transitivePeerDependencies: - - supports-color - /@embroider/shared-internals@2.5.0: resolution: {integrity: sha512-7qzrb7GVIyNqeY0umxoeIvjDC+ay1b+wb2yCVuYTUYrFfLAkLEy9FNI3iWCi3RdQ9OFjgcAxAnwsAiPIMZZ3pQ==} engines: {node: 12.* || 14.* || >= 16} @@ -1736,7 +1720,7 @@ packages: resolve: 1.22.6 dev: true - /@embroider/util@1.12.0(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.0): + /@embroider/util@1.12.0(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.2): resolution: {integrity: sha512-P4M1QADEH9ceIYC9mwHeV+6DDgEIQQYFfZi728nVKqTAxakXoiLgu/BCyQmEGyow9fYEPYaC1boDCZxW2JQAXg==} engines: {node: 14.* || >= 16} peerDependencies: @@ -1754,7 +1738,7 @@ packages: '@glint/template': 1.2.0 broccoli-funnel: 3.0.8 ember-cli-babel: 7.26.11 - ember-source: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + ember-source: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) transitivePeerDependencies: - supports-color dev: true @@ -1769,8 +1753,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.9.0: - resolution: {integrity: sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==} + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -1781,7 +1765,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.22.0 + globals: 13.23.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1906,7 +1890,7 @@ packages: uuid: 8.3.2 vscode-languageserver: 8.1.0 vscode-languageserver-textdocument: 1.0.11 - vscode-uri: 3.0.7 + vscode-uri: 3.0.8 yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -1975,7 +1959,7 @@ packages: dependencies: '@glimmer/component': 1.1.2(@babel/core@7.23.0) '@glint/template': 1.2.0 - ember-modifier: 4.1.0(ember-source@4.12.0) + ember-modifier: 4.1.0(ember-source@4.12.2) dev: true /@glint/template@1.2.0: @@ -2302,7 +2286,7 @@ packages: dependencies: '@babel/core': 7.23.0 '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 5.0.4(rollup@2.67.0) + '@rollup/pluginutils': 5.0.5(rollup@2.67.0) rollup: 2.67.0 dev: true @@ -2314,11 +2298,11 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils@5.0.4(rollup@2.67.0): - resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==} + /@rollup/pluginutils@5.0.5(rollup@2.67.0): + resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true @@ -2379,23 +2363,23 @@ packages: resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} dependencies: '@types/connect': 3.4.36 - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/chai-as-promised@7.1.6: resolution: {integrity: sha512-cQLhk8fFarRVZAXUQV1xEnZgMoPxqKojBvRkqPCKPQCzEhpbbSKl1Uu75kDng7k5Ln6LQLUmNBjLlFthCgm1NA==} dependencies: - '@types/chai': 4.3.6 + '@types/chai': 4.3.7 dev: true - /@types/chai@4.3.6: - resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} + /@types/chai@4.3.7: + resolution: {integrity: sha512-/k+vesl92vMvMygmQrFe9Aimxi6oQXFUX9mA5HanTrKUSAMoLauSi6PNFOdRw0oeqilaW600GNx2vSaT2f8aIQ==} dev: true /@types/connect@3.4.36: resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/cookie@0.4.1: @@ -2405,7 +2389,7 @@ packages: /@types/cors@2.8.14: resolution: {integrity: sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/debug@4.1.9: @@ -2432,7 +2416,7 @@ packages: /@types/express-serve-static-core@4.17.37: resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 '@types/qs': 6.9.8 '@types/range-parser': 1.2.5 '@types/send': 0.17.2 @@ -2450,26 +2434,26 @@ packages: /@types/fs-extra@5.1.0: resolution: {integrity: sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 /@types/fs-extra@8.1.3: resolution: {integrity: sha512-7IdV01N0u/CaVO0fuY1YmEg14HQN3+EW8mpNgg6NEfxEl/lzCa5OxlBu3iFsCAdamnYOcTQ7oEi43Xc/67Rgzw==} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.7.1 + '@types/node': 20.8.4 /@types/http-cache-semantics@4.0.2: resolution: {integrity: sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==} @@ -2485,7 +2469,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/mdast@3.0.13: @@ -2512,8 +2496,10 @@ packages: resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==} dev: true - /@types/node@20.7.1: - resolution: {integrity: sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==} + /@types/node@20.8.4: + resolution: {integrity: sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==} + dependencies: + undici-types: 5.25.3 /@types/node@9.6.61: resolution: {integrity: sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==} @@ -2534,14 +2520,14 @@ packages: /@types/responselike@1.0.1: resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/rimraf@2.0.5: resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} dependencies: '@types/glob': 8.1.0 - '@types/node': 20.7.1 + '@types/node': 20.8.4 /@types/semver@7.5.3: resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} @@ -2551,7 +2537,7 @@ packages: resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} dependencies: '@types/mime': 1.3.3 - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/serve-static@1.15.3: @@ -2559,7 +2545,7 @@ packages: dependencies: '@types/http-errors': 2.0.2 '@types/mime': 3.0.2 - '@types/node': 20.7.1 + '@types/node': 20.8.4 dev: true /@types/symlink-or-copy@1.2.0: @@ -2580,7 +2566,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.9.0 + '@eslint-community/regexpp': 4.9.1 '@typescript-eslint/parser': 6.7.3(eslint@8.49.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.7.4 '@typescript-eslint/type-utils': 6.7.4(eslint@8.49.0)(typescript@5.2.2) @@ -3423,7 +3409,7 @@ packages: dependencies: '@babel/core': 7.23.0 '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.0) - core-js-compat: 3.32.2 + core-js-compat: 3.33.0 transitivePeerDependencies: - supports-color @@ -3574,7 +3560,7 @@ packages: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.3.0 + chalk: 5.2.0 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 @@ -4112,7 +4098,7 @@ packages: matcher-collection: 2.0.1 source-map-url: 0.4.1 symlink-or-copy: 1.3.1 - terser: 5.20.0 + terser: 5.21.0 walk-sync: 2.2.0 workerpool: 6.5.0 transitivePeerDependencies: @@ -4123,7 +4109,7 @@ packages: resolution: {integrity: sha512-sWi3b3fTUSVPDsz5KsQ5eCQNVAtLgkIE/HYFkEZXR/07clqmd4E/gFiuwSaqa9b+QTXc1Uemfb7TVWbEIURWDg==} engines: {node: 8.* || >= 10.*} dependencies: - '@types/chai': 4.3.6 + '@types/chai': 4.3.7 '@types/chai-as-promised': 7.1.6 '@types/express': 4.17.18 ansi-html: 0.0.7 @@ -4155,15 +4141,15 @@ packages: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} dev: true - /browserslist@4.22.0: - resolution: {integrity: sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA==} + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001541 - electron-to-chromium: 1.4.532 + caniuse-lite: 1.0.30001547 + electron-to-chromium: 1.4.548 node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.0) + update-browserslist-db: 1.0.13(browserslist@4.22.1) /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -4261,14 +4247,14 @@ packages: engines: {node: '>=14.16'} dev: true - /cacheable-request@10.2.13: - resolution: {integrity: sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==} + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} dependencies: '@types/http-cache-semantics': 4.0.2 get-stream: 6.0.1 http-cache-semantics: 4.1.1 - keyv: 4.5.3 + keyv: 4.5.4 mimic-response: 4.0.0 normalize-url: 8.0.0 responselike: 3.0.0 @@ -4318,14 +4304,14 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.22.0 - caniuse-lite: 1.0.30001541 + browserslist: 4.22.1 + caniuse-lite: 1.0.30001547 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001541: - resolution: {integrity: sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw==} + /caniuse-lite@1.0.30001547: + resolution: {integrity: sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==} /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -4401,8 +4387,8 @@ packages: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} dev: true @@ -4909,8 +4895,8 @@ packages: safe-buffer: 5.2.1 dev: true - /content-tag@1.1.0: - resolution: {integrity: sha512-bktivDORs9M890KwVKrIONYvHhwshfgF4b1G/TFPrjH12Ag2GDiSdxVHqIzMxWZ297VgIRPSImURlpcOzJP/LQ==} + /content-tag@1.1.2: + resolution: {integrity: sha512-AZkfc6TUmW+/RbZJioPzOQPAHHXqyqK4B0GNckJDjBAPK3SyGrMfn21bfFky/qwi5uoLph5sjAHUkO3CL6/IgQ==} dev: true /content-type@1.0.5: @@ -4948,10 +4934,10 @@ packages: engines: {node: '>=0.10.0'} dev: true - /core-js-compat@3.32.2: - resolution: {integrity: sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==} + /core-js-compat@3.33.0: + resolution: {integrity: sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==} dependencies: - browserslist: 4.22.0 + browserslist: 4.22.1 /core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} @@ -5023,13 +5009,13 @@ packages: peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.30) + icss-utils: 5.1.0(postcss@8.4.31) loader-utils: 2.0.4 - postcss: 8.4.30 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.30) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.30) - postcss-modules-scope: 3.0.0(postcss@8.4.30) - postcss-modules-values: 4.0.0(postcss@8.4.30) + postcss: 8.4.31 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.31) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.31) + postcss-modules-scope: 3.0.0(postcss@8.4.31) + postcss-modules-values: 4.0.0(postcss@8.4.31) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.5.4 @@ -5080,8 +5066,8 @@ packages: engines: {node: '>= 12'} dev: true - /data-uri-to-buffer@5.0.1: - resolution: {integrity: sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==} + /data-uri-to-buffer@6.0.1: + resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} engines: {node: '>= 14'} dev: true @@ -5397,8 +5383,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.4.532: - resolution: {integrity: sha512-piIR0QFdIGKmOJTSNg5AwxZRNWQSXlRYycqDB9Srstx4lip8KpcmRxVP6zuFWExWziHYZpJ0acX7TxqX95KBpg==} + /electron-to-chromium@1.4.548: + resolution: {integrity: sha512-R77KD6mXv37DOyKLN/eW1rGS61N6yHOfapNSX9w+y9DdPG83l9Gkuv7qkCFZ4Ta4JPhrjgQfYbv4Y3TnM1Hi2Q==} /ember-auto-import@2.6.3(@glint/template@1.2.0)(webpack@5.88.2): resolution: {integrity: sha512-uLhrRDJYWCRvQ4JQ1e64XlSrqAKSd6PXaJ9ZsZI6Tlms9T4DtQFxNXasqji2ZRJBVrxEoLCRYX3RTldsQ0vNGQ==} @@ -5409,7 +5395,7 @@ packages: '@babel/plugin-proposal-decorators': 7.23.0(@babel/core@7.23.0) '@babel/preset-env': 7.22.20(@babel/core@7.23.0) '@embroider/macros': 1.13.2(@glint/template@1.2.0) - '@embroider/shared-internals': 2.4.0 + '@embroider/shared-internals': 2.5.0 babel-loader: 8.3.0(@babel/core@7.23.0)(webpack@5.88.2) babel-plugin-ember-modules-api-polyfill: 3.5.0 babel-plugin-ember-template-compilation: 2.2.0 @@ -5440,14 +5426,14 @@ packages: - supports-color - webpack - /ember-cli-app-version@6.0.1(ember-source@4.12.0): + /ember-cli-app-version@6.0.1(ember-source@4.12.2): resolution: {integrity: sha512-XA1FwkWA5QytmWF0jcJqEr3jcZoiCl9Fb33TZgOVfClL7Voxe+/RwzISEprBRQgbf7j8z1xf8/RJCKfclUy3rQ==} engines: {node: 14.* || 16.* || >= 18} peerDependencies: ember-source: ^3.28.0 || >= 4.0.0 dependencies: ember-cli-babel: 7.26.11 - ember-source: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + ember-source: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) git-repo-info: 2.1.1 transitivePeerDependencies: - supports-color @@ -5779,7 +5765,7 @@ packages: calculate-cache-key-for-tree: 2.0.0 capture-exit: 2.0.0 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 clean-base-url: 1.0.0 compression: 1.7.4 configstore: 5.0.1 @@ -5796,7 +5782,7 @@ packages: execa: 5.1.1 exit: 0.1.2 express: 4.18.2 - filesize: 10.0.12 + filesize: 10.1.0 find-up: 5.0.0 find-yarn-workspace-root: 2.0.0 fixturify-project: 2.1.1 @@ -5983,7 +5969,7 @@ packages: - supports-color dev: true - /ember-modifier@4.1.0(ember-source@4.12.0): + /ember-modifier@4.1.0(ember-source@4.12.2): resolution: {integrity: sha512-YFCNpEYj6jdyy3EjslRb2ehNiDvaOrXTilR9+ngq+iUqSHYto2zKV0rleiA1XJQ27ELM1q8RihT29U6Lq5EyqQ==} peerDependencies: ember-source: '*' @@ -5994,7 +5980,7 @@ packages: '@embroider/addon-shim': 1.8.6 ember-cli-normalize-entity-name: 1.0.0 ember-cli-string-utils: 1.1.0 - ember-source: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + ember-source: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) transitivePeerDependencies: - supports-color @@ -6007,25 +5993,25 @@ packages: - supports-color dev: true - /ember-qunit@8.0.1(@ember/test-helpers@2.9.3)(@glint/template@1.2.0)(ember-source@4.12.0)(qunit@2.20.0): + /ember-qunit@8.0.1(@ember/test-helpers@2.9.3)(@glint/template@1.2.0)(ember-source@4.12.2)(qunit@2.20.0): resolution: {integrity: sha512-13PtywHNPTQKkDW4o8QRkJvcdsZr8hRyvh6xh/YLAX8+HaRLd3nPL8mBF4O/Kur/DAj3QWLvjzktZ2uRNGSh3A==} peerDependencies: '@ember/test-helpers': '>=3.0.3' ember-source: '>=4.0.0' qunit: ^2.13.0 dependencies: - '@ember/test-helpers': 2.9.3(@babel/core@7.23.0)(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.0) + '@ember/test-helpers': 2.9.3(@babel/core@7.23.0)(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.2) '@embroider/addon-shim': 1.8.6 '@embroider/macros': 1.13.2(@glint/template@1.2.0) ember-cli-test-loader: 3.1.0 - ember-source: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + ember-source: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) qunit: 2.20.0 transitivePeerDependencies: - '@glint/template' - supports-color dev: true - /ember-resolver@11.0.1(ember-source@4.12.0): + /ember-resolver@11.0.1(ember-source@4.12.2): resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==} engines: {node: 14.* || 16.* || >= 18} peerDependencies: @@ -6035,7 +6021,7 @@ packages: optional: true dependencies: ember-cli-babel: 7.26.11 - ember-source: 4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) + ember-source: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) transitivePeerDependencies: - supports-color dev: true @@ -6063,8 +6049,8 @@ packages: - encoding dev: true - /ember-source@4.12.0(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2): - resolution: {integrity: sha512-h0lV902A4Mny2eiqXPy15uXXoCc7BnUegE4axLAy4IoxEkJ1o5h0aLJFiB4Tzb1htx8vgHjJz//Y5Jig7NSDTw==} + /ember-source@4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2): + resolution: {integrity: sha512-IfNa4v23fV6a0lLP5Q+3JEAekf8eTifwEXpFzjrAqNM1V3/+3fwHr0uEpI3G6IFGRlaU1xmuhcVkjGoOa5ZP0g==} engines: {node: '>= 14.*'} peerDependencies: '@glimmer/component': ^1.1.2 @@ -6127,7 +6113,7 @@ packages: '@lint-todo/utils': 13.1.1 aria-query: 5.3.0 chalk: 5.3.0 - ci-info: 3.8.0 + ci-info: 3.9.0 date-fns: 2.30.0 ember-template-imports: 3.4.2 ember-template-recast: 6.1.4 @@ -6233,13 +6219,13 @@ packages: engines: {node: '>=10.0.0'} dev: true - /engine.io@6.5.2: - resolution: {integrity: sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==} + /engine.io@6.5.3: + resolution: {integrity: sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==} engines: {node: '>=10.2.0'} dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.14 - '@types/node': 20.7.1 + '@types/node': 20.8.4 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -6307,7 +6293,7 @@ packages: get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.3 + has: 1.0.4 has-property-descriptors: 1.0.0 has-proto: 1.0.1 has-symbols: 1.0.3 @@ -6362,7 +6348,7 @@ packages: engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.1 - has: 1.0.3 + has: 1.0.4 has-tostringtag: 1.0.0 /es-to-primitive@1.2.1: @@ -6471,7 +6457,7 @@ packages: estraverse: 5.3.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 - magic-string: 0.30.3 + magic-string: 0.30.4 requireindex: 1.2.0 snake-case: 3.0.4 transitivePeerDependencies: @@ -6485,7 +6471,7 @@ packages: eslint: '>=8' dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@eslint-community/regexpp': 4.9.0 + '@eslint-community/regexpp': 4.9.1 eslint: 8.49.0 dev: true @@ -6617,7 +6603,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@eslint-community/regexpp': 4.9.0 + '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 '@eslint/js': 8.49.0 '@humanwhocodes/config-array': 0.11.11 @@ -6638,7 +6624,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.22.0 + globals: 13.23.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -7032,11 +7018,11 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.0 + flat-cache: 3.1.1 dev: true - /filesize@10.0.12: - resolution: {integrity: sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==} + /filesize@10.1.0: + resolution: {integrity: sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==} engines: {node: '>= 10.4.0'} dev: true @@ -7220,12 +7206,12 @@ packages: walk-sync: 2.2.0 dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} engines: {node: '>=12.0.0'} dependencies: flatted: 3.2.9 - keyv: 4.5.3 + keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -7467,7 +7453,7 @@ packages: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: function-bind: 1.1.1 - has: 1.0.3 + has: 1.0.4 has-proto: 1.0.1 has-symbols: 1.0.3 @@ -7512,12 +7498,12 @@ packages: resolve-pkg-maps: 1.0.0 dev: true - /get-uri@6.0.1: - resolution: {integrity: sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==} + /get-uri@6.0.2: + resolution: {integrity: sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==} engines: {node: '>= 14'} dependencies: basic-ftp: 5.0.3 - data-uri-to-buffer: 5.0.1 + data-uri-to-buffer: 6.0.1 debug: 4.3.4 fs-extra: 8.1.0 transitivePeerDependencies: @@ -7629,8 +7615,8 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.22.0: - resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -7738,7 +7724,7 @@ packages: '@sindresorhus/is': 5.6.0 '@szmarczak/http-timer': 5.0.1 cacheable-lookup: 7.0.0 - cacheable-request: 10.2.13 + cacheable-request: 10.2.14 decompress-response: 6.0.0 form-data-encoder: 2.1.4 get-stream: 6.0.1 @@ -7882,11 +7868,9 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 /hash-for-dep@1.5.1: resolution: {integrity: sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw==} @@ -8096,13 +8080,13 @@ packages: dev: true optional: true - /icss-utils@5.1.0(postcss@8.4.30): + /icss-utils@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.30 + postcss: 8.4.31 /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -8246,7 +8230,7 @@ packages: engines: {node: '>=14.18.0'} dependencies: ansi-escapes: 4.3.2 - chalk: 5.3.0 + chalk: 5.2.0 cli-cursor: 3.1.0 cli-width: 4.1.0 external-editor: 3.1.0 @@ -8267,7 +8251,7 @@ packages: engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.1 - has: 1.0.3 + has: 1.0.4 side-channel: 1.0.4 /interpret@1.4.0: @@ -8350,13 +8334,13 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: - ci-info: 3.8.0 + ci-info: 3.9.0 dev: true /is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: - has: 1.0.3 + has: 1.0.4 /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} @@ -8728,7 +8712,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.7.1 + '@types/node': 20.8.4 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -8876,8 +8860,8 @@ packages: json-buffer: 3.0.0 dev: true - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 dev: true @@ -9250,7 +9234,7 @@ packages: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} dependencies: - chalk: 5.3.0 + chalk: 5.2.0 is-unicode-supported: 1.3.0 dev: true @@ -9307,8 +9291,8 @@ packages: dependencies: sourcemap-codec: 1.4.8 - /magic-string@0.30.3: - resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==} + /magic-string@0.30.4: + resolution: {integrity: sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -10296,7 +10280,7 @@ packages: resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - chalk: 5.3.0 + chalk: 5.2.0 cli-cursor: 4.0.0 cli-spinners: 2.9.1 is-interactive: 2.0.0 @@ -10459,7 +10443,7 @@ packages: dependencies: agent-base: 7.1.0 debug: 4.3.4 - get-uri: 6.0.1 + get-uri: 6.0.2 http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 pac-resolver: 6.0.2 @@ -10494,7 +10478,7 @@ packages: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.5.4 + semver: 7.5.1 dev: true /parent-module@1.0.1: @@ -10699,42 +10683,42 @@ packages: engines: {node: '>=0.10.0'} dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.30): + /postcss-modules-extract-imports@3.0.0(postcss@8.4.31): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.30 + postcss: 8.4.31 - /postcss-modules-local-by-default@4.0.3(postcss@8.4.30): + /postcss-modules-local-by-default@4.0.3(postcss@8.4.31): resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.30) - postcss: 8.4.30 + icss-utils: 5.1.0(postcss@8.4.31) + postcss: 8.4.31 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.0.0(postcss@8.4.30): + /postcss-modules-scope@3.0.0(postcss@8.4.31): resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.30 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 - /postcss-modules-values@4.0.0(postcss@8.4.30): + /postcss-modules-values@4.0.0(postcss@8.4.31): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.30) - postcss: 8.4.30 + icss-utils: 5.1.0(postcss@8.4.31) + postcss: 8.4.31 /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} @@ -10746,8 +10730,8 @@ packages: /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /postcss@8.4.30: - resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -11619,7 +11603,7 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.5.4 + semver: 7.5.1 dev: true /semver@5.7.2: @@ -11854,7 +11838,7 @@ packages: base64id: 2.0.0 cors: 2.8.5 debug: 4.3.4 - engine.io: 6.5.2 + engine.io: 6.5.3 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -11987,7 +11971,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.15 + spdx-license-ids: 3.0.16 dev: true /spdx-exceptions@2.3.0: @@ -11998,11 +11982,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.15 + spdx-license-ids: 3.0.16 dev: true - /spdx-license-ids@3.0.15: - resolution: {integrity: sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==} + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true /split-string@3.1.0: @@ -12357,11 +12341,11 @@ packages: jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.20.0 + terser: 5.21.0 webpack: 5.88.2 - /terser@5.20.0: - resolution: {integrity: sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==} + /terser@5.21.0: + resolution: {integrity: sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -12793,6 +12777,9 @@ packages: resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} dev: true + /undici-types@5.25.3: + resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -12901,13 +12888,13 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.0): + /update-browserslist-db@1.0.13(browserslist@4.22.1): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.0 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 @@ -12916,7 +12903,7 @@ packages: engines: {node: '>=14.16'} dependencies: boxen: 7.1.1 - chalk: 5.3.0 + chalk: 5.2.0 configstore: 6.0.0 has-yarn: 3.0.0 import-lazy: 4.0.0 @@ -12926,7 +12913,7 @@ packages: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.5.4 + semver: 7.5.1 semver-diff: 4.0.0 xdg-basedir: 5.1.0 dev: true @@ -13076,8 +13063,8 @@ packages: vscode-languageserver-protocol: 3.17.3 dev: true - /vscode-uri@3.0.7: - resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} + /vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} dev: true /w3c-hr-time@1.0.2: @@ -13202,7 +13189,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.10.0 acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.22.0 + browserslist: 4.22.1 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.3.1 From 6c96edef583d49be3dc28682d13da0ba5a384d47 Mon Sep 17 00:00:00 2001 From: Daniele Calleri Date: Tue, 10 Oct 2023 17:44:26 +0200 Subject: [PATCH 2/3] test: migrate test-app to TypeScript --- ember-autofocus-modifier/package.json | 2 +- pnpm-lock.yaml | 320 +++++++++++++----- test-app/app/components/foo-button.hbs | 4 + test-app/app/components/foo-button.ts | 12 + test-app/config/ember-try.js | 9 + test-app/ember-cli-build.js | 4 +- test-app/package.json | 8 +- test-app/tests/helpers/{index.js => index.ts} | 13 +- .../{autofocus-test.js => autofocus-test.ts} | 32 +- .../tests/{test-helper.js => test-helper.ts} | 7 +- test-app/tsconfig.json | 1 + test-app/types/glint.d.ts | 6 +- test-app/types/global.d.ts | 7 + test-app/types/test-app/index.d.ts | 2 + 14 files changed, 300 insertions(+), 127 deletions(-) create mode 100644 test-app/app/components/foo-button.hbs create mode 100644 test-app/app/components/foo-button.ts rename test-app/tests/helpers/{index.js => index.ts} (78%) rename test-app/tests/integration/modifiers/{autofocus-test.js => autofocus-test.ts} (93%) rename test-app/tests/{test-helper.js => test-helper.ts} (68%) create mode 100644 test-app/types/global.d.ts create mode 100644 test-app/types/test-app/index.d.ts diff --git a/ember-autofocus-modifier/package.json b/ember-autofocus-modifier/package.json index 470e5267..bf63e8b5 100644 --- a/ember-autofocus-modifier/package.json +++ b/ember-autofocus-modifier/package.json @@ -69,7 +69,7 @@ "typescript": "^5.2.2" }, "peerDependencies": { - "ember-source": "^3.28.0 || ^4.0.0" + "ember-source": "^3.28.0 || ^4.0.0 || ^5.0.0" }, "publishConfig": { "registry": "https://registry.npmjs.org/" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec849213..6e296803 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,7 +36,7 @@ importers: specifier: ^4.1.0 version: 4.1.0(ember-source@4.12.2) ember-source: - specifier: ^3.28.0 || ^4.0.0 + specifier: ^3.28.0 || ^4.0.0 || ^5.0.0 version: 4.12.2(@babel/core@7.23.0)(@glimmer/component@1.1.2)(@glint/template@1.2.0)(webpack@5.88.2) devDependencies: '@babel/core': @@ -140,8 +140,8 @@ importers: specifier: 2.9.3 version: 2.9.3(@babel/core@7.23.0)(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.2) '@embroider/macros': - specifier: 1.13.2 - version: 1.13.2(@glint/template@1.2.0) + specifier: 1.13.0 + version: 1.13.0(@glint/template@1.2.0) '@embroider/test-setup': specifier: 3.0.2 version: 3.0.2 @@ -156,13 +156,22 @@ importers: version: 1.2.0(typescript@5.2.2) '@glint/environment-ember-loose': specifier: ^1.2.0 - version: 1.2.0(@glimmer/component@1.1.2)(@glint/template@1.2.0)(ember-cli-htmlbars@6.3.0) + version: 1.2.0(@glimmer/component@1.1.2)(@glint/template@1.2.0)(@types/ember__component@4.0.18)(@types/ember__object@4.0.8)(ember-cli-htmlbars@6.3.0) '@glint/template': specifier: ^1.2.0 version: 1.2.0 '@tsconfig/ember': specifier: ^3.0.1 version: 3.0.1 + '@types/ember__component': + specifier: ^4.0.18 + version: 4.0.18(@babel/core@7.23.0) + '@types/ember__object': + specifier: ^4.0.8 + version: 4.0.8(@babel/core@7.23.0) + '@types/htmlbars-inline-precompile': + specifier: ^3.0.0 + version: 3.0.0 '@types/qunit': specifier: ^2.19.6 version: 2.19.6 @@ -188,8 +197,8 @@ importers: specifier: 6.0.1 version: 6.0.1(ember-source@4.12.2) ember-cli-babel: - specifier: 8.0.0 - version: 8.0.0(@babel/core@7.23.0) + specifier: 7.26.11 + version: 7.26.11 ember-cli-dependency-checker: specifier: 3.3.2 version: 3.3.2(ember-cli@4.12.2) @@ -1568,7 +1577,7 @@ packages: ember-source: '>=3.8.0' dependencies: '@ember/test-waiters': 3.0.2 - '@embroider/macros': 1.13.2(@glint/template@1.2.0) + '@embroider/macros': 1.13.0(@glint/template@1.2.0) '@embroider/util': 1.12.0(@glint/environment-ember-loose@1.2.0)(@glint/template@1.2.0)(ember-source@4.12.2) broccoli-debug: 0.6.5 broccoli-funnel: 3.0.8 @@ -1664,6 +1673,27 @@ packages: - utf-8-validate dev: true + /@embroider/macros@1.13.0(@glint/template@1.2.0): + resolution: {integrity: sha512-V89lvlNPIjcvbuew+FLxcCcgdPO0cZrgHHmX6dHO3TpiweC5G6DN4/QogvdnSprPvWOMQS9u3bSFmR7DBkmSgg==} + engines: {node: 12.* || 14.* || >= 16} + peerDependencies: + '@glint/template': ^1.0.0 + peerDependenciesMeta: + '@glint/template': + optional: true + dependencies: + '@embroider/shared-internals': 2.3.0 + '@glint/template': 1.2.0 + assert-never: 1.2.1 + babel-import-util: 2.0.1 + ember-cli-babel: 7.26.11 + find-up: 5.0.0 + lodash: 4.17.21 + resolve: 1.22.6 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + /@embroider/macros@1.13.2(@glint/template@1.2.0): resolution: {integrity: sha512-AUgJ71xG8kjuTx8XB1AQNBiebJuXRfhcHr318dCwnQz9VRXdYSnEEqf38XRvGYIoCvIyn/3c72LrSwzaJqknOA==} engines: {node: 12.* || 14.* || >= 16} @@ -1684,6 +1714,23 @@ packages: semver: 7.5.4 transitivePeerDependencies: - supports-color + dev: true + + /@embroider/shared-internals@2.3.0: + resolution: {integrity: sha512-5h7hUcci10ixXecJj/peqNQJO8kWe4b4tRx7mZjf7I6+P6zDcdVk3QxQZ+/gwrG6cbEfpLzEGKIEiLjZvPtqIA==} + engines: {node: 12.* || 14.* || >= 16} + dependencies: + babel-import-util: 2.0.1 + debug: 4.3.4 + ember-rfc176-data: 0.3.18 + fs-extra: 9.1.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + resolve-package-path: 4.0.3 + semver: 7.5.4 + typescript-memoize: 1.1.1 + transitivePeerDependencies: + - supports-color /@embroider/shared-internals@2.5.0: resolution: {integrity: sha512-7qzrb7GVIyNqeY0umxoeIvjDC+ay1b+wb2yCVuYTUYrFfLAkLEy9FNI3iWCi3RdQ9OFjgcAxAnwsAiPIMZZ3pQ==} @@ -1733,8 +1780,8 @@ packages: '@glint/template': optional: true dependencies: - '@embroider/macros': 1.13.2(@glint/template@1.2.0) - '@glint/environment-ember-loose': 1.2.0(@glimmer/component@1.1.2)(@glint/template@1.2.0)(ember-cli-htmlbars@6.3.0) + '@embroider/macros': 1.13.0(@glint/template@1.2.0) + '@glint/environment-ember-loose': 1.2.0(@glimmer/component@1.1.2)(@glint/template@1.2.0)(@types/ember__component@4.0.18)(@types/ember__object@4.0.8)(ember-cli-htmlbars@6.3.0) '@glint/template': 1.2.0 broccoli-funnel: 3.0.8 ember-cli-babel: 7.26.11 @@ -1896,7 +1943,7 @@ packages: - supports-color dev: true - /@glint/environment-ember-loose@1.2.0(@glimmer/component@1.1.2)(@glint/template@1.2.0)(ember-cli-htmlbars@6.3.0): + /@glint/environment-ember-loose@1.2.0(@glimmer/component@1.1.2)(@glint/template@1.2.0)(@types/ember__component@4.0.18)(@types/ember__object@4.0.8)(ember-cli-htmlbars@6.3.0): resolution: {integrity: sha512-zj26Gh0cPY8FdT8X+UBUfgXB2Gt7T1RUn9jhlG1O7sZJTCmL8B/UNSZEB4KMAcs/dDv53u/pBl78+JF2B7F+7w==} peerDependencies: '@glimmer/component': ^1.1.2 @@ -1926,6 +1973,8 @@ packages: dependencies: '@glimmer/component': 1.1.2(@babel/core@7.23.0) '@glint/template': 1.2.0 + '@types/ember__component': 4.0.18(@babel/core@7.23.0) + '@types/ember__object': 4.0.8(@babel/core@7.23.0) ember-cli-htmlbars: 6.3.0 dev: true @@ -2398,6 +2447,172 @@ packages: '@types/ms': 0.7.32 dev: true + /@types/ember@4.0.6(@babel/core@7.23.0): + resolution: {integrity: sha512-5CAqPP20l1CWXT1E0NoiBnQUKqwuPSBq0JJVadEIX65CUzVz3zUIFvNoSl1erePwOeCIiQn9pHa568XwZnD6Mw==} + dependencies: + '@types/ember__application': 4.0.8(@babel/core@7.23.0) + '@types/ember__array': 4.0.6(@babel/core@7.23.0) + '@types/ember__component': 4.0.18(@babel/core@7.23.0) + '@types/ember__controller': 4.0.8(@babel/core@7.23.0) + '@types/ember__debug': 4.0.5(@babel/core@7.23.0) + '@types/ember__engine': 4.0.7(@babel/core@7.23.0) + '@types/ember__error': 4.0.3 + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + '@types/ember__polyfills': 4.0.3 + '@types/ember__routing': 4.0.16(@babel/core@7.23.0) + '@types/ember__runloop': 4.0.6(@babel/core@7.23.0) + '@types/ember__service': 4.0.5(@babel/core@7.23.0) + '@types/ember__string': 3.0.11 + '@types/ember__template': 4.0.3 + '@types/ember__test': 4.0.3(@babel/core@7.23.0) + '@types/ember__utils': 4.0.4(@babel/core@7.23.0) + '@types/rsvp': 4.0.5 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__application@4.0.8(@babel/core@7.23.0): + resolution: {integrity: sha512-ruOQCPO4NrGsraja52wbu0lX/oXQxPvUc6pNr7v/5Lix6UdV3jkP9RW3HwWljMEj48gcCvIwuTt0HfIha4T0GQ==} + dependencies: + '@glimmer/component': 1.1.2(@babel/core@7.23.0) + '@types/ember': 4.0.6(@babel/core@7.23.0) + '@types/ember__engine': 4.0.7(@babel/core@7.23.0) + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + '@types/ember__owner': 4.0.6 + '@types/ember__routing': 4.0.16(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__array@4.0.6(@babel/core@7.23.0): + resolution: {integrity: sha512-17tuhICdjh3UoGBKO7We3J58iXuhFuDIRPVNY9GpvayOMGiVkBOMLpaLpu3FpRppJ3qu0UkpwA06uHmcGoBT5g==} + dependencies: + '@types/ember': 4.0.6(@babel/core@7.23.0) + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__component@4.0.18(@babel/core@7.23.0): + resolution: {integrity: sha512-TUTSNL4HLYazBFxc2g/C9GUn4/0akKFfB8IRqjGHyyByKiaNbnf992Dxu6Zfl62QtuhLEHzpfppLGuQLwY448w==} + dependencies: + '@types/ember': 4.0.6(@babel/core@7.23.0) + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__controller@4.0.8(@babel/core@7.23.0): + resolution: {integrity: sha512-5CdPyjpYLvflbPvInIS4ukU6fdusJavVzPnPhTvojG1Nny+eLli5xqGaRWE3itt7ElcPsmi55XfrUQI4lgAFJg==} + dependencies: + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__debug@4.0.5(@babel/core@7.23.0): + resolution: {integrity: sha512-KBEEHws6CClZR7tpIplURyuKSkQhW6ZHsPWvRxTRr5104V0X+jUvv2ef/JZ35YUp01oS4DXqvn6DwCkhZOy0KA==} + dependencies: + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + '@types/ember__owner': 4.0.6 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__engine@4.0.7(@babel/core@7.23.0): + resolution: {integrity: sha512-AxIrs9bsmgup7da6GHNFI6iU/YiUWhme3RRFID7eEU21tGtT2JjlHz1i2TxSk9SKYkUvpoTYR+nnxlpOD3VheA==} + dependencies: + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + '@types/ember__owner': 4.0.6 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__error@4.0.3: + resolution: {integrity: sha512-lQ/ZrPS5s7LjYhML8TCfcKyMumAy7Hh+9CI66WShHumuojSZZm36LhpaUXC0sMf5uF3uKimaVrvvvrvBLDePZg==} + dev: true + + /@types/ember__object@4.0.8(@babel/core@7.23.0): + resolution: {integrity: sha512-ZpMUVWnOr/FespCyriI2I3PvvJLUVkVZx8tlCFql9Cd3dqMF1O4RN4IdaFTWHcT/4rNdjAFKF5CxzoVSzKU/9A==} + dependencies: + '@types/ember': 4.0.6(@babel/core@7.23.0) + '@types/rsvp': 4.0.5 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__owner@4.0.6: + resolution: {integrity: sha512-IwTLGZ6DuKCGvLJd1lSFo090cErMwOletj0MSOIIav9CakcSJlMpn55lwKxnWq52ve0zo0jruzan6SDSj4sFuA==} + dev: true + + /@types/ember__polyfills@4.0.3: + resolution: {integrity: sha512-B/UF8BlQGKo5ixqfNI8D3E3wrR/Nxf6c9Z4f10IdVE5oeRUs8cciY4S1xImoYZQ3QhZKvXDUh1Tpr2S3QqHIxw==} + dev: true + + /@types/ember__routing@4.0.16(@babel/core@7.23.0): + resolution: {integrity: sha512-ydxQ7LVkkNEsnibnRX8hofF/6uHFRwdbTfS3o3pHC5rchfhEg2/G2hPOdF60UIikTcn6JfekjViz+HDwNwqUQw==} + dependencies: + '@types/ember': 4.0.6(@babel/core@7.23.0) + '@types/ember__controller': 4.0.8(@babel/core@7.23.0) + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + '@types/ember__service': 4.0.5(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__runloop@4.0.6(@babel/core@7.23.0): + resolution: {integrity: sha512-Lh/4ViAiD4xcAEyhcTjz3p79j7cQSHc2Y+eZZyXhASugHjdKI5e0SzpZTWiJipE4n6aqB68BTdhiu5K8p5Zbrg==} + dependencies: + '@types/ember': 4.0.6(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__service@4.0.5(@babel/core@7.23.0): + resolution: {integrity: sha512-olpjH+VrWJCeEDyy0/YJ4iv7K9XXgn0JO44+smuCOinWEUSyEehPb40bn4ol4KKIK02cPJgA8aYi0Fy0jebOsg==} + dependencies: + '@types/ember__object': 4.0.8(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__string@3.0.11: + resolution: {integrity: sha512-Z2bHbA/z6u+niTXamdHBCXIMI8d8k7K1WyERDmgB/uG7HLkGDO6CGmeNmbHKjdxzYR52kvKHFoYoK9EavVvpYA==} + dev: true + + /@types/ember__template@4.0.3: + resolution: {integrity: sha512-lATq4nSKq/V7Gw261HwoEgpu5jbqDv7/FeO19/Cvh+jbifAvrYfDPm1hOSShj7Ths7yL16O0KeuPQag3rSAv9g==} + dev: true + + /@types/ember__test@4.0.3(@babel/core@7.23.0): + resolution: {integrity: sha512-aPfPBdWaOSj9Tc5ol/KU1vA2M35iB8knsmSxopIZHb4Mx/oTuAp3JzC4zm4DZYfuF5+l/rng6Zru+4PkG2KQRw==} + dependencies: + '@types/ember__application': 4.0.8(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@types/ember__utils@4.0.4(@babel/core@7.23.0): + resolution: {integrity: sha512-RP6Phi3/oYskNxrH2rm4ZK0yNjxCRKRyY0A796gE2Mv31S6+kkRobqZ/LpH9bVa2FUgdl/4XZIyX/W4L1UWwig==} + dependencies: + '@types/ember': 4.0.6(@babel/core@7.23.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + /@types/eslint-scope@3.7.5: resolution: {integrity: sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==} dependencies: @@ -2455,6 +2670,10 @@ packages: '@types/minimatch': 5.1.2 '@types/node': 20.8.4 + /@types/htmlbars-inline-precompile@3.0.0: + resolution: {integrity: sha512-n1YwM/Q937KmS9W4Ytran71nzhhcT2FDQI00eRGBNUyeErLZspBdDBewEe1F8tcRlUdsCVo2AZBLJsRjEceTRg==} + dev: true + /@types/http-cache-semantics@4.0.2: resolution: {integrity: sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==} dev: true @@ -2529,6 +2748,10 @@ packages: '@types/glob': 8.1.0 '@types/node': 20.8.4 + /@types/rsvp@4.0.5: + resolution: {integrity: sha512-Vhmt0IASo026ZU20O3KP1nBZOCXduQ/Ei+vpgs0hfDZHysSIfhnMc61ZMIUuaazfYS0J9EhLz+jJsft6iYX4Kw==} + dev: true + /@types/semver@7.5.3: resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} dev: true @@ -3379,17 +3602,6 @@ packages: resolve: 1.22.6 dev: true - /babel-plugin-module-resolver@5.0.0: - resolution: {integrity: sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==} - engines: {node: '>= 16'} - dependencies: - find-babel-config: 2.0.0 - glob: 8.1.0 - pkg-up: 3.1.0 - reselect: 4.1.8 - resolve: 1.22.6 - dev: true - /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.23.0): resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} peerDependencies: @@ -3660,25 +3872,6 @@ packages: transitivePeerDependencies: - supports-color - /broccoli-babel-transpiler@8.0.0(@babel/core@7.23.0): - resolution: {integrity: sha512-3HEp3flvasUKJGWERcrPgM1SWvHJ0O/fmbEtY9L4kDyMSnqjY6hTYvNvgWCIgbwXAYAUlZP0vjAQsmyLNGLwFw==} - engines: {node: 16.* || >= 18} - peerDependencies: - '@babel/core': ^7.17.9 - dependencies: - '@babel/core': 7.23.0 - broccoli-persistent-filter: 3.1.3 - clone: 2.1.2 - hash-for-dep: 1.5.1 - heimdalljs: 0.2.6 - heimdalljs-logger: 0.1.10 - json-stable-stringify: 1.0.2 - rsvp: 4.8.5 - workerpool: 6.5.0 - transitivePeerDependencies: - - supports-color - dev: true - /broccoli-builder@0.18.14: resolution: {integrity: sha512-YoUHeKnPi4xIGZ2XDVN9oHNA9k3xF5f5vlA+1wvrxIIDXqQU97gp2FxVAF503Zxdtt0C5CRB5n+47k2hlkaBzA==} engines: {node: '>= 0.10.0'} @@ -5394,7 +5587,7 @@ packages: '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.0) '@babel/plugin-proposal-decorators': 7.23.0(@babel/core@7.23.0) '@babel/preset-env': 7.22.20(@babel/core@7.23.0) - '@embroider/macros': 1.13.2(@glint/template@1.2.0) + '@embroider/macros': 1.13.0(@glint/template@1.2.0) '@embroider/shared-internals': 2.5.0 babel-loader: 8.3.0(@babel/core@7.23.0)(webpack@5.88.2) babel-plugin-ember-modules-api-polyfill: 3.5.0 @@ -5480,43 +5673,6 @@ packages: transitivePeerDependencies: - supports-color - /ember-cli-babel@8.0.0(@babel/core@7.23.0): - resolution: {integrity: sha512-nf8BFgm6jy+B5tKeovHtcErfTZwzItsB6pJfTJGGR6tg74KLWtLFB5u/zB9S6c8ww1QacMltsffFz2iedCDBPw==} - engines: {node: 16.* || 18.* || >= 20} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.0) - '@babel/plugin-proposal-decorators': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.0) - '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-runtime': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.0) - '@babel/preset-env': 7.22.20(@babel/core@7.23.0) - '@babel/runtime': 7.12.18 - amd-name-resolver: 1.3.1 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.23.0) - babel-plugin-ember-data-packages-polyfill: 0.1.2 - babel-plugin-ember-modules-api-polyfill: 3.5.0 - babel-plugin-module-resolver: 5.0.0 - broccoli-babel-transpiler: 8.0.0(@babel/core@7.23.0) - broccoli-debug: 0.6.5 - broccoli-funnel: 3.0.8 - broccoli-source: 3.0.1 - calculate-cache-key-for-tree: 2.0.0 - clone: 2.1.2 - ember-cli-babel-plugin-helpers: 1.1.1 - ember-cli-version-checker: 5.1.2 - ensure-posix-path: 1.1.1 - resolve-package-path: 4.0.3 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: true - /ember-cli-dependency-checker@3.3.2(ember-cli@4.12.2): resolution: {integrity: sha512-PwkrW5oYsdPWwt+0Tojufmv/hxVETTjkrEdK7ANQB2VSnqpA5UcYubwpQM9ONuR2J8wyNDMwEHlqIrk/FYtBsQ==} engines: {node: '>= 6'} @@ -7080,14 +7236,6 @@ packages: json5: 0.5.1 path-exists: 3.0.0 - /find-babel-config@2.0.0: - resolution: {integrity: sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==} - engines: {node: '>=16.0.0'} - dependencies: - json5: 2.2.3 - path-exists: 4.0.0 - dev: true - /find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} engines: {node: '>=8'} diff --git a/test-app/app/components/foo-button.hbs b/test-app/app/components/foo-button.hbs new file mode 100644 index 00000000..6fb68c07 --- /dev/null +++ b/test-app/app/components/foo-button.hbs @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/test-app/app/components/foo-button.ts b/test-app/app/components/foo-button.ts new file mode 100644 index 00000000..d87a2f0a --- /dev/null +++ b/test-app/app/components/foo-button.ts @@ -0,0 +1,12 @@ +import Component from '@glimmer/component'; +import { tracked } from '@glimmer/tracking'; +import { action } from '@ember/object'; + +export default class FooButtonComponent extends Component { + @tracked bar: boolean = false; + + @action + updateBar(): void { + this.bar = !this.bar; + } +} diff --git a/test-app/config/ember-try.js b/test-app/config/ember-try.js index e89cc040..783e93fd 100644 --- a/test-app/config/ember-try.js +++ b/test-app/config/ember-try.js @@ -3,6 +3,11 @@ const getChannelURL = require('ember-source-channel-url'); const { embroiderSafe, embroiderOptimized } = require('@embroider/test-setup'); +// Needed for ember-source < 4.8, when preview types were first shipped +const emberTypesPackages = { + '@types/ember__application': '^4.0.8', +}; + module.exports = async function () { return { usePnpm: true, @@ -12,6 +17,7 @@ module.exports = async function () { npm: { devDependencies: { 'ember-source': '~3.24.0', + ...emberTypesPackages, }, }, }, @@ -20,6 +26,7 @@ module.exports = async function () { npm: { devDependencies: { 'ember-source': '~3.28.0', + ...emberTypesPackages, }, }, }, @@ -28,6 +35,7 @@ module.exports = async function () { npm: { devDependencies: { 'ember-source': '~4.4.0', + ...emberTypesPackages, }, }, }, @@ -83,6 +91,7 @@ module.exports = async function () { npm: { devDependencies: { 'ember-source': '~3.28.0', + ...emberTypesPackages, }, ember: { edition: 'classic', diff --git a/test-app/ember-cli-build.js b/test-app/ember-cli-build.js index 3e31aeeb..422b569e 100644 --- a/test-app/ember-cli-build.js +++ b/test-app/ember-cli-build.js @@ -14,9 +14,7 @@ module.exports = function (defaults) { packageRules: [ { package: 'test-app', - components: { - '{{foo-button}}': { safeToIgnore: true }, - }, + components: {}, }, ], }); diff --git a/test-app/package.json b/test-app/package.json index 2311e0b0..34306feb 100644 --- a/test-app/package.json +++ b/test-app/package.json @@ -18,6 +18,7 @@ "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint . --cache", "lint:js:fix": "eslint . --fix", + "lint:types": "glint", "start": "ember serve", "test": "concurrently \"pnpm:lint\" \"pnpm:test:*\" --names \"lint,test:\"", "test:ember": "ember test" @@ -27,7 +28,7 @@ "@ember/optional-features": "2.0.0", "@ember/string": "3.1.1", "@ember/test-helpers": "2.9.3", - "@embroider/macros": "1.13.2", + "@embroider/macros": "1.13.0", "@embroider/test-setup": "3.0.2", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", @@ -35,6 +36,9 @@ "@glint/environment-ember-loose": "^1.2.0", "@glint/template": "^1.2.0", "@tsconfig/ember": "^3.0.1", + "@types/ember__component": "^4.0.18", + "@types/ember__object": "^4.0.8", + "@types/htmlbars-inline-precompile": "^3.0.0", "@types/qunit": "^2.19.6", "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.3", @@ -43,7 +47,7 @@ "ember-auto-import": "2.6.3", "ember-cli": "4.12.2", "ember-cli-app-version": "6.0.1", - "ember-cli-babel": "8.0.0", + "ember-cli-babel": "7.26.11", "ember-cli-dependency-checker": "3.3.2", "ember-cli-htmlbars": "6.3.0", "ember-cli-inject-live-reload": "2.1.0", diff --git a/test-app/tests/helpers/index.js b/test-app/tests/helpers/index.ts similarity index 78% rename from test-app/tests/helpers/index.js rename to test-app/tests/helpers/index.ts index 7f70de80..3822198f 100644 --- a/test-app/tests/helpers/index.js +++ b/test-app/tests/helpers/index.ts @@ -1,3 +1,4 @@ +import type { SetupTestOptions } from 'ember-qunit'; import { setupApplicationTest as upstreamSetupApplicationTest, setupRenderingTest as upstreamSetupRenderingTest, @@ -8,7 +9,10 @@ import { // test setup functions. This way, you can easily extend the setup that is // needed per test type. -function setupApplicationTest(hooks, options) { +function setupApplicationTest( + hooks: NestedHooks, + options: SetupTestOptions, +): void { upstreamSetupApplicationTest(hooks, options); // Additional setup for application tests can be done here. @@ -27,13 +31,16 @@ function setupApplicationTest(hooks, options) { // setupMirage(hooks); // ember-cli-mirage } -function setupRenderingTest(hooks, options) { +function setupRenderingTest( + hooks: NestedHooks, + options: SetupTestOptions, +): void { upstreamSetupRenderingTest(hooks, options); // Additional setup for rendering tests can be done here. } -function setupTest(hooks, options) { +function setupTest(hooks: NestedHooks, options: SetupTestOptions): void { upstreamSetupTest(hooks, options); // Additional setup for unit tests can be done here. diff --git a/test-app/tests/integration/modifiers/autofocus-test.js b/test-app/tests/integration/modifiers/autofocus-test.ts similarity index 93% rename from test-app/tests/integration/modifiers/autofocus-test.js rename to test-app/tests/integration/modifiers/autofocus-test.ts index a2155a0e..087845b0 100644 --- a/test-app/tests/integration/modifiers/autofocus-test.js +++ b/test-app/tests/integration/modifiers/autofocus-test.ts @@ -2,12 +2,7 @@ import { find, render, tab } from '@ember/test-helpers'; import { setupRenderingTest } from 'ember-qunit'; import { module, test } from 'qunit'; -import Component from '@glimmer/component'; -import { tracked } from '@glimmer/tracking'; -import { setComponentTemplate } from '@ember/component'; -import { action } from '@ember/object'; - -import hbs from 'htmlbars-inline-precompile'; +import { hbs } from 'ember-cli-htmlbars'; module('Integration | Modifier | autofocus', function (hooks) { setupRenderingTest(hooks); @@ -235,27 +230,6 @@ module('Integration | Modifier | autofocus', function (hooks) { }); test('should not cause rerender assertions on Glimmer components when a focus modifier is present', async function (assert) { - class FooButtonComponent extends Component { - @tracked bar; - - @action - updateBar() { - this.bar = !this.bar; - } - } - setComponentTemplate( - hbs` - - `, - FooButtonComponent, - ); - this.owner.register('component:foo-button', FooButtonComponent); - await render(hbs`
this is not a focusable element @@ -314,8 +288,8 @@ module('Integration | Modifier | autofocus', function (hooks) { }); test('tabindex isnt added to already focusable elements', async function (assert) { - let assertElement = (element) => { - let elem = find(element); + const assertElement = (element: string): void => { + const elem = find(element); assert.dom(elem).isFocused(); assert.dom(elem).doesNotHaveAttribute('tabindex'); diff --git a/test-app/tests/test-helper.js b/test-app/tests/test-helper.ts similarity index 68% rename from test-app/tests/test-helper.js rename to test-app/tests/test-helper.ts index d33c1ee7..1851cf0b 100644 --- a/test-app/tests/test-helper.js +++ b/test-app/tests/test-helper.ts @@ -1,10 +1,13 @@ -import Application from '../app'; -import config from '../config/environment'; import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; +import Application from 'test-app/app'; +import config from 'test-app/config/environment'; + +import 'qunit-dom'; + setApplication(Application.create(config.APP)); setup(QUnit.assert); diff --git a/test-app/tsconfig.json b/test-app/tsconfig.json index 6d69f8a1..18eea9f6 100644 --- a/test-app/tsconfig.json +++ b/test-app/tsconfig.json @@ -5,6 +5,7 @@ // layout, which is not resolvable with the Node resolution algorithm, to // work with TypeScript. "baseUrl": ".", + "lib": ["es2015"], // Type check only the code specifically refered to in the source code. "skipLibCheck": true, "paths": { diff --git a/test-app/types/glint.d.ts b/test-app/types/glint.d.ts index 2a6c3057..4764cb2e 100644 --- a/test-app/types/glint.d.ts +++ b/test-app/types/glint.d.ts @@ -1,5 +1,9 @@ import '@glint/environment-ember-loose'; +import type AutofocusRegistry from 'ember-autofocus-modifier/template-registry'; +import type FooButton from 'test-app/components/foo-button'; declare module '@glint/environment-ember-loose/registry' { - export default interface Registry {} + export default interface Registry extends AutofocusRegistry { + FooButton: typeof FooButton; + } } diff --git a/test-app/types/global.d.ts b/test-app/types/global.d.ts new file mode 100644 index 00000000..8aba43c6 --- /dev/null +++ b/test-app/types/global.d.ts @@ -0,0 +1,7 @@ +// Types for compiled templates +declare module 'test-app/templates/*' { + import type { TemplateFactory } from 'ember-cli-htmlbars'; + + const tmpl: TemplateFactory; + export default tmpl; +} diff --git a/test-app/types/test-app/index.d.ts b/test-app/types/test-app/index.d.ts new file mode 100644 index 00000000..37d090ab --- /dev/null +++ b/test-app/types/test-app/index.d.ts @@ -0,0 +1,2 @@ +declare module 'test-app/config/environment'; +declare module 'test-app/app'; From 4f9510a76953377320d6cffa23c771a4b390d8bf Mon Sep 17 00:00:00 2001 From: Daniele Calleri Date: Tue, 10 Oct 2023 17:46:30 +0200 Subject: [PATCH 3/3] chore: add CI jobs to check TypeScript compatibility --- .github/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 33 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce434b60..179effe6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -77,3 +77,35 @@ jobs: - name: Run tests run: pnpm ember try:one ${{ matrix.ember-try-scenario }} --skip-cleanup working-directory: test-app + + typescript-compatibility: + name: Type checking - ${{ matrix.typescript-scenario }} + runs-on: ubuntu-latest + + needs: [test] + + strategy: + fail-fast: false + matrix: + typescript-scenario: + - typescript@5.0 + - typescript@5.1 + - typescript@next + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Install pnpm + uses: wyvox/action-setup-pnpm@v3 + with: + pnpm-version: 8.5.1 + node-version: 16.x + args: "--frozen-lockfile" + - name: Update TS version on addon package + run: pnpm add -D ${{ matrix.typescript-scenario }} + working-directory: ember-autofocus-modifier + - name: Update TS version on test-app package + run: pnpm add -D ${{ matrix.typescript-scenario }} + working-directory: test-app + - name: Type checking + run: pnpm lint:types diff --git a/package.json b/package.json index 650bc7a0..119abc52 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "build": "pnpm --filter ember-autofocus-modifier build", "lint": "pnpm --filter '*' lint", "lint:fix": "pnpm --filter '*' lint:fix", + "lint:types": "pnpm --filter '*' lint:types", "prepare": "pnpm build", "start": "concurrently 'pnpm:start:*' --restart-after 5000 --prefix-colors cyan,white,yellow", "start:addon": "pnpm --filter ember-autofocus-modifier start",