diff --git a/.eslintrc.js b/._eslintrc.js similarity index 99% rename from .eslintrc.js rename to ._eslintrc.js index fb228fe9dea..6194b419432 100644 --- a/.eslintrc.js +++ b/._eslintrc.js @@ -100,7 +100,7 @@ module.exports = { env: { browser: true, node: false, - es6: true, + es2022: true, }, overrides: [ { diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 83ff84998f3..00000000000 --- a/.eslintignore +++ /dev/null @@ -1,54 +0,0 @@ -# unconventional js -**/blueprints/*/*files/ -**/vendor/ -**/*.d.ts - -# compiled output -**/dist/ -**/dist-control/ -**/dist-experiment/ -**/dist-tests/ -**/dist-test/ -**/tmp/ -**/unstable-preview-types/ -/packages/-ember-data/docs/ -/packages/tracking/ -/packages/request/ -/packages/store/addon/ -/packages/adapter/addon/ -/packages/serializer/addon/ -/packages/model/addon/ -/packages/json-api/addon/ -/packages/graph/addon/ -/packages/legacy-compat/addon/ -/packages/request-utils/addon/ -/packages/rest/addon/ -/packages/active-record/addon/ -/packages/data-worker/addon/ -/packages/core/ -/packages/holodeck/ -/packages/schema-record/ -/packages/schema/ -/tests/warp-drive__schema/ -/packages/diagnostic/ - -**/DEBUG/ - -# dependencies -**/bower_components/ -**/node_modules/ -.broccoli-cache - -# misc -**/coverage/ -!.* -/.yarn/ -/.git/ - -# ember-try -**/.node_modules.ember-try/ -**/bower.json.ember-try -**/package.json.ember-try - -# ember-data -**/node-tests/fixtures/ diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index c99d1fcd2e5..457573793c2 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -57,6 +57,12 @@ runs: with: bun-version: latest + - name: 'Setup local TurboRepo server' + if: ${{ inputs.repo-token }} + uses: felixmosh/turborepo-gh-artifacts@v2 + with: + repo-token: ${{ inputs.repo-token }} + - name: Configure Parallel Builds if: ${{ inputs.parallel-build == 'true' }} shell: bash diff --git a/.github/workflows/alpha-release.yml b/.github/workflows/alpha-release.yml index ddad5090f0c..a4d9c9cd841 100644 --- a/.github/workflows/alpha-release.yml +++ b/.github/workflows/alpha-release.yml @@ -6,6 +6,11 @@ on: - cron: '0 20 * * 2' # weekly (Tuesday) 12 PM PST - cron: '0 20 * * 5' # weekly (Friday) 12 PM PST +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + jobs: release: name: Run publish script @@ -26,6 +31,7 @@ jobs: - uses: ./.github/actions/setup with: install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Make sure git user is setup run: | git config --local user.email 'tomster@emberjs.com' diff --git a/.github/workflows/asset-size-check.yml b/.github/workflows/asset-size-check.yml index 419b1aa89a3..60da0891d31 100644 --- a/.github/workflows/asset-size-check.yml +++ b/.github/workflows/asset-size-check.yml @@ -9,6 +9,11 @@ on: - synchronize - ready_for_review +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: asset-size-${{ github.head_ref || github.ref_name }} cancel-in-progress: true diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index e194605094c..0877955fa7e 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -3,6 +3,11 @@ name: Canary-Mirror-Beta Release on: workflow_dispatch: +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + jobs: release: name: Run publish script @@ -25,6 +30,7 @@ jobs: with: build-addons: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Make sure git user is setup run: | git config --local user.email 'tomster@emberjs.com' diff --git a/.github/workflows/compat-tests.yml b/.github/workflows/compat-tests.yml index e0c9a182e46..9b66305fe2e 100644 --- a/.github/workflows/compat-tests.yml +++ b/.github/workflows/compat-tests.yml @@ -5,6 +5,11 @@ on: branches: - main +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: compat-${{ github.head_ref || github.ref_name }} cancel-in-progress: true @@ -19,6 +24,7 @@ jobs: with: restore-broccoli-cache: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Run Tests run: pnpm test:fastboot embroider: @@ -30,6 +36,7 @@ jobs: with: restore-broccoli-cache: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Run Tests run: pnpm test:embroider env: @@ -40,6 +47,8 @@ jobs: steps: - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - uses: ./.github/actions/setup + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install dependencies w/o lockfile run: pnpm install --no-lockfile - name: Basic Tests @@ -58,5 +67,6 @@ jobs: node-version: ${{ matrix.node-version }} restore-broccoli-cache: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Basic Tests run: pnpm test diff --git a/.github/workflows/deprecations-check.yml b/.github/workflows/deprecations-check.yml index f4386f25098..b67656c0acf 100644 --- a/.github/workflows/deprecations-check.yml +++ b/.github/workflows/deprecations-check.yml @@ -3,6 +3,11 @@ name: 'Check Deprecations' on: workflow_dispatch: +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + jobs: test-all-deprecations: runs-on: ubuntu-latest diff --git a/.github/workflows/docs-and-blueprint-tests.yml b/.github/workflows/docs-and-blueprint-tests.yml index 4272c4599f2..6675b603cef 100644 --- a/.github/workflows/docs-and-blueprint-tests.yml +++ b/.github/workflows/docs-and-blueprint-tests.yml @@ -5,6 +5,11 @@ on: branches: - main +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: docs-${{ github.head_ref || github.ref_name }} cancel-in-progress: true @@ -18,7 +23,8 @@ jobs: - uses: ./.github/actions/setup with: install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Test Docs run: pnpm test:docs - name: Test Blueprints - run: pnpm --filter blueprint-tests run test + run: pnpm test:blueprints diff --git a/.github/workflows/infra-tests.yml b/.github/workflows/infra-tests.yml index 7d35ecab11b..9e530053f54 100644 --- a/.github/workflows/infra-tests.yml +++ b/.github/workflows/infra-tests.yml @@ -9,6 +9,11 @@ on: - synchronize - ready_for_review +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: infra-${{ github.head_ref || github.ref_name }} cancel-in-progress: true @@ -24,6 +29,7 @@ jobs: with: restore-broccoli-cache: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: pnpm test infra compatWith 3.0 env: COMPAT_WITH: '3.0' diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 61ff1704050..859b11d28e5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,6 +12,11 @@ on: tags: - '*' +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: ci-${{ github.head_ref || github.ref_name }} cancel-in-progress: true @@ -26,10 +31,11 @@ jobs: with: restore-lint-caches: true install: true - - name: Lint js - run: pnpm lint:js - - name: Check for TypeScript problems - run: pnpm problems + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Lint + run: pnpm lint + - name: Check Uncompiled Packages for TypeScript Compilation Errors + run: pnpm check:types special-build-tests: timeout-minutes: 20 @@ -40,6 +46,7 @@ jobs: with: restore-broccoli-cache: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - if: | github.event_name == 'pull_request' && ( github.base_ref == 'main' || github.base_ref == 'beta' @@ -82,6 +89,7 @@ jobs: jobs: 2 parallel-build: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Check for Test Failure Retry id: retry-test-failures @@ -147,6 +155,7 @@ jobs: with: restore-broccoli-cache: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Basic tests with ${{ matrix.scenario }} timeout-minutes: 12 env: @@ -173,6 +182,7 @@ jobs: with: restore-broccoli-cache: true install: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Basic tests with ${{ matrix.release }} env: CI: true diff --git a/.github/workflows/partner-tests.yml b/.github/workflows/partner-tests.yml index c1a3b19a65c..bf5b026d675 100644 --- a/.github/workflows/partner-tests.yml +++ b/.github/workflows/partner-tests.yml @@ -9,6 +9,11 @@ on: - synchronize - ready_for_review +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: partners-${{ github.head_ref || github.ref_name }} cancel-in-progress: true @@ -54,6 +59,7 @@ jobs: restore-broccoli-cache: true install: true build-addons: true + repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Generate package tarballs run: node ./scripts/packages-for-commit.js - name: Run Tests diff --git a/.github/workflows/perf-check.yml b/.github/workflows/perf-check.yml index 0b2edaf948c..9294d34a140 100644 --- a/.github/workflows/perf-check.yml +++ b/.github/workflows/perf-check.yml @@ -9,6 +9,11 @@ on: - synchronize - ready_for_review +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: perf-${{ github.head_ref || github.ref_name }} cancel-in-progress: true diff --git a/.github/workflows/perf-over-release.yml b/.github/workflows/perf-over-release.yml index 3a89fb599ec..973863d2138 100644 --- a/.github/workflows/perf-over-release.yml +++ b/.github/workflows/perf-over-release.yml @@ -9,6 +9,11 @@ on: - synchronize - ready_for_review +env: + TURBO_API: http://127.0.0.1:9080 + TURBO_TOKEN: this-is-not-a-secret + TURBO_TEAM: myself + concurrency: group: perf-release-${{ github.head_ref || github.ref_name }} cancel-in-progress: true diff --git a/.gitignore b/.gitignore index 42cb9ef79da..1a322e6351d 100644 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,7 @@ packages/rest/addon packages/active-record/addon packages/data-worker/addon packages/schema-record/addon/ -packages/core/addon/ +packages/core-types/addon # dependencies bower_components @@ -30,10 +30,11 @@ node_modules scripts/asset-size-tracking/current-data.json # misc +.turbo/ .env* .pnp* .sass-cache -/.eslintcache +.eslintcache /onnect.lock coverage/* libpeerconnection.log @@ -65,6 +66,6 @@ benchmarks/results/*.json /packages/*/DEBUG /tests/*/DEBUG -.vscode/ +!.vscode/ .idea/ *.iml diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 2dbbfb3c230..00000000000 --- a/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -singleQuote: true -trailingComma: 'es5' -printWidth: 120 diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000000..65bfc3b8d4c --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,5 @@ +module.exports = { + singleQuote: true, + trailingComma: 'es5', + printWidth: 120 +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..1e8082415c2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "turbo.json": "jsonc" + } +} \ No newline at end of file diff --git a/@types/ember-data-qunit-asserts/index.d.ts b/@types/ember-data-qunit-asserts/index.d.ts index aaa5bbac5a4..a700d301da9 100644 --- a/@types/ember-data-qunit-asserts/index.d.ts +++ b/@types/ember-data-qunit-asserts/index.d.ts @@ -1,6 +1,6 @@ import type { CacheOperation, NotificationType } from "@ember-data/store/-private/managers/notification-manager"; import type { StableDocumentIdentifier } from "@ember-data/store/-types/cache/identifier"; -import type { StableRecordIdentifier } from "@warp-drive/core"; +import type { StableRecordIdentifier } from "@warp-drive/core-types"; declare global { interface DeprecationConfig { diff --git a/@types/ember/index.d.ts b/@types/ember/index.d.ts deleted file mode 100644 index 33a43970320..00000000000 --- a/@types/ember/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -import 'ember-source/types'; diff --git a/config/eslint/base.cjs b/config/eslint/base.cjs new file mode 100644 index 00000000000..887487e8096 --- /dev/null +++ b/config/eslint/base.cjs @@ -0,0 +1,57 @@ +const path = require('path'); +const prettierPath = path.join(process.cwd(), '../../.prettierrc.js'); +const prettierConfig = require(prettierPath); + +function rules() { + return { + eqeqeq: 'error', + 'new-cap': ['error', { capIsNew: false }], + 'no-caller': 'error', + 'no-cond-assign': ['error', 'except-parens'], + 'no-console': 'error', // no longer recommended in eslint v6, this restores it + 'no-eq-null': 'error', + 'no-eval': 'error', + 'no-unused-vars': ['error', { args: 'none' }], + + // Too many false positives + // See https://github.com/eslint/eslint/issues/11899 and similar + 'require-atomic-updates': 'off', + + 'prefer-rest-params': 'off', + 'prefer-const': 'error', + + "prettier/prettier": [ + "error", + prettierConfig, + { + "usePrettierrc": false + } + ] + }; +} + +function plugins() { + return ['prettier']; +} + +function extend() { + return ['eslint:recommended', 'plugin:prettier/recommended']; +} + +function settings() { + return { + globals: {}, + env: { + browser: true, + node: false, + es2022: true, + }, + } +} + +module.exports = { + rules, + plugins, + extend, + settings, +}; diff --git a/config/eslint/ignore.cjs b/config/eslint/ignore.cjs new file mode 100644 index 00000000000..32b454dc023 --- /dev/null +++ b/config/eslint/ignore.cjs @@ -0,0 +1,36 @@ +const RULES = [ + // # unconventional js + 'blueprints/', + 'vendor', + + // # Declaration files + '**/*.d.ts', + + // # compiled output + 'dist', + 'dist-*', + 'tmp', + 'DEBUG', + 'DEBUG*', + 'tmp*', + '.git', + '.broccoli-cache', + 'unstable-preview-types', + + // # Special Cases + 'docs', + 'coverage', + 'node_modules', + '.node_modules.ember-try', + 'package.json.ember-try', +]; + +function ignoreRules(allowAddon) { + const rules = allowAddon ? [] : ['addon']; + + return rules.concat(RULES); +} + +module.exports = { + ignoreRules +}; diff --git a/config/eslint/imports.cjs b/config/eslint/imports.cjs new file mode 100644 index 00000000000..97fc0a04ce6 --- /dev/null +++ b/config/eslint/imports.cjs @@ -0,0 +1,45 @@ +// See https://github.com/lydell/eslint-plugin-simple-import-sort#custom-grouping +const ImportSortGroups = [ + // Side effect imports. + [`^\u0000`], + // Glimmer & Ember Dependencies + [`^(@ember/|@glimmer|ember$)`], + // Packages. + // Things that start with a letter (or digit or underscore), or `@` followed by a letter. + // But not our packages or packages starting with ember- + // eslint-disable-next-line no-useless-escape + [`^(?!@ember\-data)(?!warp\-drive)(?!ember-)(@?\\w)`], + // Packages starting with ember- + // eslint-disable-next-line no-useless-escape + [`^ember\-`], + // Our Packages. + // Things that start with @ember-data + // eslint-disable-next-line no-useless-escape + [`^(@ember\-data|@warp\-drive)`], + // Absolute imports and other imports such as Vue-style `@/foo`. + // Anything that does not start with a dot. + ['^[^.]'], + // Relative imports. + // Anything that starts with a dot. + // eslint-disable-next-line no-useless-escape + [`^\.`], +]; + +function rules() { + return { + // Imports + 'import/first': 'error', + 'import/newline-after-import': 'error', + 'import/no-duplicates': 'error', + 'simple-import-sort/imports': ['error', { groups: ImportSortGroups }], + }; +} + +function plugins() { + return ['simple-import-sort', 'import']; +} + +module.exports = { + plugins, + rules, +}; diff --git a/config/eslint/isolation.cjs b/config/eslint/isolation.cjs new file mode 100644 index 00000000000..c4b9c20c868 --- /dev/null +++ b/config/eslint/isolation.cjs @@ -0,0 +1,69 @@ +const RESTRICTED_IMPORTS = [ + '@ember/-internals/metal', + '@ember/application', + '@ember/application/namespace', + '@ember/array', + '@ember/array/proxy', + '@ember/component', + '@ember/component/helper', + '@ember/controller', + '@ember/debug', + '@ember/debug/data-adapter', + '@ember/edition-utils', + '@ember/object', + '@ember/object/compat', + '@ember/object/computed', + '@ember/object/evented', + '@ember/object/internals', + '@ember/object/mixin', + '@ember/object/promise-proxy-mixin', + '@ember/object/proxy', + '@ember/owner', + '@ember/routing', + '@ember/routing/route', + '@ember/runloop', + '@ember/service', + '@ember/string', + '@ember/test-helpers', + '@ember/test-waiters', + '@ember/utils', + '@ember/version', + '@glimmer/component', + '@glimmer/env', + '@glimmer/runtime', + '@glimmer/tracking', + '@glimmer/tracking/primitives/cache', + '@glimmer/validator', + 'ember-inflector', + 'ember-qunit', + 'ember-source', + 'ember-source/types', + 'ember', + 'qunit', + 'testem' +]; +function rules(options) { + return { + 'no-restricted-imports': [ + 'error', + { + paths: options?.allowedImports ? RESTRICTED_IMPORTS.filter( + (path) => { + return !options.allowedImports.includes(path) + } + ) : RESTRICTED_IMPORTS, + }, + ], + 'no-restricted-globals': [ + 'error', + { + name: 'QUnit', + message: 'Please use the `qunit` import instead of referencing `QUnit` directly.', + }, + ], + } +} + +module.exports = { + rules +}; diff --git a/config/eslint/node.cjs b/config/eslint/node.cjs new file mode 100644 index 00000000000..75f82e0f190 --- /dev/null +++ b/config/eslint/node.cjs @@ -0,0 +1,25 @@ +function defaults(config) { + const result = { + files: !config?.useModules ? ['./babel.config.js', './.eslintrc.cjs', './index.js', './addon-main.cjs', './addon-main.js'] : [], + parserOptions: { + sourceType: config?.useModules ? 'module' : 'script', + ecmaVersion: 2022, + }, + env: { + browser: false, + node: true, + es6: true, + }, + globals: config?.globals || {}, + }; + + if (config?.files) { + result.files.push(...config.files); + } + + return result; +} + +module.exports = { + defaults +}; diff --git a/config/eslint/parser.cjs b/config/eslint/parser.cjs new file mode 100644 index 00000000000..5c92be34f05 --- /dev/null +++ b/config/eslint/parser.cjs @@ -0,0 +1,19 @@ +function defaults() { + return { + parser: '@babel/eslint-parser', + root: true, + parserOptions: { + ecmaVersion: 2022, + sourceType: 'module', + babelOptions: { + // eslint-disable-next-line node/no-unpublished-require + plugins: [[require.resolve('@babel/plugin-proposal-decorators'), { legacy: true }]], + }, + requireConfigFile: false, + }, + }; +} + +module.exports = { + defaults +}; diff --git a/config/eslint/typescript.cjs b/config/eslint/typescript.cjs new file mode 100644 index 00000000000..502cc0fa1fc --- /dev/null +++ b/config/eslint/typescript.cjs @@ -0,0 +1,62 @@ +function rules(config) { + return Object.assign({ + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/no-unused-vars': ['error', { args: 'none' }], + '@typescript-eslint/prefer-includes': 'error', + '@typescript-eslint/prefer-ts-expect-error': 'error', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/no-unsafe-declaration-merging': 'off', + '@typescript-eslint/no-misused-promises': 'off', + 'no-unused-vars': 'off', + 'prefer-const': 'error', + 'prefer-rest-params': 'off', + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': 'error', + 'no-loop-func': 'off', + '@typescript-eslint/no-loop-func': 'error', + 'no-throw-literal': 'off', + '@typescript-eslint/no-throw-literal': 'error', + // '@typescript-eslint/prefer-readonly-parameter-types': 'error', + }, config?.rules ?? {}); +} + +function plugins() { + return ['@typescript-eslint']; +} + +function extend() { + return [ + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking' + ]; +} + +function settings() { + return { + parser: '@typescript-eslint/parser', + parserOptions: { + sourceType: 'module', + ecmaVersion: 2022, + project: 'tsconfig.json' + } + } +} + +function defaults(config) { + return { + files: config?.files || ['**/*.ts'], + ...settings(), + rules: rules(config), + plugins: plugins(), + extends: extend(), + }; +} + +module.exports = { + rules, + settings, + defaults, + plugins, + extend, +} diff --git a/config/package.json b/config/package.json new file mode 100644 index 00000000000..869993ccdc2 --- /dev/null +++ b/config/package.json @@ -0,0 +1,27 @@ +{ + "name": "@warp-drive/internal-config", + "private": true, + "version": "5.5.0-alpha.11", + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/eslint-parser": "^7.22.15", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@typescript-eslint/eslint-plugin": "^6.8.0", + "@typescript-eslint/parser": "^6.8.0", + "eslint": "^8.52.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-prettier": "^5.0.1", + "eslint-plugin-simple-import-sort": "^10.0.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10", + "prettier": "^3.0.3", + "typescript": "~5.2.2" + }, + "engines": { + "node": ">= 18.18.2" + }, + "volta": { + "extends": "../../package.json" + }, + "packageManager": "pnpm@8.9.2" +} \ No newline at end of file diff --git a/config/rollup/external.js b/config/rollup/external.js new file mode 100644 index 00000000000..eb6dcb4445b --- /dev/null +++ b/config/rollup/external.js @@ -0,0 +1,16 @@ +const path = require('path'); + +function external(manual = []) { + const pkg = require(path.join(process.cwd(), './package.json')); + const deps = Object.keys(pkg.dependencies || {}); + const peers = Object.keys(pkg.peerDependencies || {}); + const all = new Set([...deps, ...peers, ...manual]); + + const result = [...all.keys()]; + // console.log({ externals: result }); + return result; +} + +module.exports = { + external, +} diff --git a/contributing/setting-up-the-project.md b/contributing/setting-up-the-project.md index f6a4a4f4d3c..ccdda8b080e 100644 --- a/contributing/setting-up-the-project.md +++ b/contributing/setting-up-the-project.md @@ -34,6 +34,6 @@ Currently the install command is also what builds all of the individual packages Generally test and lint commands can be found in the `"scripts"` section of the root `package.json` manifest. Individual packages or test packages have additional commands in the `"scripts"` section of their own `package.json` manifest as well. -Any command in script can be run using `pnpm` from the directory of that manifest. For instance, to run linting from the root: `pnpm lint:js` +Any command in script can be run using `pnpm` from the directory of that manifest. For instance, to run linting from the root: `pnpm lint` Github Actions workflows will generally use these same commands. diff --git a/docs-generator/yuidoc.json b/docs-generator/yuidoc.json index 9078d18d44d..3597e783f53 100644 --- a/docs-generator/yuidoc.json +++ b/docs-generator/yuidoc.json @@ -12,7 +12,7 @@ ], "paths": [ "../packages/-ember-data/addon", - "../packages/core", + "../packages/core-types/src", "../packages/debug/addon", "../packages/private-build-infra/virtual-packages", "../packages/adapter/src", diff --git a/package.json b/package.json index d7454fd4597..731200e0596 100644 --- a/package.json +++ b/package.json @@ -7,17 +7,20 @@ "url": "git+ssh://git@github.com:emberjs/data.git" }, "scripts": { + "prepare": "pnpm build", + "build": "pnpm turbo build --filter=./packages/*", "build:docs": "mkdir -p packages/-ember-data/dist && cd ./docs-generator && node ./compile-docs.js", - "lint:js": "eslint --quiet --cache --cache-strategy=content --ext=js,ts .", + "lint": "pnpm run -r --workspace-concurrency=-1 --if-present lint", "preinstall": "npx only-allow pnpm", - "problems": "tsc -p tsconfig.json --noEmit --pretty false", - "test": "pnpm --filter \"ember-data__*\" --filter \"warp-drive__*\" --filter main-test-app --filter builders-test-app run test", - "test:production": "pnpm --filter main-test-app --filter ember-data__graph --filter ember-data__json-api run test:production", + "check:types": "pnpm run -r --workspace-concurrency=-1 --if-present check:types", + "test": "pnpm turbo test --concurrency=1", + "test:production": "pnpm turbo test:production --concurrency=1", "test:try-one": "pnpm --filter main-test-app run test:try-one", - "test:docs": "pnpm build:docs && pnpm --filter docs-tests test", - "test:fastboot": "pnpm --filter fastboot-test-app test", - "test:embroider": "pnpm --filter embroider-basic-compat test", - "test:infra": "pnpm --filter @ember-data/unpublished-test-infra test", + "test:docs": "pnpm build:docs && pnpm run -r --workspace-concurrency=-1 --if-present test:blueprints", + "test:blueprints": "pnpm run -r --workspace-concurrency=-1 --if-present test:blueprints", + "test:fastboot": "pnpm run -r --workspace-concurrency=-1 --if-present test:fastboot", + "test:embroider": "pnpm run -r ---workspace-concurrency=-1 --if-present test:embroider", + "test:infra": "pnpm run -r --workspace-concurrency=-1 --if-present test:infra", "test-external:ember-m3": "node ./scripts/test-external-partner-project.js ember-m3 https://github.com/hjdivad/ember-m3.git", "test-external:ember-data-change-tracker": "node ./scripts/test-external-partner-project.js ember-data-change-tracker https://github.com/danielspaniel/ember-data-change-tracker.git", "test-external:model-fragments": "node ./scripts/test-external-partner-project.js model-fragments https://github.com/lytics/ember-data-model-fragments.git", @@ -30,53 +33,29 @@ "test-external:ember-data-relationship-tracker": "node ./scripts/test-external-partner-project.js ember-data-relationship-tracker https://github.com/ef4/ember-data-relationship-tracker.git" }, "devDependencies": { - "@babel/core": "^7.23.2", - "@babel/eslint-parser": "^7.22.15", - "@babel/plugin-proposal-decorators": "^7.23.2", - "@babel/plugin-transform-typescript": "^7.22.15", - "@babel/runtime": "^7.23.2", - "@ember/edition-utils": "^1.2.0", - "@ember/optional-features": "^2.0.0", - "@ember/string": "3.1.1", - "@ember/test-helpers": "^3.2.0", - "@glimmer/component": "^1.1.2", - "@types/jquery": "^3.5.22", - "@types/qunit": "^2.19.6", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", "chalk": "^4.1.2", "co": "^4.6.0", "command-line-args": "^5.2.1", "common-tags": "^1.8.2", "debug": "^4.3.4", - "ember-cli": "~5.3.0", - "ember-source": "~5.3.0", - "eslint": "^8.51.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-ember": "^11.11.1", - "eslint-plugin-ember-data-internal": "link:packages/unpublished-eslint-rules", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-mocha": "^10.2.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "5.0.1", - "eslint-plugin-qunit": "^8.0.1", - "eslint-plugin-simple-import-sort": "^10.0.0", "execa": "^5.1.1", "fromentries": "^1.3.2", "git-repo-info": "^2.1.1", "git-repo-version": "^1.0.2", "lerna-changelog": "^2.2.0", - "loader.js": "^4.7.0", - "prettier": "^3.0.3", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "rimraf": "^5.0.5", "semver": "^7.5.4", + "globby": "^13.2.2", "silent-error": "^1.1.1", - "typescript": "~5.2.2", + "bun-types": "^1.0.7", "url": "^0.11.3", - "webpack": "^5.89.0", "yuidocjs": "^0.10.2", "zlib": "1.0.5" }, + "dependencies": { + "turbo": "^1.10.15" + }, "engines": { "node": ">= 18.18.2", "yarn": "use pnpm", @@ -107,6 +86,25 @@ "dependencies": { "@glimmer/env": "^0.1.7" } + }, + "ember-cli-blueprint-test-helpers": { + "peerDependencies": { + "ember-cli": "*" + } + }, + "ember-cli-fastboot": { + "peerDependencies": { + "ember-cli": "*", + "ember-source": "*" + } + }, + "ember-cli-fastboot-testing": { + "peerDependencies": { + "ember-cli": "*", + "ember-cli-fastboot": "*", + "ember-source": "*", + "@ember/test-helpers": "*" + } } }, "overrides": { @@ -114,6 +112,7 @@ "@embroider/macros": "^1.12.2", "broccoli-funnel": "^3.0.8", "broccoli-merge-trees": "^4.2.0", + "@glimmer/validator": "^0.84.3", "ember-cli-babel": "^8.1.0", "ember-cli-htmlbars": "^6.3.0", "ember-cli-typescript": "^5.2.1", diff --git a/packages/-ember-data/.eslintrc.cjs b/packages/-ember-data/.eslintrc.cjs new file mode 100644 index 00000000000..e0b0ab38b64 --- /dev/null +++ b/packages/-ember-data/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug', '@ember/test-helpers', 'qunit'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/-ember-data/addon/index.ts b/packages/-ember-data/addon/index.ts index 427a76b365f..c9e851d4187 100644 --- a/packages/-ember-data/addon/index.ts +++ b/packages/-ember-data/addon/index.ts @@ -221,7 +221,7 @@ interface DSLibrary extends DS { PromiseObject: typeof PromiseObject; PromiseManyArray: typeof PromiseManyArray; Model: typeof Model; - attr: attr; + attr: typeof attr; Errors: typeof Errors; Snapshot: typeof Snapshot; Adapter: typeof Adapter; @@ -235,6 +235,7 @@ interface DSLibrary extends DS { ConflictError: typeof ConflictError; ServerError: typeof ServerError; Serializer: typeof Serializer; + // @ts-expect-error untyped DebugAdapter?: typeof import('@ember-data/debug').default; ManyArray: typeof ManyArray; RecordArrayManager: typeof RecordArrayManager; @@ -280,6 +281,7 @@ DS.ServerError = ServerError; DS.Serializer = Serializer; if (macroCondition(dependencySatisfies('@ember-data/debug', '*'))) { + // @ts-expect-error untyped DS.DebugAdapter = (importSync('@ember-data/debug') as typeof import('@ember-data/debug')).default; } diff --git a/packages/-ember-data/addon/store.ts b/packages/-ember-data/addon/store.ts index 16f066a87c9..4236139c53a 100644 --- a/packages/-ember-data/addon/store.ts +++ b/packages/-ember-data/addon/store.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import JSONAPICache from '@ember-data/json-api'; import { @@ -17,7 +17,7 @@ import { buildSchema, instantiateRecord, modelFor, teardownRecord } from '@ember import RequestManager from '@ember-data/request'; import Fetch from '@ember-data/request/fetch'; import BaseStore, { CacheHandler } from '@ember-data/store'; -import type { Cache } from '@ember-data/store/-types/cache/cache'; +import type { Cache } from '@warp-drive/core-types/cache'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; @@ -32,11 +32,11 @@ export default class Store extends BaseStore { this.registerSchema(buildSchema(this)); } - createCache(storeWrapper: CacheCapabilitiesManager): Cache { + override createCache(storeWrapper: CacheCapabilitiesManager): Cache { return new JSONAPICache(storeWrapper); } - instantiateRecord( + override instantiateRecord( this: ModelStore, identifier: StableRecordIdentifier, createRecordArgs: Record @@ -44,11 +44,11 @@ export default class Store extends BaseStore { return instantiateRecord.call(this, identifier, createRecordArgs); } - teardownRecord(record: Model): void { + override teardownRecord(record: Model): void { teardownRecord.call(this, record); } - modelFor(type: string): ModelSchema { + override modelFor(type: string): ModelSchema { return modelFor.call(this, type) || super.modelFor(type); } @@ -58,7 +58,7 @@ export default class Store extends BaseStore { normalize = normalize; serializeRecord = serializeRecord; - destroy() { + override destroy() { cleanup.call(this); super.destroy(); } diff --git a/packages/-ember-data/package.json b/packages/-ember-data/package.json index d1d521d9328..7dfa5a62ef6 100644 --- a/packages/-ember-data/package.json +++ b/packages/-ember-data/package.json @@ -12,7 +12,35 @@ "test": "tests" }, "scripts": { - "prepack": "cd ../../ && pnpm build:docs" + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "move-dts": "bun ../../scripts/copy-declarations.mjs addon", + "build:types": "tsc --build --force", + "build": "pnpm build:types && pnpm move-dts", + "prepack": "pnpm build && cd ../../ && pnpm build:docs", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" + }, + "files": [ + "dist/docs", + "ember-data-logo-dark.svg", + "ember-data-logo-light.svg", + "LICENSE.md", + "README.md", + "index.js", + "addon", + "addon-test-support", + "app", + "blueprints", + "unstable-preview-types" + ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } }, "author": "", "license": "MIT", @@ -32,13 +60,15 @@ "@ember-data/serializer": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.13.2", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "broccoli-merge-trees": "^4.2.0", "ember-auto-import": "^2.6.3", "ember-cli-babel": "^8.2.0", "ember-inflector": "^4.0.2", + "typescript": "^5.2.2", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "webpack": "^5.89.0" }, "dependenciesMeta": { @@ -80,6 +110,12 @@ }, "@ember/string": { "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "ember-inflector": { + "injected": true } }, "devDependencies": { @@ -87,7 +123,9 @@ "@ember/string": "3.1.1", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", - "ember-source": "~5.3.0" + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-source": "~5.3.0", + "eslint": "^8.51.0" }, "engines": { "node": ">= 18.18.2" @@ -103,4 +141,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/-ember-data/tsconfig.json b/packages/-ember-data/tsconfig.json new file mode 100644 index 00000000000..b509e242f38 --- /dev/null +++ b/packages/-ember-data/tsconfig.json @@ -0,0 +1,44 @@ +{ + "include": [ + "addon/**/*", + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types", + ], + + "paths": { + "ember-data/version": ["./addon/version.d.ts"], + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/active-record/.eslintrc.cjs b/packages/active-record/.eslintrc.cjs new file mode 100644 index 00000000000..440b732b749 --- /dev/null +++ b/packages/active-record/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug', 'ember-inflector', '@ember/string'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/active-record/package.json b/packages/active-record/package.json index bf801237f32..963054e11db 100644 --- a/packages/active-record/package.json +++ b/packages/active-record/package.json @@ -22,25 +22,39 @@ "extends": "../../package.json" }, "dependencies": { - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "peerDependencies": { + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/store": "^4.12.0 || ^5.0.0", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/string": "^3.1.1", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-inflector": "^4.0.2" }, "dependenciesMeta": { "ember-inflector": { "injected": true }, + "@ember/string": { + "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, "@ember-data/store": { "injected": true }, - "@warp-drive/core": { + "@ember-data/request-utils": { "injected": true }, - "@ember/string": { + "@ember-data/request": { + "injected": true + }, + "@ember-data/tracking": { "injected": true } }, @@ -52,11 +66,19 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -73,15 +95,24 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", + "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-inflector": "^4.0.2", + "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0" }, "ember": { "edition": "octane" } -} \ No newline at end of file +} diff --git a/packages/active-record/rollup.config.mjs b/packages/active-record/rollup.config.mjs index 095095d3db1..683b7c9b8b0 100644 --- a/packages/active-record/rollup.config.mjs +++ b/packages/active-record/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: ['@ember/debug', '@ember-data/request-utils', 'ember-inflector', '@ember/string', '@ember-data/store'], + external: external(['@ember/debug']), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/active-record/src/-private/builders/-utils.ts b/packages/active-record/src/-private/builders/-utils.ts index 0f41ea281a5..9cae4d3439b 100644 --- a/packages/active-record/src/-private/builders/-utils.ts +++ b/packages/active-record/src/-private/builders/-utils.ts @@ -1,5 +1,5 @@ import { type UrlOptions } from '@ember-data/request-utils'; -import type { CacheOptions, ConstrainedRequestOptions } from '@ember-data/store/-types/request'; +import type { CacheOptions, ConstrainedRequestOptions } from '@warp-drive/core-types/request'; export function copyForwardUrlOptions(urlOptions: UrlOptions, options: ConstrainedRequestOptions): void { if ('host' in options) { diff --git a/packages/active-record/src/-private/builders/find-record.ts b/packages/active-record/src/-private/builders/find-record.ts index d15a92a4652..1b8cdde27a7 100644 --- a/packages/active-record/src/-private/builders/find-record.ts +++ b/packages/active-record/src/-private/builders/find-record.ts @@ -10,7 +10,7 @@ import type { ConstrainedRequestOptions, FindRecordRequestOptions, RemotelyAccessibleIdentifier, -} from '@ember-data/store/-types/request'; +} from '@warp-drive/core-types/request'; import { copyForwardUrlOptions, extractCacheOptions } from './-utils'; diff --git a/packages/active-record/src/-private/builders/query.ts b/packages/active-record/src/-private/builders/query.ts index a3a176de5e5..1417e13044f 100644 --- a/packages/active-record/src/-private/builders/query.ts +++ b/packages/active-record/src/-private/builders/query.ts @@ -5,8 +5,9 @@ import { underscore } from '@ember/string'; import { pluralize } from 'ember-inflector'; -import { buildBaseURL, buildQueryParams, QueryParamsSource, type QueryUrlOptions } from '@ember-data/request-utils'; -import type { ConstrainedRequestOptions, QueryRequestOptions } from '@ember-data/store/-types/request'; +import { buildBaseURL, buildQueryParams, type QueryUrlOptions } from '@ember-data/request-utils'; +import type { QueryParamsSource } from '@warp-drive/core-types/params'; +import type { ConstrainedRequestOptions, QueryRequestOptions } from '@warp-drive/core-types/request'; import { copyForwardUrlOptions, extractCacheOptions } from './-utils'; diff --git a/packages/active-record/src/-private/builders/save-record.ts b/packages/active-record/src/-private/builders/save-record.ts index 59382e75a9f..ef54bcd49df 100644 --- a/packages/active-record/src/-private/builders/save-record.ts +++ b/packages/active-record/src/-private/builders/save-record.ts @@ -1,8 +1,6 @@ import { assert } from '@ember/debug'; import { underscore } from '@ember/string'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { pluralize } from 'ember-inflector'; import { @@ -12,12 +10,13 @@ import { type UpdateRecordUrlOptions, } from '@ember-data/request-utils'; import { recordIdentifierFor } from '@ember-data/store'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { ConstrainedRequestOptions, CreateRequestOptions, DeleteRequestOptions, UpdateRequestOptions, -} from '@ember-data/store/-types/request'; +} from '@warp-drive/core-types/request'; import { copyForwardUrlOptions } from './-utils'; diff --git a/packages/active-record/tsconfig.json b/packages/active-record/tsconfig.json new file mode 100644 index 00000000000..3c860b1fafe --- /dev/null +++ b/packages/active-record/tsconfig.json @@ -0,0 +1,43 @@ +{ + "include": [ + "src/**/*" + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types" + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/adapter/.eslintrc.cjs b/packages/adapter/.eslintrc.cjs new file mode 100644 index 00000000000..e3164c866f3 --- /dev/null +++ b/packages/adapter/.eslintrc.cjs @@ -0,0 +1,34 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: [ + '@ember/object', + '@ember/application', + '@ember/service', + '@ember/debug', + 'ember-inflector', + '@ember/object/mixin', + '@ember/string', + ], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/adapter/package.json b/packages/adapter/package.json index fff34db5aa0..bb4e29cf235 100644 --- a/packages/adapter/package.json +++ b/packages/adapter/package.json @@ -14,10 +14,12 @@ "author": "", "directories": {}, "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -25,6 +27,7 @@ "version": 1 }, "files": [ + "unstable-preview-types", "blueprints", "addon-main.js", "addon", @@ -33,7 +36,18 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "peerDependencies": { + "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember/string": "^3.1.1", "ember-inflector": "^4.0.2" @@ -44,13 +58,44 @@ }, "@ember/string": { "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@ember-data/legacy-compat": { + "injected": true + }, + "@ember-data/store": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true + }, + "@ember-data/graph": { + "injected": true + }, + "@ember-data/json-api": { + "injected": true + }, + "@ember-data/request-utils": { + "injected": true } }, "dependencies": { "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@embroider/macros": "^1.13.2", "ember-cli-babel": "^8.2.0", - "ember-cli-test-info": "^1.0.0" + "ember-cli-test-info": "^1.0.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -63,13 +108,24 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/graph": "workspace:5.5.0-alpha.11", + "@ember-data/json-api": "workspace:5.5.0-alpha.11", + "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@types/jquery": "^3.5.24", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-inflector": "^4.0.2", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" @@ -81,4 +137,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/adapter/rollup.config.mjs b/packages/adapter/rollup.config.mjs index 129deff4c04..8daafecff0f 100644 --- a/packages/adapter/rollup.config.mjs +++ b/packages/adapter/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,17 +14,15 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [ + external: external([ '@embroider/macros', '@ember/service', // inject the store to base Adapter '@ember-data/store/-private', - 'ember-inflector', // pluralize '@ember/debug', // assert, deprecate - '@ember/string', // dasherize, camelize '@ember/object', // Adapter base, computed for headers '@ember/object/mixin', // BuildURLMixin '@ember/application', // getOwner - ], + ]), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/adapter/src/-private/build-url-mixin.ts b/packages/adapter/src/-private/build-url-mixin.ts index 0c76385fe98..93182157c4c 100644 --- a/packages/adapter/src/-private/build-url-mixin.ts +++ b/packages/adapter/src/-private/build-url-mixin.ts @@ -300,9 +300,9 @@ function buildURL( */ function _buildURL(this: MixtBuildURLMixin, modelName: string | null | undefined, id?: string | null): string { let path: string; - let url: string[] = []; - let { host } = this; - let prefix = this.urlPrefix(); + const url: string[] = []; + const { host } = this; + const prefix = this.urlPrefix(); if (modelName) { path = this.pathForType(modelName); @@ -608,7 +608,8 @@ function urlForDeleteRecord(this: MixtBuildURLMixin, id: string, modelName: stri @return {String} urlPrefix */ function urlPrefix(this: MixtBuildURLMixin, path?: string | null, parentURL?: string): string { - let { host, namespace } = this; + const { namespace } = this; + let { host } = this; if (!host || host === '/') { host = ''; @@ -630,7 +631,7 @@ function urlPrefix(this: MixtBuildURLMixin, path?: string | null, parentURL?: st } // No path provided - let url: string[] = []; + const url: string[] = []; if (host) { url.push(host); } @@ -669,7 +670,7 @@ function urlPrefix(this: MixtBuildURLMixin, path?: string | null, parentURL?: st @return {String} path **/ function pathForType(this: MixtBuildURLMixin, modelName: string): string { - let camelized = camelize(modelName); + const camelized = camelize(modelName); return pluralize(camelized); } diff --git a/packages/adapter/src/-private/utils/determine-body-promise.ts b/packages/adapter/src/-private/utils/determine-body-promise.ts index 8c72f30eb20..2907dfe0c99 100644 --- a/packages/adapter/src/-private/utils/determine-body-promise.ts +++ b/packages/adapter/src/-private/utils/determine-body-promise.ts @@ -24,13 +24,13 @@ function _determineContent(response: Response, requestData: JQueryAjaxSettings, return payload; } - let status = response.status; - let payloadIsEmpty = payload === '' || payload === null; - let statusIndicatesEmptyResponse = status === 204 || status === 205 || requestData.method === 'HEAD'; + const status = response.status; + const payloadIsEmpty = payload === '' || payload === null; + const statusIndicatesEmptyResponse = status === 204 || status === 205 || requestData.method === 'HEAD'; if (DEBUG) { if (payloadIsEmpty && !statusIndicatesEmptyResponse) { - let message = `The server returned an empty string for ${requestData.method} ${requestData.url}, which cannot be parsed into a valid JSON. Return either null or {}.`; + const message = `The server returned an empty string for ${requestData.method} ${requestData.url}, which cannot be parsed into a valid JSON. Return either null or {}.`; if (payload === '') { warn(message, { id: 'ds.adapter.returned-empty-string-as-JSON', diff --git a/packages/adapter/src/-private/utils/fetch.ts b/packages/adapter/src/-private/utils/fetch.ts index f7cd1338562..8dd752dff91 100644 --- a/packages/adapter/src/-private/utils/fetch.ts +++ b/packages/adapter/src/-private/utils/fetch.ts @@ -41,10 +41,10 @@ export default function getFetchFunction(): FetchFunction { // eslint-disable-next-line no-inner-declarations function buildAbsoluteUrl(url: string) { if (protocolRelativeRegex.test(url)) { - let [host] = parseRequest(REQUEST); + const [host] = parseRequest(REQUEST); url = host + url; } else if (!httpRegex.test(url)) { - let [host, protocol] = parseRequest(REQUEST); + const [host, protocol] = parseRequest(REQUEST); url = protocol + '//' + host + url; } return url; diff --git a/packages/adapter/src/-private/utils/parse-response-headers.ts b/packages/adapter/src/-private/utils/parse-response-headers.ts index c95e429d0d9..3369092c308 100644 --- a/packages/adapter/src/-private/utils/parse-response-headers.ts +++ b/packages/adapter/src/-private/utils/parse-response-headers.ts @@ -10,7 +10,7 @@ export default function parseResponseHeaders(headersString: string): Record { - let url = this.buildURL(type.modelName, ids, snapshots, 'findMany'); + override findMany(store: Store, type: ModelSchema, ids: string[], snapshots: Snapshot[]): Promise { + const url = this.buildURL(type.modelName, ids, snapshots, 'findMany'); return this.ajax(url, 'GET', { data: { filter: { id: ids.join(',') } } }); } - pathForType(modelName: string): string { - let dasherized = dasherize(modelName); + override pathForType(modelName: string): string { + const dasherized = dasherize(modelName); return pluralize(dasherized); } - updateRecord(store: Store, schema: ModelSchema, snapshot: Snapshot): Promise { + override updateRecord(store: Store, schema: ModelSchema, snapshot: Snapshot): Promise { const data = serializeIntoHash(store, schema, snapshot); const type = snapshot.modelName; const id = snapshot.id; assert(`Attempted to update the ${type} record, but the record has no id`, typeof id === 'string' && id.length > 0); - let url = this.buildURL(type, id, snapshot, 'updateRecord'); + const url = this.buildURL(type, id, snapshot, 'updateRecord'); return this.ajax(url, 'PATCH', { data: data }); } diff --git a/packages/adapter/src/rest.ts b/packages/adapter/src/rest.ts index f3cce065962..efbc151f136 100644 --- a/packages/adapter/src/rest.ts +++ b/packages/adapter/src/rest.ts @@ -1,3 +1,6 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ /** @module @ember-data/adapter/rest */ @@ -8,9 +11,9 @@ import { computed } from '@ember/object'; import { DEBUG } from '@ember-data/env'; import type { Snapshot, SnapshotRecordArray } from '@ember-data/legacy-compat/-private'; import type { AdapterPayload } from '@ember-data/legacy-compat/legacy-network-handler/minimum-adapter-interface'; -import type { HTTPMethod } from '@ember-data/request/-private/types'; import type Store from '@ember-data/store'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { HTTPMethod } from '@warp-drive/core-types/request'; import { determineBodyPromise, fetch, parseResponseHeaders, serializeIntoHash, serializeQueryParams } from './-private'; import { MixtBuildURLMixin } from './-private/build-url-mixin'; @@ -38,11 +41,6 @@ export interface FetchRequestInit extends RequestInit { url: string; method: HTTPMethod; type: HTTPMethod; - contentType?: string | false; - body?: any; - data?: any; - cache?: any; - headers?: any; } export interface JQueryRequestInit extends JQueryAjaxSettings { @@ -54,14 +52,14 @@ export interface JQueryRequestInit extends JQueryAjaxSettings { export type RequestData = { url: string; method: HTTPMethod; - [key: string]: any; + [key: string]: unknown; }; type ResponseData = { status: number; textStatus: string; - headers: Record; - errorThrown?: any; + headers: Record; + errorThrown?: Error | string; }; declare const jQuery: JQueryStatic | undefined; @@ -337,6 +335,7 @@ declare const jQuery: JQueryStatic | undefined; */ class RESTAdapter extends Adapter.extend(BuildURLMixin) { declare _fastboot: FastBoot; + declare _coalesceFindRequests: boolean; declare host: string | null; declare namespace: string | null; @@ -356,11 +355,11 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { get fastboot() { // Avoid computed property override deprecation in fastboot as suggested by: // https://deprecations.emberjs.com/v3.x/#toc_computed-property-override - let fastboot = this._fastboot; + const fastboot = this._fastboot; if (fastboot) { return fastboot; } - return (this._fastboot = (getOwner(this) as any).lookup('service:fastboot')); + return (this._fastboot = getOwner(this)!.lookup('service:fastboot') as FastBoot); } set fastboot(value: FastBoot) { @@ -410,14 +409,14 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @return {Object} @public */ - sortQueryParams(obj): Record { - let keys = Object.keys(obj); - let len = keys.length; + sortQueryParams(obj: Record): Record { + const keys = Object.keys(obj); + const len = keys.length; if (len < 2) { return obj; } - let newQueryParams = {}; - let sortedKeys = keys.sort(); + const newQueryParams: Record = {}; + const sortedKeys = keys.sort(); for (let i = 0; i < len; i++) { newQueryParams[sortedKeys[i]] = obj[sortedKeys[i]]; @@ -473,15 +472,15 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @public @type {boolean} */ - get coalesceFindRequests() { - let coalesceFindRequests = this._coalesceFindRequests; + override get coalesceFindRequests() { + const coalesceFindRequests = this._coalesceFindRequests; if (typeof coalesceFindRequests === 'boolean') { return coalesceFindRequests; } return (this._coalesceFindRequests = false); } - set coalesceFindRequests(value: boolean) { + override set coalesceFindRequests(value: boolean) { this._coalesceFindRequests = value; } @@ -567,9 +566,9 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {Snapshot} snapshot @return {Promise} promise */ - findRecord(store: Store, type: ModelSchema, id: string, snapshot: Snapshot): Promise { - let url = this.buildURL(type.modelName, id, snapshot, 'findRecord'); - let query: QueryState = this.buildQuery(snapshot); + override findRecord(store: Store, type: ModelSchema, id: string, snapshot: Snapshot): Promise { + const url = this.buildURL(type.modelName, id, snapshot, 'findRecord'); + const query: QueryState = this.buildQuery(snapshot); return this.ajax(url, 'GET', { data: query }); } @@ -589,14 +588,14 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {SnapshotRecordArray} snapshotRecordArray @return {Promise} promise */ - findAll( + override findAll( store: Store, type: ModelSchema, - sinceToken, + sinceToken: null, snapshotRecordArray: SnapshotRecordArray ): Promise { - let query: QueryState = this.buildQuery(snapshotRecordArray); - let url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll'); + const query: QueryState = this.buildQuery(snapshotRecordArray); + const url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll'); if (sinceToken) { query.since = sinceToken; @@ -625,8 +624,8 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {Object} adapterOptions @return {Promise} promise */ - query(store: Store, type: ModelSchema, query): Promise { - let url = this.buildURL(type.modelName, null, null, 'query', query); + override query(store: Store, type: ModelSchema, query: Record): Promise { + const url = this.buildURL(type.modelName, null, null, 'query', query); if (this.sortQueryParams) { query = this.sortQueryParams(query); @@ -655,13 +654,13 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {Object} adapterOptions @return {Promise} promise */ - queryRecord( + override queryRecord( store: Store, type: ModelSchema, query: Record, adapterOptions: Record ): Promise { - let url = this.buildURL(type.modelName, null, null, 'queryRecord', query); + const url = this.buildURL(type.modelName, null, null, 'queryRecord', query); if (this.sortQueryParams) { query = this.sortQueryParams(query); @@ -705,7 +704,7 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @return {Promise} promise */ findMany(store: Store, type: ModelSchema, ids: string[], snapshots: Snapshot[]): Promise { - let url = this.buildURL(type.modelName, ids, snapshots, 'findMany'); + const url = this.buildURL(type.modelName, ids, snapshots, 'findMany'); return this.ajax(url, 'GET', { data: { ids: ids } }); } @@ -752,8 +751,8 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { url: string, relationship: Record ): Promise { - let id = snapshot.id; - let type = snapshot.modelName; + const id = snapshot.id; + const type = snapshot.modelName; assert( `Attempted to fetch the hasMany relationship for ${type}, but the record has no id`, @@ -802,8 +801,8 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @return {Promise} promise */ findBelongsTo(store: Store, snapshot: Snapshot, url: string, relationship): Promise { - let id = snapshot.id; - let type = snapshot.modelName; + const id = snapshot.id; + const type = snapshot.modelName; assert( `Attempted to fetch the belongsTo relationship for ${type}, but the record has no id`, @@ -830,8 +829,8 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {Snapshot} snapshot @return {Promise} promise */ - createRecord(store: Store, type: ModelSchema, snapshot: Snapshot): Promise { - let url = this.buildURL(type.modelName, null, snapshot, 'createRecord'); + override createRecord(store: Store, type: ModelSchema, snapshot: Snapshot): Promise { + const url = this.buildURL(type.modelName, null, snapshot, 'createRecord'); const data = serializeIntoHash(store, type, snapshot); @@ -855,12 +854,12 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {Snapshot} snapshot @return {Promise} promise */ - updateRecord(store: Store, schema: ModelSchema, snapshot: Snapshot): Promise { + override updateRecord(store: Store, schema: ModelSchema, snapshot: Snapshot): Promise { const data = serializeIntoHash(store, schema, snapshot, {}); const type = snapshot.modelName; const id = snapshot.id; assert(`Attempted to update the ${type} record, but the record has no id`, typeof id === 'string' && id.length > 0); - let url = this.buildURL(type, id, snapshot, 'updateRecord'); + const url = this.buildURL(type, id, snapshot, 'updateRecord'); return this.ajax(url, 'PUT', { data }); } @@ -877,7 +876,7 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {Snapshot} snapshot @return {Promise} promise */ - deleteRecord(store: Store, schema: ModelSchema, snapshot: Snapshot): Promise { + override deleteRecord(store: Store, schema: ModelSchema, snapshot: Snapshot): Promise { const type = snapshot.modelName; const id = snapshot.id; assert(`Attempted to delete the ${type} record, but the record has no id`, typeof id === 'string' && id.length > 0); @@ -893,15 +892,15 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { typeof id === 'string' && id.length > 0 ); - let url = this.buildURL(type, id, snapshot); + const url = this.buildURL(type, id, snapshot); - let expandedURL = url.split('/'); + const expandedURL = url.split('/'); // Case when the url is of the format ...something/:id // We are decodeURIComponent-ing the lastSegment because if it represents // the id, it has been encodeURIComponent-ified within `buildURL`. If we // don't do this, then records with id having special characters are not // coalesced correctly (see GH #4190 for the reported bug) - let lastSegment: string = expandedURL[expandedURL.length - 1]; + const lastSegment: string = expandedURL[expandedURL.length - 1]; if (decodeURIComponent(lastSegment) === id) { expandedURL[expandedURL.length - 1] = ''; } else if (id && endsWith(lastSegment, '?id=' + id)) { @@ -938,23 +937,23 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @return {Array} an array of arrays of records, each of which is to be loaded separately by `findMany`. */ - groupRecordsForFindMany(store: Store, snapshots: Snapshot[]): Snapshot[][] { - let groups = new Map(); - let maxURLLength = this.maxURLLength; + override groupRecordsForFindMany(store: Store, snapshots: Snapshot[]): Snapshot[][] { + const groups: Map = new Map(); + const maxURLLength = this.maxURLLength; snapshots.forEach((snapshot) => { - let baseUrl = this._stripIDFromURL(store, snapshot); + const baseUrl = this._stripIDFromURL(store, snapshot); if (!groups.has(baseUrl)) { groups.set(baseUrl, []); } - groups.get(baseUrl).push(snapshot); + groups.get(baseUrl)!.push(snapshot); }); - let groupsArray: Snapshot[][] = []; + const groupsArray: Snapshot[][] = []; groups.forEach((group, key) => { - let paramNameLength = '&ids%5B%5D='.length; - let splitGroups = splitGroupToFitInUrl(store, this, group, maxURLLength, paramNameLength); + const paramNameLength = '&ids%5B%5D='.length; + const splitGroups = splitGroupToFitInUrl(store, this, group, maxURLLength, paramNameLength); splitGroups.forEach((splitGroup) => groupsArray.push(splitGroup)); }); @@ -994,7 +993,7 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { */ handleResponse( status: number, - headers: Record, + headers: Record, payload: Payload, requestData: RequestData ): Payload | AdapterError { @@ -1004,8 +1003,8 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { return new InvalidError(typeof payload === 'object' && 'errors' in payload ? payload.errors : undefined); } - let errors = this.normalizeErrorResponse(status, headers, payload); - let detailedMessage = this.generatedDetailedMessage(status, headers, payload, requestData); + const errors = this.normalizeErrorResponse(status, headers, payload); + const detailedMessage = this.generatedDetailedMessage(status, headers, payload, requestData); switch (status) { case 401: @@ -1082,19 +1081,21 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @return {Promise} promise */ async ajax(url: string, type: HTTPMethod, options: JQueryAjaxSettings | RequestInit = {}): Promise { - let requestData: RequestData = { + const requestData: RequestData = { url: url, method: type, }; if (this.useFetch) { - let hash: FetchRequestInit = this.ajaxOptions(url, type, options); - let response = await this._fetchRequest(hash); - let payload = await determineBodyPromise(response, requestData); + // @ts-expect-error poorly typed + const hash: FetchRequestInit = this.ajaxOptions(url, type, options); + const response = await this._fetchRequest(hash); + const payload = await determineBodyPromise(response, requestData); if (response.ok && !(payload instanceof Error)) { return fetchSuccessHandler(this, payload, response, requestData); } else { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw fetchErrorHandler(this, payload, response, null, requestData); } } else { @@ -1109,18 +1110,18 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { */ _ajaxRequest(options: JQueryRequestInit): void { assert('You must install jQuery globally when `useFetch` is false', typeof jQuery !== 'undefined'); - jQuery.ajax(options); + void jQuery.ajax(options); } _fetchRequest(options: FetchRequestInit): Promise { - let fetchFunction = fetch(); + const fetchFunction = fetch(); return fetchFunction(options.url, options); } _ajax(options: FetchRequestInit | JQueryRequestInit): void { if (this.useFetch) { - this._fetchRequest(options as FetchRequestInit); + void this._fetchRequest(options as FetchRequestInit); } else { this._ajaxRequest(options as JQueryRequestInit); } @@ -1149,26 +1150,33 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { ); if (this.headers !== undefined) { + // @ts-expect-error poorly typed reqOptions.headers = { ...this.headers, ...reqOptions.headers }; } else if (!options.headers) { reqOptions.headers = {}; } - let contentType = reqOptions.contentType || this._defaultContentType; + // @ts-expect-error poorly typed + const contentType = reqOptions.contentType || this._defaultContentType; if (this.useFetch) { + // @ts-expect-error poorly typed if (reqOptions.data && reqOptions.type !== 'GET' && reqOptions.headers) { if (!reqOptions.headers['Content-Type'] && !reqOptions.headers['content-type']) { reqOptions.headers['content-type'] = contentType; } } + // @ts-expect-error poorly typed reqOptions = fetchOptions(reqOptions, this); } else { // GET requests without a body should not have a content-type header // and may be unexpected by a server + // @ts-expect-error poorly typed if (reqOptions.data && reqOptions.type !== 'GET') { + // @ts-expect-error poorly typed reqOptions = { ...reqOptions, contentType }; } + // @ts-expect-error poorly typed reqOptions = ajaxOptions(reqOptions, this); } @@ -1179,10 +1187,10 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { _ajaxURL(url: string): string { if (this.fastboot?.isFastBoot) { - let httpRegex = /^https?:\/\//; - let protocolRelativeRegex = /^\/\//; - let protocol = this.fastboot.request.protocol; - let host = this.fastboot.request.host; + const httpRegex = /^https?:\/\//; + const protocolRelativeRegex = /^\/\//; + const protocol = this.fastboot.request.protocol; + const host = this.fastboot.request.host; if (protocolRelativeRegex.test(url)) { return `${protocol}${url}`; @@ -1261,9 +1269,14 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @param {Object} requestData @return {String} detailed error message */ - generatedDetailedMessage(status: number, headers, payload: Payload, requestData: RequestData): string { + generatedDetailedMessage( + status: number, + headers: Record, + payload: Payload, + requestData: RequestData + ): string { let shortenedPayload; - let payloadContentType = headers['content-type'] || 'Empty Content-Type'; + const payloadContentType = headers['content-type'] || 'Empty Content-Type'; if (payloadContentType === 'text/html' && typeof payload === 'string' && payload.length > 250) { shortenedPayload = '[Omitted Lengthy HTML]'; @@ -1273,8 +1286,8 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { shortenedPayload = payload; } - let requestDescription = requestData.method + ' ' + requestData.url; - let payloadDescription = 'Payload (' + payloadContentType + ')'; + const requestDescription = requestData.method + ' ' + requestData.url; + const payloadDescription = 'Payload (' + payloadContentType + ')'; return [ 'Ember Data Request ' + requestDescription + ' returned a ' + status, @@ -1294,10 +1307,10 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { @return {Object} */ buildQuery(snapshot: Snapshot | SnapshotRecordArray): QueryState { - let query: QueryState = {}; + const query: QueryState = {}; if (snapshot) { - let { include } = snapshot; + const { include } = snapshot; if (include) { query.include = include; @@ -1362,10 +1375,10 @@ function ajaxError( // Adapter abort error to include any relevent info, e.g. request/response: function handleAbort(requestData: RequestData, responseData: ResponseData): AbortError { - let { method, url, errorThrown } = requestData; - let { status } = responseData; - let msg = `Request failed: ${method} ${url} ${errorThrown || ''}`; - let errors = [{ title: 'Adapter Error', detail: msg.trim(), status }]; + const { method, url, errorThrown } = requestData; + const { status } = responseData; + const msg = `Request failed: ${method} ${url} ${String(errorThrown ?? '')}`; + const errors = [{ title: 'Adapter Error', detail: msg.trim(), status }]; return new AbortError(errors); } @@ -1384,7 +1397,7 @@ function fetchSuccessHandler( response: Response, requestData: RequestData ): Promise { - let responseData = fetchResponseData(response); + const responseData = fetchResponseData(response); return ajaxSuccess(adapter, payload, requestData, responseData); } @@ -1394,11 +1407,12 @@ function fetchErrorHandler( response: Response, errorThrown, requestData: RequestData -): Error { - let responseData = fetchResponseData(response); +): Error | TimeoutError | Record { + const responseData = fetchResponseData(response); if (responseData.status === 200 && payload instanceof Error) { responseData.errorThrown = payload; + // @ts-expect-error poorly typed payload = responseData.errorThrown.payload; } else { responseData.errorThrown = errorThrown; @@ -1415,18 +1429,23 @@ function ajaxSuccessHandler( jqXHR: JQuery.jqXHR, requestData: RequestData ): Promise { - let responseData = ajaxResponseData(jqXHR); + const responseData = ajaxResponseData(jqXHR); return ajaxSuccess(adapter, payload, requestData, responseData); } -function ajaxErrorHandler(adapter: RESTAdapter, jqXHR: JQuery.jqXHR, errorThrown: string, requestData: RequestData) { - let responseData = ajaxResponseData(jqXHR); +function ajaxErrorHandler( + adapter: RESTAdapter, + jqXHR: JQuery.jqXHR, + errorThrown: Error | string, + requestData: RequestData +) { + const responseData = ajaxResponseData(jqXHR); responseData.errorThrown = errorThrown; - let payload = adapter.parseErrorResponse(jqXHR.responseText); + const payload = adapter.parseErrorResponse(jqXHR.responseText); if (DEBUG) { - let message = `The server returned an empty string for ${requestData.method} ${requestData.url}, which cannot be parsed into a valid JSON. Return either null or {}.`; - let validJSONString = !(responseData.textStatus === 'parsererror' && payload === ''); + const message = `The server returned an empty string for ${requestData.method} ${requestData.url}, which cannot be parsed into a valid JSON. Return either null or {}.`; + const validJSONString = !(responseData.textStatus === 'parsererror' && payload === ''); warn(message, validJSONString, { id: 'ds.adapter.returned-empty-string-as-JSON', }); @@ -1451,8 +1470,8 @@ function ajaxResponseData(jqXHR: JQuery.jqXHR): ResponseData { }; } -function headersToObject(headers: Headers): Record { - let headersObject = {}; +function headersToObject(headers: Headers): Record { + const headersObject = {}; if (headers) { headers.forEach((value, key) => (headersObject[key] = value)); @@ -1500,6 +1519,7 @@ export function fetchOptions( if (Object.prototype.toString.call(options.data) === '[object Object]') { options.body = JSON.stringify(options.data); } else { + // @ts-expect-error poorly typed options.body = options.data; } } @@ -1519,7 +1539,7 @@ function ajaxOptions(options: JQueryRequestInit, adapter: RESTAdapter): JQueryRe options.beforeSend = function (xhr) { if (options.headers) { Object.keys(options.headers).forEach((key) => { - let headerValue = options.headers && options.headers[key]; + const headerValue = options.headers && options.headers[key]; const isString = (value: unknown): value is string => typeof value === 'string'; if (isString(headerValue)) { xhr.setRequestHeader(key, headerValue); @@ -1539,13 +1559,13 @@ function execjQAjax( const hash = adapter.ajaxOptions(requestData.url, requestData.method, options) as JQueryRequestInit; return new Promise((resolve, reject) => { - hash.success = function (payload, textStatus, jqXHR) { - let response = ajaxSuccessHandler(adapter, payload, jqXHR, requestData); + hash.success = function (payload: Payload, textStatus, jqXHR) { + const response = ajaxSuccessHandler(adapter, payload, jqXHR, requestData); resolve(response); }; - hash.error = function (jqXHR, textStatus, errorThrown) { - let error = ajaxErrorHandler(adapter, jqXHR, errorThrown, requestData); + hash.error = function (jqXHR, textStatus, errorThrown: Error | string) { + const error = ajaxErrorHandler(adapter, jqXHR, errorThrown, requestData); reject(error); }; @@ -1553,13 +1573,19 @@ function execjQAjax( }); } -function splitGroupToFitInUrl(store, adapter, group, maxURLLength, paramNameLength) { +function splitGroupToFitInUrl( + store: Store, + adapter: RESTAdapter, + group: Snapshot[], + maxURLLength: number, + paramNameLength: number +) { let idsSize = 0; - let baseUrl = adapter._stripIDFromURL(store, group[0]); - let splitGroups: Snapshot[][] = [[]]; + const baseUrl = adapter._stripIDFromURL(store, group[0]); + const splitGroups: Snapshot[][] = [[]]; group.forEach((snapshot) => { - let additionalLength = encodeURIComponent(snapshot.id).length + paramNameLength; + const additionalLength = encodeURIComponent(snapshot.id!).length + paramNameLength; if (baseUrl.length + idsSize + additionalLength >= maxURLLength) { idsSize = 0; splitGroups.push([]); @@ -1567,7 +1593,7 @@ function splitGroupToFitInUrl(store, adapter, group, maxURLLength, paramNameLeng idsSize += additionalLength; - let lastGroupIndex = splitGroups.length - 1; + const lastGroupIndex = splitGroups.length - 1; splitGroups[lastGroupIndex].push(snapshot); }); diff --git a/packages/adapter/tsconfig.json b/packages/adapter/tsconfig.json new file mode 100644 index 00000000000..eda880a7c70 --- /dev/null +++ b/packages/adapter/tsconfig.json @@ -0,0 +1,47 @@ +{ + "include": [ + "src/**/*", + "../../@types/**/*", + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "experimentalDecorators": true, + "noImplicitAny": false, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types", + "@types/jquery", + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/core-types/.eslintrc.cjs b/packages/core-types/.eslintrc.cjs new file mode 100644 index 00000000000..94f092444d8 --- /dev/null +++ b/packages/core-types/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/core/LICENSE.md b/packages/core-types/LICENSE.md similarity index 100% rename from packages/core/LICENSE.md rename to packages/core-types/LICENSE.md diff --git a/packages/core/NCC-1701-a-blue.svg b/packages/core-types/NCC-1701-a-blue.svg similarity index 100% rename from packages/core/NCC-1701-a-blue.svg rename to packages/core-types/NCC-1701-a-blue.svg diff --git a/packages/core/NCC-1701-a.svg b/packages/core-types/NCC-1701-a.svg similarity index 100% rename from packages/core/NCC-1701-a.svg rename to packages/core-types/NCC-1701-a.svg diff --git a/packages/core/README.md b/packages/core-types/README.md similarity index 91% rename from packages/core/README.md rename to packages/core-types/README.md index 4a3752c8f00..6286509020b 100644 --- a/packages/core/README.md +++ b/packages/core-types/README.md @@ -13,8 +13,8 @@ title="WarpDrive" />

-

🛸 @warp-drive/core

-

Provides core logic, utils and types for WarpDrive and EmberData

+

🛸 @warp-drive/core-types

+

Provides core types, type utils and constants for WarpDrive and EmberData

### ♥️ Credits diff --git a/packages/core/addon-main.cjs b/packages/core-types/addon-main.cjs similarity index 100% rename from packages/core/addon-main.cjs rename to packages/core-types/addon-main.cjs diff --git a/packages/core/babel.config.js b/packages/core-types/babel.config.js similarity index 50% rename from packages/core/babel.config.js rename to packages/core-types/babel.config.js index 15100a5b69c..dac1037557b 100644 --- a/packages/core/babel.config.js +++ b/packages/core-types/babel.config.js @@ -1,8 +1,5 @@ const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); module.exports = { - plugins: [ - ...macros, - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }] - ], + plugins: [...macros, ['@babel/plugin-transform-typescript', { allowDeclareFields: true }]], }; diff --git a/packages/core/package.json b/packages/core-types/package.json similarity index 83% rename from packages/core/package.json rename to packages/core-types/package.json index 6d05af0034d..bf0488622c0 100644 --- a/packages/core/package.json +++ b/packages/core-types/package.json @@ -1,5 +1,5 @@ { - "name": "@warp-drive/core", + "name": "@warp-drive/core-types", "version": "5.5.0-alpha.11", "description": "Provides core logic, utils and types for WarpDrive and EmberData", "keywords": [ @@ -8,16 +8,17 @@ "repository": { "type": "git", "url": "git+ssh://git@github.com:emberjs/data.git", - "directory": "packages/core" + "directory": "packages/core-types" }, "license": "MIT", "author": "Chris Thoburn ", "scripts": { + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", "build:types": "tsc --build --force", "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "files": [ "addon", @@ -38,14 +39,17 @@ "default": "./addon/*.js" } }, - "peerDependencies": {}, "dependencies": { "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "dependenciesMeta": { "@ember-data/private-build-infra": { "injected": true + }, + "@warp-drive/internal-config": { + "injected": true } }, "devDependencies": { @@ -59,14 +63,13 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", - "@ember-data/store": "workspace:5.5.0-alpha.11", "@embroider/addon-dev": "^4.1.1", "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" @@ -86,4 +89,4 @@ "ember": { "edition": "octane" } -} \ No newline at end of file +} diff --git a/packages/core/rollup.config.mjs b/packages/core-types/rollup.config.mjs similarity index 81% rename from packages/core/rollup.config.mjs rename to packages/core-types/rollup.config.mjs index db00645ef7b..a87af668d2d 100644 --- a/packages/core/rollup.config.mjs +++ b/packages/core-types/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,12 +14,12 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [], + external: external(), 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(['index.js', 'identifier.js']), + addon.publicEntrypoints(['index.js', 'identifier.js', 'request.js']), nodeResolve({ extensions: ['.ts'] }), babel({ diff --git a/packages/store/src/-types/cache/cache.ts b/packages/core-types/src/cache.ts similarity index 93% rename from packages/store/src/-types/cache/cache.ts rename to packages/core-types/src/cache.ts index 09fdd6cf0fb..9f1590b89a6 100644 --- a/packages/store/src/-types/cache/cache.ts +++ b/packages/core-types/src/cache.ts @@ -1,19 +1,25 @@ /** * @module @ember-data/experimental-preview-types */ -import { StableRecordIdentifier } from '@warp-drive/core'; - -import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; -import { StoreRequestContext } from '@ember-data/store/-private/cache-handler'; - -import { CollectionResourceRelationship, SingleResourceRelationship } from '../q/ember-data-json-api'; -import { JsonApiError } from '../q/record-data-json-api'; -import { ResourceBlob } from './aliases'; -import { Change } from './change'; -import { ResourceDocument, SingleResourceDataDocument } from './document'; +import { ResourceBlob } from './cache/aliases'; +import { Change } from './cache/change'; +import { Mutation } from './cache/mutations'; +import { Operation } from './cache/operations'; +import type { CollectionRelationship, ResourceRelationship } from './cache/relationship'; +import type { StableRecordIdentifier } from './identifier'; import { StableDocumentIdentifier } from './identifier'; -import { Mutation } from './mutations'; -import { Operation } from './operations'; +import type { Value } from './json/raw'; +import type { RequestContext, StructuredDataDocument, StructuredDocument } from './request'; +import { ResourceDocument, SingleResourceDataDocument } from './spec/document'; +import { ApiError } from './spec/error'; + +/** + * A hash of changed attributes with the key being the attribute name and the value being an + * array of `[oldValue, newValue]`. + * + * @internal + */ +export type ChangedAttributesHash = Record; export type RelationshipDiff = | { @@ -280,7 +286,7 @@ export interface Cache { * @public * @param identifier */ - willCommit(identifier: StableRecordIdentifier, context: StoreRequestContext): void; + willCommit(identifier: StableRecordIdentifier, context: RequestContext): void; /** * [LIFECYCLE] Signals to the cache that a resource @@ -303,7 +309,7 @@ export interface Cache { * @param identifier * @param errors */ - commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void; + commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void; /** * [LIFECYCLE] Signals to the cache that all data for a resource @@ -342,7 +348,7 @@ export interface Cache { * @param field * @param value */ - setAttr(identifier: StableRecordIdentifier, field: string, value: unknown): void; + setAttr(identifier: StableRecordIdentifier, field: string, value: Value): void; /** * Query the cache for the changed attributes of a resource. @@ -358,7 +364,7 @@ export interface Cache { * @param identifier * @returns {Record} { : [, ] } */ - changedAttrs(identifier: StableRecordIdentifier): Record; + changedAttrs(identifier: StableRecordIdentifier): ChangedAttributesHash; /** * Query the cache for whether any mutated attributes exist @@ -448,7 +454,7 @@ export interface Cache { identifier: StableRecordIdentifier, field: string, isCollection?: boolean - ): SingleResourceRelationship | CollectionResourceRelationship; + ): ResourceRelationship | CollectionRelationship; // Resource State // =============== @@ -474,7 +480,7 @@ export interface Cache { * @param identifier * @returns {JsonApiError[]} */ - getErrors(identifier: StableRecordIdentifier): JsonApiError[]; + getErrors(identifier: StableRecordIdentifier): ApiError[]; /** * Query the cache for whether a given resource has any available data diff --git a/packages/store/src/-types/cache/aliases.ts b/packages/core-types/src/cache/aliases.ts similarity index 100% rename from packages/store/src/-types/cache/aliases.ts rename to packages/core-types/src/cache/aliases.ts diff --git a/packages/store/src/-types/cache/change.ts b/packages/core-types/src/cache/change.ts similarity index 54% rename from packages/store/src/-types/cache/change.ts rename to packages/core-types/src/cache/change.ts index 112b24789cc..07a821d0037 100644 --- a/packages/store/src/-types/cache/change.ts +++ b/packages/core-types/src/cache/change.ts @@ -1,6 +1,4 @@ -import { StableRecordIdentifier } from '@warp-drive/core'; - -import { StableDocumentIdentifier } from './identifier'; +import type { StableDocumentIdentifier, StableRecordIdentifier } from '../identifier'; export interface Change { identifier: StableRecordIdentifier | StableDocumentIdentifier; diff --git a/packages/store/src/-types/cache/mutations.ts b/packages/core-types/src/cache/mutations.ts similarity index 97% rename from packages/store/src/-types/cache/mutations.ts rename to packages/core-types/src/cache/mutations.ts index 64d5bff6ed6..e7ff59bcf60 100644 --- a/packages/store/src/-types/cache/mutations.ts +++ b/packages/core-types/src/cache/mutations.ts @@ -1,4 +1,4 @@ -import { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '../identifier'; export interface AddToRelatedRecordsMutation { op: 'addToRelatedRecords'; diff --git a/packages/store/src/-types/cache/operations.ts b/packages/core-types/src/cache/operations.ts similarity index 92% rename from packages/store/src/-types/cache/operations.ts rename to packages/core-types/src/cache/operations.ts index bbd5fda75b5..0a0d8dd280f 100644 --- a/packages/store/src/-types/cache/operations.ts +++ b/packages/core-types/src/cache/operations.ts @@ -1,4 +1,4 @@ -import { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '../identifier'; export interface Op { op: string; diff --git a/packages/store/src/-types/cache/relationship.ts b/packages/core-types/src/cache/relationship.ts similarity index 78% rename from packages/store/src/-types/cache/relationship.ts rename to packages/core-types/src/cache/relationship.ts index 988338d2d01..38e2939915c 100644 --- a/packages/store/src/-types/cache/relationship.ts +++ b/packages/core-types/src/cache/relationship.ts @@ -1,6 +1,5 @@ -import { StableRecordIdentifier } from '@warp-drive/core'; - -import { Links, Meta, PaginationLinks } from '../q/ember-data-json-api'; +import type { StableRecordIdentifier } from '../identifier'; +import type { Links, Meta, PaginationLinks } from '../spec/raw'; // we request that it be in the stable form already. export interface ResourceRelationship { diff --git a/packages/graph/src/-private/-operations.ts b/packages/core-types/src/graph.ts similarity index 81% rename from packages/graph/src/-private/-operations.ts rename to packages/core-types/src/graph.ts index 4971c0c0420..57d1b9f2335 100644 --- a/packages/graph/src/-private/-operations.ts +++ b/packages/core-types/src/graph.ts @@ -1,9 +1,16 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { CollectionRelationship, ResourceRelationship } from './cache/relationship'; +import type { StableRecordIdentifier } from './identifier'; +import type { CollectionResourceRelationship, SingleResourceRelationship } from './spec/raw'; -import type { - CollectionResourceRelationship, - SingleResourceRelationship, -} from '@ember-data/store/-types/q/ember-data-json-api'; +export interface Graph { + identifiers: Map; + + getData(identifier: StableRecordIdentifier, field: string): ResourceRelationship | CollectionRelationship; + + remove(identifier: StableRecordIdentifier): void; + registerPolymorphicType(abstract: string, concrete: string): void; + destroy(): void; +} export interface Operation { op: string; diff --git a/packages/core/src/identifier.ts b/packages/core-types/src/identifier.ts similarity index 98% rename from packages/core/src/identifier.ts rename to packages/core-types/src/identifier.ts index 7fba3594b5d..58c8cb4f983 100644 --- a/packages/core/src/identifier.ts +++ b/packages/core-types/src/identifier.ts @@ -1,6 +1,7 @@ /** @module @ember-data/store */ + // provided for additional debuggability export const DEBUG_CLIENT_ORIGINATED: unique symbol = Symbol('record-originated-on-client'); export const DEBUG_IDENTIFIER_BUCKET: unique symbol = Symbol('identifier-bucket'); @@ -26,6 +27,10 @@ export interface NewRecordIdentifier extends Identifier { type: string; } +export type StableDocumentIdentifier = { + lid: string; +}; + /** * An Identifier specific to a record which may or may not * be present in the cache. diff --git a/packages/core/src/index.ts b/packages/core-types/src/index.ts similarity index 100% rename from packages/core/src/index.ts rename to packages/core-types/src/index.ts diff --git a/packages/store/src/-types/json/raw.ts b/packages/core-types/src/json/raw.ts similarity index 100% rename from packages/store/src/-types/json/raw.ts rename to packages/core-types/src/json/raw.ts diff --git a/packages/core-types/src/params.ts b/packages/core-types/src/params.ts new file mode 100644 index 00000000000..a2053f79e9c --- /dev/null +++ b/packages/core-types/src/params.ts @@ -0,0 +1,6 @@ +export type SerializablePrimitive = string | number | boolean | null; +export type Serializable = SerializablePrimitive | SerializablePrimitive[]; +export type QueryParamsSerializationOptions = { + arrayFormat?: 'bracket' | 'indices' | 'repeat' | 'comma'; +}; +export type QueryParamsSource = Record | URLSearchParams; diff --git a/packages/core-types/src/request.ts b/packages/core-types/src/request.ts new file mode 100644 index 00000000000..cd8bb41ca47 --- /dev/null +++ b/packages/core-types/src/request.ts @@ -0,0 +1,229 @@ +import type { StableRecordIdentifier } from './identifier'; +import type { QueryParamsSerializationOptions } from './params'; +import type { ResourceIdentifierObject } from './spec/raw'; + +type Store = unknown; + +export const SkipCache = Symbol.for('wd:skip-cache'); +export const EnableHydration = Symbol.for('wd:enable-hydration'); +export const IS_FUTURE = Symbol('IS_FUTURE'); +export const STRUCTURED = Symbol('DOC'); + +export type HTTPMethod = 'GET' | 'OPTIONS' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'; + +export type CacheOptions = { + key?: string; + reload?: boolean; + backgroundReload?: boolean; +}; +export type FindRecordRequestOptions = { + url: string; + method: 'GET'; + headers: Headers; + cacheOptions: CacheOptions; + op: 'findRecord'; + records: [ResourceIdentifierObject]; +}; + +export type QueryRequestOptions = { + url: string; + method: 'GET'; + headers: Headers; + cacheOptions: CacheOptions; + op: 'query'; +}; + +export type PostQueryRequestOptions = { + url: string; + method: 'POST' | 'QUERY'; + headers: Headers; + body: string; + cacheOptions: CacheOptions & { key: string }; + op: 'query'; +}; + +export type DeleteRequestOptions = { + url: string; + method: 'DELETE'; + headers: Headers; + op: 'deleteRecord'; + data: { + record: StableRecordIdentifier; + }; +}; + +export type UpdateRequestOptions = { + url: string; + method: 'PATCH' | 'PUT'; + headers: Headers; + op: 'updateRecord'; + data: { + record: StableRecordIdentifier; + }; +}; + +export type CreateRequestOptions = { + url: string; + method: 'POST'; + headers: Headers; + op: 'createRecord'; + data: { + record: StableRecordIdentifier; + }; +}; + +export type RemotelyAccessibleIdentifier = { + id: string; + type: string; + lid?: string; +}; + +export type ConstrainedRequestOptions = { + reload?: boolean; + backgroundReload?: boolean; + host?: string; + namespace?: string; + resourcePath?: string; + urlParamsSettings?: QueryParamsSerializationOptions; +}; + +export type FindRecordOptions = ConstrainedRequestOptions & { + include?: string | string[]; +}; + +export interface StructuredDataDocument { + [STRUCTURED]?: true; + request: ImmutableRequestInfo; + response: Response | ResponseInfo | null; + content: T; +} +export interface StructuredErrorDocument extends Error { + [STRUCTURED]?: true; + request: ImmutableRequestInfo; + response: Response | ResponseInfo | null; + error: string | object; + content?: T; +} +export type StructuredDocument = StructuredDataDocument | StructuredErrorDocument; + +interface Request { + controller?: AbortController; + /* Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */ + cache?: RequestCache; + /* Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */ + credentials?: RequestCredentials; + /* Returns the kind of resource requested by request, e.g., "document" or "script". */ + destination?: RequestDestination; + /* Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the "Host" header. */ + headers?: Headers; + /* Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */ + integrity?: string; + /* Returns a boolean indicating whether or not request can outlive the global in which it was created. */ + keepalive?: boolean; + /* Returns request's HTTP method, which is "GET" by default. */ + method?: HTTPMethod; + /* Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */ + mode?: RequestMode; + /* Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */ + redirect?: RequestRedirect; + /* Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and "about:client" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */ + referrer?: string; + /* Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */ + referrerPolicy?: ReferrerPolicy; + /* Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */ + signal?: AbortSignal; + /* Returns the URL of request as a string. */ + url?: string; + body?: BodyInit | null; +} + +export type ImmutableHeaders = Headers & { clone?(): Headers; toJSON(): [string, string][] }; + +export interface RequestInfo extends Request { + cacheOptions?: { key?: string; reload?: boolean; backgroundReload?: boolean; [SkipCache]?: true }; + store?: Store; + + op?: string; + records?: StableRecordIdentifier[]; + + disableTestWaiter?: boolean; + /* + * data that a handler should convert into + * the query (GET) or body (POST) + */ + data?: Record; + /* + * options specifically intended for handlers + * to utilize to process the request + */ + options?: Record; +} + +export interface ImmutableRequestInfo { + readonly cacheOptions?: { + key?: string; + reload?: boolean; + backgroundReload?: boolean; + [SkipCache]?: true; + }; + readonly store?: Store; + + readonly op?: string; + readonly records?: StableRecordIdentifier[]; + + readonly disableTestWaiter?: boolean; + /* Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */ + readonly cache?: RequestCache; + /* Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */ + readonly credentials?: RequestCredentials; + /* Returns the kind of resource requested by request, e.g., "document" or "script". */ + readonly destination?: RequestDestination; + /* Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the "Host" header. */ + readonly headers?: Headers & { clone?(): Headers }; + /* Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */ + readonly integrity?: string; + /* Returns a boolean indicating whether or not request can outlive the global in which it was created. */ + readonly keepalive?: boolean; + /* Returns request's HTTP method, which is "GET" by default. */ + readonly method?: HTTPMethod; + /* Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */ + readonly mode?: RequestMode; + /* Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */ + readonly redirect?: RequestRedirect; + /* Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and "about:client" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */ + readonly referrer?: string; + /* Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */ + readonly referrerPolicy?: ReferrerPolicy; + /* Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */ + readonly signal?: AbortSignal; + /* Returns the URL of request as a string. */ + readonly url?: string; + /* + * data that a handler should convert into + * the query (GET) or body (POST) + */ + readonly data?: Record; + /* + * options specifically intended for handlers + * to utilize to process the request + */ + readonly options?: Record; +} + +export interface ResponseInfo { + readonly headers: ImmutableHeaders; // to do, maybe not this? + readonly ok: boolean; + readonly redirected: boolean; + readonly status: number; + readonly statusText: string; + readonly type: string; + readonly url: string; +} + +export interface RequestContext { + request: ImmutableRequestInfo; + id: number; + + setStream(stream: ReadableStream): void; + setResponse(response: Response | ResponseInfo): void; +} diff --git a/packages/store/src/-types/q/record-data-schemas.ts b/packages/core-types/src/schema.ts similarity index 96% rename from packages/store/src/-types/q/record-data-schemas.ts rename to packages/core-types/src/schema.ts index 98df5e52b85..9a4e219ff4c 100644 --- a/packages/store/src/-types/q/record-data-schemas.ts +++ b/packages/core-types/src/schema.ts @@ -1,7 +1,7 @@ -/** - @module @ember-data/store +/* + @module @warp-drive/core-types + @internal */ - export interface RelationshipSchema { kind: 'belongsTo' | 'hasMany'; type: string; // related type diff --git a/packages/store/src/-types/cache/document.ts b/packages/core-types/src/spec/document.ts similarity index 83% rename from packages/store/src/-types/cache/document.ts rename to packages/core-types/src/spec/document.ts index d92213f1a88..2fbb8956caf 100644 --- a/packages/store/src/-types/cache/document.ts +++ b/packages/core-types/src/spec/document.ts @@ -1,7 +1,6 @@ -import type { StableExistingRecordIdentifier } from '@warp-drive/core/identifier'; - -import { Links, Meta, PaginationLinks } from '../q/ember-data-json-api'; -import { JsonApiError } from '../q/record-data-json-api'; +import type { StableExistingRecordIdentifier } from '../identifier'; +import type { ApiError } from './error'; +import type { Links, Meta, PaginationLinks } from './raw'; export interface ResourceMetaDocument { // the url or cache-key associated with the structured document @@ -37,7 +36,7 @@ export interface ResourceErrorDocument { lid?: string; links?: Links | PaginationLinks; meta?: Meta; - errors: JsonApiError[]; + errors: ApiError[]; } export type ResourceDocument = diff --git a/packages/core-types/src/spec/error.ts b/packages/core-types/src/spec/error.ts new file mode 100644 index 00000000000..d03eff16457 --- /dev/null +++ b/packages/core-types/src/spec/error.ts @@ -0,0 +1,19 @@ +import type { Link, Meta } from './raw'; + +export interface ApiError { + id?: string; + title?: string; + detail?: string; + links?: { + about?: Link; + type?: Link; + }; + status?: string; + code?: string; + source?: { + pointer: string; + parameter?: string; + header?: string; + }; + meta?: Meta; +} diff --git a/packages/store/src/-types/q/ember-data-json-api.ts b/packages/core-types/src/spec/raw.ts similarity index 94% rename from packages/store/src/-types/q/ember-data-json-api.ts rename to packages/core-types/src/spec/raw.ts index 3046eecbff8..5e4446e8c33 100644 --- a/packages/store/src/-types/q/ember-data-json-api.ts +++ b/packages/core-types/src/spec/raw.ts @@ -1,7 +1,6 @@ -/** - @module @ember-data/store +/* + @module @warp-drive/core-types */ - import { ArrayValue, ObjectValue } from '../json/raw'; export type Meta = ObjectValue; @@ -141,4 +140,12 @@ export interface CollectionResourceDocument extends Document { data: ExistingResourceObject[]; } +/** + * A (RAW) JSON:API Formatted Document. + * + * These documents should follow the JSON:API spec but do not + * have the same level of guarantees as their `spec` counterparts. + * + * @internal + */ export type JsonApiDocument = EmptyResourceDocument | SingleResourceDocument | CollectionResourceDocument; diff --git a/packages/core/tsconfig.json b/packages/core-types/tsconfig.json similarity index 90% rename from packages/core/tsconfig.json rename to packages/core-types/tsconfig.json index 9491d5b58ea..cc7842f7ca2 100644 --- a/packages/core/tsconfig.json +++ b/packages/core-types/tsconfig.json @@ -1,18 +1,11 @@ { "include": ["src/**/*"], "compilerOptions": { - "target": "ES2022", - "module": "ES2020", - "moduleResolution": "node", + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", "skipLibCheck": true, - "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "noEmit": false, - - // Enable faster builds - // but causes us to not rebuild properly - "incremental": false, - "allowJs": false, "checkJs": false, @@ -26,6 +19,7 @@ "strictFunctionTypes": true, "strictPropertyInitialization": true, "allowUnreachableCode": false, + "exactOptionalPropertyTypes": true, "allowUnusedLabels": false, "noEmitOnError": false, "strictNullChecks": true, @@ -34,10 +28,16 @@ "experimentalDecorators": true, "pretty": true, + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + // Support generation of source maps. Note: you must *also* enable source // maps in your `ember-cli-babel` config and/or `babel.config.js`. "declaration": true, "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, diff --git a/packages/debug/.eslintrc.cjs b/packages/debug/.eslintrc.cjs new file mode 100644 index 00000000000..21f62606654 --- /dev/null +++ b/packages/debug/.eslintrc.cjs @@ -0,0 +1,25 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults()], +}; diff --git a/packages/debug/package.json b/packages/debug/package.json index ec101c0decc..02f3acc23bf 100644 --- a/packages/debug/package.json +++ b/packages/debug/package.json @@ -13,7 +13,10 @@ "license": "MIT", "author": "", "directories": {}, - "scripts": {}, + "scripts": { + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" + }, "peerDependencies": { "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember/string": "^3.1.1" @@ -27,6 +30,18 @@ }, "@ember-data/store": { "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true } }, "dependencies": { @@ -36,8 +51,19 @@ "@embroider/macros": "^1.13.2", "ember-auto-import": "^2.6.3", "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "webpack": "^5.89.0" }, + "devDependencies": { + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", + "@glimmer/component": "^1.1.2", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-source": "~5.3.0" + }, "engines": { "node": ">= 18.18.2" }, @@ -46,4 +72,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/diagnostic/.eslintrc.cjs b/packages/diagnostic/.eslintrc.cjs new file mode 100644 index 00000000000..a94177fe64e --- /dev/null +++ b/packages/diagnostic/.eslintrc.cjs @@ -0,0 +1,34 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug', '@ember/test-helpers'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [ + node.defaults(), + node.defaults({ useModules: true, globals: { Bun: true }, files: ['./server/**'] }), + typescript.defaults({ + rules: { + 'no-console': 'off', + }, + }), + ], +}; diff --git a/packages/diagnostic/addon-main.cjs b/packages/diagnostic/addon-main.cjs index f868d6b91ec..d36b0c86dac 100644 --- a/packages/diagnostic/addon-main.cjs +++ b/packages/diagnostic/addon-main.cjs @@ -1,4 +1,5 @@ 'use strict'; const { addonV1Shim } = require('@embroider/addon-shim'); + module.exports = addonV1Shim(__dirname); diff --git a/packages/diagnostic/package.json b/packages/diagnostic/package.json index c101f21f8b2..ea367be9dc5 100644 --- a/packages/diagnostic/package.json +++ b/packages/diagnostic/package.json @@ -60,18 +60,19 @@ } }, "scripts": { + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", "build:tests": "rm -rf dist-test && cp -R test dist-test && mkdir -p dist-test/@warp-drive && cp -R dist dist-test/@warp-drive/diagnostic", "build:types": "tsc --build --force", "build:runtime": "rollup --config", - "build": "pnpm build:runtime && pnpm build:types && pnpm build:tests", + "build": "pnpm build:runtime && pnpm build:types", "start": "rollup --config --watch", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "peerDependencies": { "@ember/test-helpers": ">= 3.2.0", - "ember-cli-test-loader": ">= 3.1.0", - "@embroider/addon-shim": ">= 1.8.6" + "@embroider/addon-shim": ">= 1.8.6", + "ember-cli-test-loader": ">= 3.1.0" }, "peerDependenciesMeta": { "@ember/test-helpers": { @@ -87,6 +88,7 @@ "dependencies": { "chalk": "^5.3.0", "debug": "^4.3.4", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "tmp": "^0.2.1" }, "devDependencies": { @@ -99,12 +101,15 @@ "@embroider/addon-dev": "^4.1.1", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "bun-types": "^1.0.6", + "@ember/test-helpers": "^3.2.0", + "ember-source": "~5.3.0", + "@glimmer/component": "^1.1.2", "ember-cli-test-loader": "^3.1.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", - "walk-sync": "^3.0.0", - "bun-types": "^1.0.6" + "walk-sync": "^3.0.0" }, "engines": { "node": ">= 18.18.2" @@ -120,5 +125,10 @@ }, "ember": { "edition": "octane" + }, + "dependenciesMeta": { + "@warp-drive/internal-config": { + "injected": true + } } -} \ No newline at end of file +} diff --git a/packages/diagnostic/rollup.config.mjs b/packages/diagnostic/rollup.config.mjs index c74dc4f6bcd..955ecdc8558 100644 --- a/packages/diagnostic/rollup.config.mjs +++ b/packages/diagnostic/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'dist', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: ["@ember/test-helpers", "ember-cli-test-loader/test-support/index"], + external: external(['@ember/test-helpers', 'ember-cli-test-loader/test-support/index']), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/diagnostic/server/browsers/index.js b/packages/diagnostic/server/browsers/index.js index 2f5088c78ed..a9226421ddf 100644 --- a/packages/diagnostic/server/browsers/index.js +++ b/packages/diagnostic/server/browsers/index.js @@ -1,8 +1,9 @@ -import { debug } from "../utils/debug"; import os from 'os'; import path from 'path'; import tmp from 'tmp'; -import { isWin, platformName } from "../utils/platform"; + +import { debug } from '../utils/debug'; +import { isWin, platformName } from '../utils/platform'; export function getHomeDir() { return process.env.HOME || process.env.USERPROFILE; @@ -14,7 +15,7 @@ function chromeWinPaths(name) { homeDir + '\\Local Settings\\Application Data\\Google\\' + name + '\\Application\\chrome.exe', homeDir + '\\AppData\\Local\\Google\\' + name + '\\Application\\chrome.exe', 'C:\\Program Files\\Google\\' + name + '\\Application\\Chrome.exe', - 'C:\\Program Files (x86)\\Google\\' + name + '\\Application\\Chrome.exe' + 'C:\\Program Files (x86)\\Google\\' + name + '\\Application\\Chrome.exe', ]; } @@ -22,50 +23,42 @@ function chromeDarwinPaths(name) { const homeDir = getHomeDir(); return [ homeDir + '/Applications/' + name + '.app/Contents/MacOS/' + name, - '/Applications/' + name + '.app/Contents/MacOS/' + name + '/Applications/' + name + '.app/Contents/MacOS/' + name, ]; } const ChromePaths = { win: chromeWinPaths, darwin: chromeDarwinPaths, -} +}; const ChromeTags = { win: { stable: 'Chrome', beta: 'Chrome Beta', - canary: 'Chrome SxS' + canary: 'Chrome SxS', }, darwin: { stable: 'Google Chrome', beta: 'Google Chrome Beta', - canary: 'Google Chrome Canary' - } -} + canary: 'Google Chrome Canary', + }, +}; const ChromeExeNames = { - stable: [ - 'google-chrome-stable', - 'google-chrome', - 'chrome' - ], - beta: [ - 'google-chrome-beta', - ], - canary: [ - 'google-chrome-unstable' - ] -} + stable: ['google-chrome-stable', 'google-chrome', 'chrome'], + beta: ['google-chrome-beta'], + canary: ['google-chrome-unstable'], +}; async function executableExists(exe) { const cmd = isWin() ? 'where' : 'which'; const result = Bun.spawnSync([cmd, exe], { - stdout: 'inherit' + stdout: 'inherit', }); return result.success; -}; +} async function isInstalled(browser) { const result = await checkBrowser(browser.possiblePath, fileExists); @@ -73,7 +66,7 @@ async function isInstalled(browser) { return result; } - return checkBrowser(browser.possibleExe, function(exe) { + return checkBrowser(browser.possibleExe, function (exe) { return executableExists(exe); }); } @@ -111,15 +104,21 @@ async function getChrome(browser, tag) { const lookupInfo = { name: browser.toLowerCase(), possiblePath: paths, - possibleExe: ChromeExeNames[tag] + possibleExe: ChromeExeNames[tag], }; const result = await isInstalled(lookupInfo); if (!result) { - throw new Error(`Could not find ${lookupInfo.name} on your system (${platform}).\n\n\tChecked Paths:\n\t\t${lookupInfo.possiblePath.join('\n\t\t')}\n\tChecked Executable Names:\n\t\t${lookupInfo.possibleExe.join('\n\t\t')}`); + throw new Error( + `Could not find ${ + lookupInfo.name + } on your system (${platform}).\n\n\tChecked Paths:\n\t\t${lookupInfo.possiblePath.join( + '\n\t\t' + )}\n\tChecked Executable Names:\n\t\t${lookupInfo.possibleExe.join('\n\t\t')}` + ); } - debug(`Found ${lookupInfo.name} executable ${result}`) + debug(`Found ${lookupInfo.name} executable ${result}`); return result; } @@ -151,7 +150,7 @@ export function getTmpDir(browser) { const tmpDir = tmp.dirSync({ template: `${tmpPath}-XXXXXX`, - unsafeCleanup: true + unsafeCleanup: true, }); TMP_DIRS.set(browser, tmpDir); @@ -164,7 +163,18 @@ export function recommendedArgs(browser, options = {}) { } const DEBUG = options.debug || debug.enabled; const DEBUG_MEMORY = options.memory || process.env.DEBUG_MEMORY; - const HEADLESS = 'headless' in options ? options.headless : true; + const SERVE = 'serve' in options ? options.serve : false; + const HEADLESS = 'headless' in options ? options.headless : !SERVE; + const useExisting = 'useExisting' in options ? options.useExisting : false; + const noLaunch = 'noLaunch' in options ? options.noLaunch : false; + + if (noLaunch) { + return []; + } + + if (useExisting) { + return ['--incognito']; + } // See https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md // For more details on these flags diff --git a/packages/diagnostic/server/bun/fetch.js b/packages/diagnostic/server/bun/fetch.js index f4ddc09197b..6f797dc531d 100644 --- a/packages/diagnostic/server/bun/fetch.js +++ b/packages/diagnostic/server/bun/fetch.js @@ -1,7 +1,8 @@ import chalk from 'chalk'; -import { info, debug } from '../utils/debug.js'; import path from 'path'; -import { INDEX_PATHS } from "../utils/const.js"; + +import { INDEX_PATHS } from '../utils/const.js'; +import { debug, info } from '../utils/debug.js'; /** @type {import('bun-types')} */ @@ -15,11 +16,10 @@ export function handleBunFetch(config, state, req, server) { return; } - let bId = url.searchParams.get('b') ?? null; - let wId = url.searchParams.get('w') ?? null; + const bId = url.searchParams.get('b') ?? null; + const wId = url.searchParams.get('w') ?? null; info(`[${chalk.cyan(req.method)}] ${url.pathname}`); - if (config.parallel > 1 && url.pathname === '/parallel-launcher') { debug(`Serving parallel launcher`); const dir = import.meta.dir; @@ -36,8 +36,8 @@ export function handleBunFetch(config, state, req, server) { debug(`Serving entry ${config._realEntry} for browser ${bId} window ${wId}`); return new Response(Bun.file(config._realEntry)); } - let _bId = bId ?? state.lastBowserId ?? state.browserId; - let _wId = wId ?? state.lastWindowId ?? state.windowId; + const _bId = bId ?? state.lastBowserId ?? state.browserId; + const _wId = wId ?? state.lastWindowId ?? state.windowId; debug(`Redirecting to ${config.entry} for browser ${_bId} window ${_wId}`); // redirect to index.html return Response.redirect(`${protocol}://${state.hostname}:${state.port}?b=${_bId}&w=${_wId}`, { status: 302 }); diff --git a/packages/diagnostic/server/bun/launch-browser.js b/packages/diagnostic/server/bun/launch-browser.js index a92154d7e45..c3088411f3d 100644 --- a/packages/diagnostic/server/bun/launch-browser.js +++ b/packages/diagnostic/server/bun/launch-browser.js @@ -1,4 +1,5 @@ import chalk from 'chalk'; + import { info, print } from '../utils/debug.js'; /** @type {import('bun-types')} */ @@ -25,7 +26,9 @@ export async function launchBrowsers(config, state) { pages.push(`?b=${bId}&w=${state.windowId++}`); } - const launcherUrl = `${state.protocol}://${state.hostname}:${state.port}/parallel-launcher?p[]=${pages.join('&p[]=')}`; + const launcherUrl = `${state.protocol}://${state.hostname}:${state.port}/parallel-launcher?p[]=${pages.join( + '&p[]=' + )}`; args.push(launcherUrl); } else { args.push(`${state.protocol}://${state.hostname}:${state.port}?b=${bId}&w=${state.windowId++}`); diff --git a/packages/diagnostic/server/bun/port.js b/packages/diagnostic/server/bun/port.js index 5881b41cf67..95a27402636 100644 --- a/packages/diagnostic/server/bun/port.js +++ b/packages/diagnostic/server/bun/port.js @@ -13,7 +13,7 @@ export async function checkPort(port) { data() { debug(`Port ${port} received data 🙈`); }, - } + }, }); debug(`Port ${port} is available, releasing it for server`); server.stop(true); diff --git a/packages/diagnostic/server/bun/socket-handler.js b/packages/diagnostic/server/bun/socket-handler.js index 84ed8b2e28e..622bc6be353 100644 --- a/packages/diagnostic/server/bun/socket-handler.js +++ b/packages/diagnostic/server/bun/socket-handler.js @@ -1,6 +1,7 @@ -import { info, debug } from "../utils/debug.js"; import chalk from 'chalk'; -import { sinceStart } from "../utils/time.js"; + +import { debug, info } from '../utils/debug.js'; +import { sinceStart } from '../utils/time.js'; export function buildHandler(config, state) { return { @@ -27,24 +28,33 @@ export function buildHandler(config, state) { case 'suite-finish': config.reporter.onSuiteFinish(msg); - ws.send(JSON.stringify({ name: 'close' })); - ws.close(); + if (!config.serve) { + ws.send(JSON.stringify({ name: 'close' })); + ws.close(); + } state.completed++; - debug(`${chalk.green('✅ [Complete]')} ${chalk.cyan(msg.browserId)}/${chalk.cyan(msg.windowId)} ${chalk.yellow('@' + sinceStart())}`); + debug( + `${chalk.green('✅ [Complete]')} ${chalk.cyan(msg.browserId)}/${chalk.cyan(msg.windowId)} ${chalk.yellow( + '@' + sinceStart() + )}` + ); if (state.completed === state.expected) { const exitCode = config.reporter.onRunFinish(msg); debug(`${chalk.green('✅ [All Complete]')} ${chalk.yellow('@' + sinceStart())}`); - state.browsers.forEach((browser) => { - browser.proc.kill(); - browser.proc.unref(); - }); - state.server.stop(); - if (config.cleanup) { - debug(`Running configured cleanup hook`); - await config.cleanup(); - debug(`Configured cleanup hook completed`); + + if (!config.serve) { + state.browsers.forEach((browser) => { + browser.proc.kill(); + browser.proc.unref(); + }); + state.server.stop(); + if (config.cleanup) { + debug(`Running configured cleanup hook`); + await config.cleanup(); + debug(`Configured cleanup hook completed`); + } + process.exit(exitCode); } - process.exit(exitCode); } break; @@ -54,5 +64,5 @@ export function buildHandler(config, state) { open(ws) {}, // a socket is opened close(ws, code, message) {}, // a socket is closed drain(ws) {}, // the socket is ready to receive more data - } -}; + }; +} diff --git a/packages/diagnostic/server/default-setup.js b/packages/diagnostic/server/default-setup.js index 851fd3263c1..87dc0311065 100644 --- a/packages/diagnostic/server/default-setup.js +++ b/packages/diagnostic/server/default-setup.js @@ -1,10 +1,12 @@ /* eslint-disable no-console */ +import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; + +import { getBrowser, recommendedArgs } from './browsers/index.js'; import launch from './index.js'; -import chalk from 'chalk'; -import { recommendedArgs, getBrowser } from './browsers/index.js'; import DefaultReporter from './reporters/default.js'; +import { getFlags } from './utils/get-flags.js'; const CI_BROWSER = process.env.CI_BROWSER || 'Chrome'; const BROWSER_TAG = CI_BROWSER.toLowerCase(); @@ -19,29 +21,6 @@ try { TEST_FAILURES = false; } const FAILURES = TEST_FAILURES ? TEST_FAILURES.trim().split(',') : false; -const RETRY_TESTS = (process.env.CI ?? process.env.RETRY_TESTS) && FAILURES.length; -const _parallel = process.env.DIAGNOSTIC_PARALLEL && !isNaN(Number(process.env.DIAGNOSTIC_PARALLEL)) ? Number(process.env.DIAGNOSTIC_PARALLEL) : 1; -const parallel = _parallel > 1 && RETRY_TESTS && FAILURES.length < _parallel * 4 ? 1 : _parallel; - -if (RETRY_TESTS) { - console.log(chalk.grey(`⚠️ Retrying ${chalk.bold(chalk.yellow(FAILURES.length))} failed tests: ${chalk.bold(chalk.white(FAILURES.join(',')))}`)); -} else if (FAILURES.length) { - console.log( - `⚠️ Found ${chalk.bold(chalk.yellow(FAILURES.length))} previously failed tests: ${chalk.bold(chalk.white(FAILURES.join(',')))}. Use RETRY_TESTS=1 to retry them.`, - ); -} - -const TEST_PAGE_FLAGS = [ - process.env.DEBUG_MEMORY ? 'memory=1' : false, - process.env.CI || process.env.DEBUG_MEMORY ? 'hideReport=1' : false, - process.env.DEBUG_PERFORMANCE ? 'performance=1' : false, - process.env.DEBUG ? 'debug=1' : false, - RETRY_TESTS ? `testId=${FAILURES.join('&testId=')}` : false, -].filter(Boolean); - -console.log( - `\n\nLaunching with ${chalk.bold(chalk.cyan(CI_BROWSER))} (worker count ${chalk.bold(chalk.yellow(parallel))})\n\n` -); // default 13min per-browser test suite run timeout in seconds const DEFAULT_SUITE_TIMEOUT = 780; @@ -53,15 +32,65 @@ const SUITE_TIMEOUT = process.env.SUITE_TIMEOUT : DEFAULT_SUITE_TIMEOUT; export default async function launchDefault(overrides = {}) { + const flags = getFlags().filtered; + Object.assign(overrides, flags); + + const RETRY_TESTS = + ('retry' in overrides ? overrides.retry : process.env.CI ?? process.env.RETRY_TESTS) && FAILURES.length; + const _parallel = + process.env.DIAGNOSTIC_PARALLEL && !isNaN(Number(process.env.DIAGNOSTIC_PARALLEL)) + ? Number(process.env.DIAGNOSTIC_PARALLEL) + : 1; + const parallel = _parallel > 1 && RETRY_TESTS && FAILURES.length < _parallel * 4 ? 1 : _parallel; + + if (RETRY_TESTS) { + console.log( + chalk.grey( + `⚠️ Retrying ${chalk.bold(chalk.yellow(FAILURES.length))} failed tests: ${chalk.bold( + chalk.white(FAILURES.join(',')) + )}` + ) + ); + } else if (FAILURES.length) { + console.log( + `⚠️ Found ${chalk.bold(chalk.yellow(FAILURES.length))} previously failed tests: ${chalk.bold( + chalk.white(FAILURES.join(',')) + )}. Use RETRY_TESTS=1 or --retry/-r to retry them.` + ); + } + const DEBUG = Boolean(process.env.DEBUG ?? overrides.debug ?? false); + + const TEST_PAGE_FLAGS = [ + process.env.DEBUG_MEMORY ? 'memory=1' : false, + process.env.CI || process.env.DEBUG_MEMORY ? 'hideReport=1' : false, + process.env.DEBUG_PERFORMANCE ? 'performance=1' : false, + DEBUG ? 'debug=1' : false, + RETRY_TESTS ? `testId=${FAILURES.join('&testId=')}` : false, + ].filter(Boolean); + + console.log( + `\n\nLaunching with ${chalk.bold(chalk.cyan(CI_BROWSER))} (worker count ${chalk.bold(chalk.yellow(parallel))})\n\n` + ); + await launch({ + // flag config + serve: overrides.serve ?? false, + noLaunch: overrides.noLaunch ?? false, + filter: overrides.filter ?? false, + debug: overrides.debug ?? false, + headless: overrides.headless ?? false, + useExisting: overrides.useExisting ?? false, + entry: overrides.entry ?? `./dist-test/tests/index.html?${TEST_PAGE_FLAGS.join('&')}`, assets: overrides.assets ?? './dist-test', parallel: overrides.parallel ?? parallel, parallelMode: overrides.parallelMode ?? 'window', // 'tab' | 'browser' | 'window' - reporter: overrides.reporter ?? new DefaultReporter({ - mode: process.env.DIAGNOSTIC_REPORTER_MODE || 'dot', // 'dot' | 'compact' | 'verbose' - }), + reporter: + overrides.reporter ?? + new DefaultReporter({ + mode: process.env.DIAGNOSTIC_REPORTER_MODE || 'dot', // 'dot' | 'compact' | 'verbose' + }), suiteTimeout: overrides.suiteTimeout ?? SUITE_TIMEOUT, browserDisconnectTimeout: overrides.browserDisconnectTimeout ?? 15, @@ -76,7 +105,6 @@ export default async function launchDefault(overrides = {}) { command: browser, args: recommendedArgs(BROWSER_TAG, overrides), }, - } + }, }); - } diff --git a/packages/diagnostic/server/index.js b/packages/diagnostic/server/index.js index 8742090d9aa..a1a9becd155 100644 --- a/packages/diagnostic/server/index.js +++ b/packages/diagnostic/server/index.js @@ -1,12 +1,12 @@ import chalk from 'chalk'; -import { getPort } from './utils/port.js'; -import { debug, error, print } from './utils/debug.js'; + import { handleBunFetch } from './bun/fetch.js'; import { launchBrowsers } from './bun/launch-browser.js'; import { buildHandler } from './bun/socket-handler.js'; +import { debug, error, print } from './utils/debug.js'; +import { getPort } from './utils/port.js'; /** @type {import('bun-types')} */ -/* global Bun, globalThis */ const isBun = typeof Bun !== 'undefined'; export default async function launch(config) { @@ -28,7 +28,7 @@ export default async function launch(config) { }; const state = { - browserId: 42, + browserId: 42, lastBowserId: null, windowId: 0, lastWindowId: null, @@ -37,7 +37,7 @@ export default async function launch(config) { protocol, browsers: new Map(), completed: 0, - expected: config.parallel ?? 1 + expected: config.parallel ?? 1, }; if (protocol === 'https') { @@ -47,7 +47,7 @@ export default async function launch(config) { serveOptions.tls = { key: Bun.file(config.key), cert: Bun.file(config.cert), - } + }; } try { @@ -65,7 +65,7 @@ export default async function launch(config) { port, hostname, protocol, - url: `${protocol}://${hostname}:${port}` + url: `${protocol}://${hostname}:${port}`, }; await launchBrowsers(config, state); } catch (e) { diff --git a/packages/diagnostic/server/reporters/default.js b/packages/diagnostic/server/reporters/default.js index c57b9f7c35f..4df85f0f58b 100644 --- a/packages/diagnostic/server/reporters/default.js +++ b/packages/diagnostic/server/reporters/default.js @@ -1,5 +1,5 @@ -import fs from 'fs'; import chalk from 'chalk'; +import fs from 'fs'; import path from 'path'; const SLOW_TEST_COUNT = 50; @@ -9,12 +9,12 @@ const DEFAULT_TEST_TIMEOUT = 21_000; const failedTestsFile = path.join(process.cwd(), './diagnostic-failed-test-log.txt'); function indent(text, width = 2) { - return text - .split('\n') - .map((line) => { - return new Array(width).join('\t') + line; - }) - .join('\n'); + return text + .split('\n') + .map((line) => { + return new Array(width).join('\t') + line; + }) + .join('\n'); } const HEADER_STR = '==================================================================='; @@ -52,7 +52,7 @@ export default class CustomDotReporter { this.pass = 0; this.skip = 0; this.todo = 0; - this.fail= 0; + this.fail = 0; // display info this.shouldPrintHungTests = false; @@ -78,7 +78,11 @@ export default class CustomDotReporter { const elapsed = this.realStartTime - this.dateTimeZero; this.write( - `\n\n${HEADER_STR}\n Test Run Initiated\n\tSuite Start: ${chalk.cyan(new Date(this.realStartTime).toLocaleString('en-US'))} (elapsed ${chalk.cyan(elapsed.toLocaleString('en-US'))} ms)\n\tReporter Start: ${chalk.cyan(new Date().toLocaleString('en-US'))} (elapsed ${chalk.cyan(runDelta.toLocaleString('en-US'))} ms)\n${HEADER_STR}\n\n`, + `\n\n${HEADER_STR}\n Test Run Initiated\n\tSuite Start: ${chalk.cyan( + new Date(this.realStartTime).toLocaleString('en-US') + )} (elapsed ${chalk.cyan(elapsed.toLocaleString('en-US'))} ms)\n\tReporter Start: ${chalk.cyan( + new Date().toLocaleString('en-US') + )} (elapsed ${chalk.cyan(runDelta.toLocaleString('en-US'))} ms)\n${HEADER_STR}\n\n` ); } @@ -89,18 +93,18 @@ export default class CustomDotReporter { onTestStart(report) { this.getTab(report).running.set(report.data.testId, report); report.testNo = this.startNumber++; - report._testStarted = this.now(); - this.idsToStartNumber.set(`${report.browserId}:${report.windowId}:${report.data.testId}`, report.testNo); - this.ensureTimeoutCheck(); + report._testStarted = this.now(); + this.idsToStartNumber.set(`${report.browserId}:${report.windowId}:${report.data.testId}`, report.testNo); + this.ensureTimeoutCheck(); report.launcherDescription = `${report.launcher}:${report.browserId}:${report.windowId}`; - report.name = `${report.launcherDescription} #${report.testNo} ${chalk.magenta( - '@ ' + (Math.round(report._testStarted / 10) / 100).toLocaleString('en-US') + 's', - )} ${report.data.name}`; + report.name = `${report.launcherDescription} #${report.testNo} ${chalk.magenta( + '@ ' + (Math.round(report._testStarted / 10) / 100).toLocaleString('en-US') + 's' + )} ${report.data.name}`; - if (process.env.DISPLAY_TEST_NAMES) { - this.write(`\t\t⏱️ ${chalk.magenta(' Started')}: ${report.name}\n`); - } + if (process.env.DISPLAY_TEST_NAMES) { + this.write(`\t\t⏱️ ${chalk.magenta(' Started')}: ${report.name}\n`); + } } onTestFinish(report) { @@ -109,17 +113,17 @@ export default class CustomDotReporter { const startNo = this.idsToStartNumber.get(startNoKey); report.testNo = startNo ?? ''; - report.data.runDuration = report.data.runDuration ?? 0; + report.data.runDuration = report.data.runDuration ?? 0; report.launcherDescription = `${report.launcher}:${report.browserId}:${report.windowId}`; - if (tab.running.has(report.data.testId)) tab.running.delete(report.data.testId); + if (tab.running.has(report.data.testId)) tab.running.delete(report.data.testId); - if (this.isCompactFormat) { - this.displayFullResult(report, false); - } else if (this.isDotFormat) { - if (this.results.length === 0) this.displayDotLegend(); - this.displayDotResult(report); - } else if (this.isVerboseFormat) { + if (this.isCompactFormat) { + this.displayFullResult(report, false); + } else if (this.isDotFormat) { + if (this.results.length === 0) this.displayDotLegend(); + this.displayDotResult(report); + } else if (this.isVerboseFormat) { this.displayFullResult(report, true); } else { throw new Error(`Unknown Reporter Mode ${this.config.mode}. Please use one of 'dot', 'compact', or 'verbose'`); @@ -128,22 +132,22 @@ export default class CustomDotReporter { const { data } = report; this.results.push(report); - this.total++; - if (data.skipped) { - this.skip++; - } else if (data.passed && !data.todo) { - this.pass++; - } else if (!data.passed && data.todo) { - this.todo++; - } else { + this.total++; + if (data.skipped) { + this.skip++; + } else if (data.passed && !data.todo) { + this.pass++; + } else if (!data.passed && data.todo) { + this.todo++; + } else { this.fail++; } - if (data.failed && !data.skipped && !data.todo) { - this.lineFailures.push(report); - this.failedTests.push(report); + if (data.failed && !data.skipped && !data.todo) { + this.lineFailures.push(report); + this.failedTests.push(report); this.failedTestIds.add(data.testId); - } + } } onGlobalFailure(report) { @@ -154,18 +158,18 @@ export default class CustomDotReporter { onSuiteFinish() {} onRunFinish(runReport) { - if (this.failedTests.length) { - this.write( - chalk.red( - `\n\n${this.failedTests.length} Tests Failed. Complete stack traces for failures will print at the end.`, - ), - ); - } + if (this.failedTests.length) { + this.write( + chalk.red( + `\n\n${this.failedTests.length} Tests Failed. Complete stack traces for failures will print at the end.` + ) + ); + } this.write(`\n\n`); - this.reportPendingTests(); - this.reportSlowTests(); - this.reportFailedTests(); + this.reportPendingTests(); + this.reportSlowTests(); + this.reportFailedTests(); this.summarizeResults(); @@ -180,23 +184,29 @@ export default class CustomDotReporter { const realEndDate = new Date(realEndTime); this.write( - `\n\n${HEADER_STR}\n Test Run Complete\n\tSuite End: ${chalk.cyan(realEndDate.toLocaleString('en-US'))} (elapsed ${chalk.cyan(suiteElapsed.toLocaleString('en-US'))} ms)\n\tReporter End: ${chalk.cyan(endDate.toLocaleString('en-US'))} (elapsed ${chalk.cyan(runElapsed.toLocaleString('en-US'))} ms)\n\tRun Duration ${chalk.cyan(fullElapsed.toLocaleString('en-US'))} ms\n${HEADER_STR}\n\n`, + `\n\n${HEADER_STR}\n Test Run Complete\n\tSuite End: ${chalk.cyan( + realEndDate.toLocaleString('en-US') + )} (elapsed ${chalk.cyan(suiteElapsed.toLocaleString('en-US'))} ms)\n\tReporter End: ${chalk.cyan( + endDate.toLocaleString('en-US') + )} (elapsed ${chalk.cyan(runElapsed.toLocaleString('en-US'))} ms)\n\tRun Duration ${chalk.cyan( + fullElapsed.toLocaleString('en-US') + )} ms\n${HEADER_STR}\n\n` ); return this.failedTests.length ? 1 : 0; } addLauncher(data) { - this.launchers = this.launchers || {}; + this.launchers = this.launchers || {}; this.tabs = this.tabs || new Map(); const { launcher, browserId, windowId } = data; this.launchers[launcher] = this.launchers[launcher] || {}; - const browser = this.launchers[launcher][browserId] = this.launchers[launcher][browserId] || { + const browser = (this.launchers[launcher][browserId] = this.launchers[launcher][browserId] || { launcher, id: browserId, tabs: new Set(), - }; + }); const tabId = `${browserId}:${windowId}`; if (browser.tabs.has(tabId)) { @@ -207,7 +217,7 @@ export default class CustomDotReporter { this.tabs.set(tabId, { running: new Map(), }); - } + } getTab(test) { const { windowId, browserId } = test; @@ -217,80 +227,78 @@ export default class CustomDotReporter { } now() { - return performance.now() - this.startTime; - } + return performance.now() - this.startTime; + } displayDotLegend() { - this.write('\n\tLegend\n\t========='); - this.write(chalk.green('\n\tPass:\t.')); - this.write(chalk.cyan('\n\tTodo:\tT')); - this.write(chalk.yellow('\n\tSkip:\t*')); - this.write(chalk.bold(chalk.red('\n\tFail:\tF'))); - this.write('\n\n\t'); - } + this.write('\n\tLegend\n\t========='); + this.write(chalk.green('\n\tPass:\t.')); + this.write(chalk.cyan('\n\tTodo:\tT')); + this.write(chalk.yellow('\n\tSkip:\t*')); + this.write(chalk.bold(chalk.red('\n\tFail:\tF'))); + this.write('\n\n\t'); + } displayDotResult(report) { // complete line - if (this.currentLineChars > this.maxLineChars) { - if (this.shouldPrintHungTests) { - this.shouldPrintHungTests = false; - this.reportHungTests(); - } - - this.totalLines++; - this.currentLineChars = 0; - const lineFailures = this.lineFailures; - this.lineFailures = []; - - if (lineFailures.length) { - this.write('\n\n'); - lineFailures.forEach((failure) => { - this.displayFullResult(failure, false); - }); - } - - if (this.totalLines % 5 === 0) { - this.write(`\n${chalk.magenta((this.totalLines * this.maxLineChars).toLocaleString('en-US'))}⎡\t`); - } else { - this.write('\n\t'); - } - } + if (this.currentLineChars > this.maxLineChars) { + if (this.shouldPrintHungTests) { + this.shouldPrintHungTests = false; + this.reportHungTests(); + } + + this.totalLines++; + this.currentLineChars = 0; + const lineFailures = this.lineFailures; + this.lineFailures = []; + + if (lineFailures.length) { + this.write('\n\n'); + lineFailures.forEach((failure) => { + this.displayFullResult(failure, false); + }); + } + + if (this.totalLines % 5 === 0) { + this.write(`\n${chalk.magenta((this.totalLines * this.maxLineChars).toLocaleString('en-US'))}⎡\t`); + } else { + this.write('\n\t'); + } + } const result = report.data; - if (result.passed && !result.todo) { - this.write(chalk.grey('.')); - } else if (!result.passed && result.todo) { - this.write(chalk.cyan('T')); - } else if (result.skipped) { - this.write(chalk.yellow('*')); - } else { - this.write(chalk.bold(chalk.red('F'))); - } - this.currentLineChars += 1; - } + if (result.passed && !result.todo) { + this.write(chalk.grey('.')); + } else if (!result.passed && result.todo) { + this.write(chalk.cyan('T')); + } else if (result.skipped) { + this.write(chalk.yellow('*')); + } else { + this.write(chalk.bold(chalk.red('F'))); + } + this.currentLineChars += 1; + } displayFullResult(report, verbose) { const result = report.data; - const name = `${chalk.grey( - result.runDuration.toLocaleString('en-US') + 'ms', - )} ${chalk.white('#' + report.testNo)} ${result.name} ${chalk.grey(report.launcherDescription)}` + const name = `${chalk.grey(result.runDuration.toLocaleString('en-US') + 'ms')} ${chalk.white( + '#' + report.testNo + )} ${result.name} ${chalk.grey(report.launcherDescription)}`; if (result.passed && !result.todo) { - this.write(`\t✅ ${chalk.green('Passed')}: ${name}\n`); - } else if (!result.passed && result.todo) { - this.write(chalk.cyan(`\t🛠️ TODO: ${name}\n`)); - } else if (result.skipped) { - this.write(chalk.yellow(`\t⚠️ Skipped: ${name}\n`)); - } else { - this.write(chalk.red(`\t💥 Failed: ${name}\n`)); - this.write( - `\t\topen test locally: ${this.serverConfig.url}?testId=${result.testId}\n`, - ); + this.write(`\t✅ ${chalk.green('Passed')}: ${name}\n`); + } else if (!result.passed && result.todo) { + this.write(chalk.cyan(`\t🛠️ TODO: ${name}\n`)); + } else if (result.skipped) { + this.write(chalk.yellow(`\t⚠️ Skipped: ${name}\n`)); + } else { + this.write(chalk.red(`\t💥 Failed: ${name}\n`)); + this.write(`\t\topen test locally: ${this.serverConfig.url}?testId=${result.testId}\n`); // TODO - print individual failures in verbose mode - } + } } - summarizeResults() { + summarizeResults() { const lines = [ 'Result', '=========', @@ -298,7 +306,7 @@ export default class CustomDotReporter { chalk.green('# pass ' + this.pass), chalk.yellow('# skip ' + this.skip), chalk.cyan('# todo ' + this.todo), - chalk.red('# fail ' + this.fail) + chalk.red('# fail ' + this.fail), ]; if (this.pass + this.skipped + this.todo === this.total) { @@ -308,23 +316,22 @@ export default class CustomDotReporter { this.write('\n\n\t'); this.write(lines.join('\n\t')); this.write('\n\n'); - } - + } // special reporting functionality // =============================== /** - * Periodically checks for hung tests and reports them - */ - ensureTimeoutCheck() { - if (this._timeoutId) { - return; - } - this._timeoutId = setTimeout(() => { - this.shouldPrintHungTests = true; - }, DEFAULT_TEST_TIMEOUT / 3); - } + * Periodically checks for hung tests and reports them + */ + ensureTimeoutCheck() { + if (this._timeoutId) { + return; + } + this._timeoutId = setTimeout(() => { + this.shouldPrintHungTests = true; + }, DEFAULT_TEST_TIMEOUT / 3); + } reportHungTests() { let hasRunningTests = false; @@ -338,19 +345,19 @@ export default class CustomDotReporter { this.write( chalk.grey( `\n\n⚠️ ${chalk.yellow('Pending:')} ${chalk.white(report.name)} has been running for ${chalk.yellow( - duration.toLocaleString('en-US') + 'ms', - )}, this is likely a bug.\n`, - ), + duration.toLocaleString('en-US') + 'ms' + )}, this is likely a bug.\n` + ) ); } }); }); - this._timeoutId = null; - if (hasRunningTests) { - this.ensureTimeoutCheck(); - } - } + this._timeoutId = null; + if (hasRunningTests) { + this.ensureTimeoutCheck(); + } + } /** * Same as `reportHungTests` but is for use to report everything @@ -374,47 +381,53 @@ export default class CustomDotReporter { const duration = this.now() - report._testStarted; - this.write(chalk.yellow(`\t⛔️ Stuck (${chalk.red( - duration.toLocaleString('en-US') + ' ms', - )}): (${report.data.testId}) ${chalk.white(report.name)} ${chalk.grey(report.launcherDescription)}\n`)); + this.write( + chalk.yellow( + `\t⛔️ Stuck (${chalk.red(duration.toLocaleString('en-US') + ' ms')}): (${ + report.data.testId + }) ${chalk.white(report.name)} ${chalk.grey(report.launcherDescription)}\n` + ) + ); }); }); - } - - reportSlowTests() { - const results = this.results; - let totalDuration = 0; - let testsToPrint = SLOW_TEST_COUNT; - results.sort((a, b) => { - return a.runDuration > b.runDuration ? -1 : 1; - }); - - this.write( - `\n\n\t${chalk.yellow( - `${results.length < SLOW_TEST_COUNT ? results.length : SLOW_TEST_COUNT} Longest Running Tests`, - )}\n${HEADER_STR}\n`, - ); - for (let i = 0; i < results.length; i++) { - const { name, runDuration } = results[i].data; - - if (i < testsToPrint) { - // this test is a known offender - if (runDuration > DEFAULT_TIMEOUT + TIMEOUT_BUFFER) { - this.write(`\n\t${i + 1}.\t[S] ${chalk.yellow(runDuration.toLocaleString('en-US') + 'ms')}\t${name}`); - testsToPrint++; - } else { - this.write(`\n\t${i + 1}.\t${chalk.yellow(runDuration.toLocaleString('en-US') + 'ms')}\t${name}`); - } - } - totalDuration += runDuration; - } - this.write( - chalk.yellow(`\n\n\tAvg Duration of all ${results.length} tests: ${Math.round(totalDuration / results.length)}ms\n\n`), - ); - } - - reportFailedTests() { - this.failedTests.forEach((failure) => { + } + + reportSlowTests() { + const results = this.results; + let totalDuration = 0; + let testsToPrint = SLOW_TEST_COUNT; + results.sort((a, b) => { + return a.runDuration > b.runDuration ? -1 : 1; + }); + + this.write( + `\n\n\t${chalk.yellow( + `${results.length < SLOW_TEST_COUNT ? results.length : SLOW_TEST_COUNT} Longest Running Tests` + )}\n${HEADER_STR}\n` + ); + for (let i = 0; i < results.length; i++) { + const { name, runDuration } = results[i].data; + + if (i < testsToPrint) { + // this test is a known offender + if (runDuration > DEFAULT_TIMEOUT + TIMEOUT_BUFFER) { + this.write(`\n\t${i + 1}.\t[S] ${chalk.yellow(runDuration.toLocaleString('en-US') + 'ms')}\t${name}`); + testsToPrint++; + } else { + this.write(`\n\t${i + 1}.\t${chalk.yellow(runDuration.toLocaleString('en-US') + 'ms')}\t${name}`); + } + } + totalDuration += runDuration; + } + this.write( + chalk.yellow( + `\n\n\tAvg Duration of all ${results.length} tests: ${Math.round(totalDuration / results.length)}ms\n\n` + ) + ); + } + + reportFailedTests() { + this.failedTests.forEach((failure) => { const result = failure.data; this.write(chalk.red(`\n\t💥 Failed: ${result.runDuration.toLocaleString('en-US')}ms ${result.name}\n`)); @@ -422,7 +435,9 @@ export default class CustomDotReporter { this.write(`\t\t${diagnostic.passed ? chalk.green('✅ Pass') : chalk.red('💥 Fail')} ${diagnostic.message}\n`); if (!diagnostic.passed && 'expected' in diagnostic && 'actual' in diagnostic) { - this.write(`\n\t\texpected: ${printValue(diagnostic.expected, 3)}\n\t\tactual: ${printValue(diagnostic.actual, 3)}\n`); + this.write( + `\n\t\texpected: ${printValue(diagnostic.expected, 3)}\n\t\tactual: ${printValue(diagnostic.actual, 3)}\n` + ); } if (!diagnostic.passed && diagnostic.stack) { @@ -439,7 +454,10 @@ export default class CustomDotReporter { this.globalFailures.forEach((failure) => { const result = failure.error; - const label = result.name && result.message ? `[${result.name}] ${result.message}` : result.name || result.message || 'Unknown Error'; + const label = + result.name && result.message + ? `[${result.name}] ${result.message}` + : result.name || result.message || 'Unknown Error'; this.write(chalk.red(`\n\t💥 Failed: ${label}\n`)); if (result.stack) { @@ -452,51 +470,48 @@ export default class CustomDotReporter { updateFailedTestCache() { const failedTestIds = [...this.failedTestIds.entries()]; - const allFailuresAccounted = this.globalFailures.length === 0; - const cacheFile = failedTestsFile; + const allFailuresAccounted = this.globalFailures.length === 0; + const cacheFile = failedTestsFile; - if (allFailuresAccounted) { - if (failedTestIds.length) { - fs.writeFileSync(cacheFile, failedTestIds.join(','), { encoding: 'utf-8' }); + if (allFailuresAccounted) { + if (failedTestIds.length) { + fs.writeFileSync(cacheFile, failedTestIds.join(','), { encoding: 'utf-8' }); this.write( - chalk.yellow( - `\n\nSaved ${chalk.white(failedTestIds.length)} Failed Tests for Retry with IDS ${chalk.white( - failedTestIds.join(','), - )} in ${chalk.grey(cacheFile)}`, - ), - ); - - this.write( - `\n\nTo run failed tests locally, ${chalk.cyan('visit')} ${chalk.white( - `${this.serverConfig.url}?${failedTestIds.map((id) => `testId=${id}`).join('&')}`, - )}`, - ); - } else { - remove(cacheFile); - } - } else { - if (failedTestIds.length) { - this.write( - `\n\nTo run failed tests locally, ${chalk.cyan('visit')} ${chalk.white( - `${this.serverConfig.url}?${failedTestIds.map((id) => `testId=${id}`).join('&')}`, - )}`, - ); - } - this.write( - chalk.red(`\n\n⚠️ Unable to save failed tests for retry, not all failures had test IDs, cleaning up`), - ); - remove(cacheFile); - } - } -} + chalk.yellow( + `\n\nSaved ${chalk.white(failedTestIds.length)} Failed Tests for Retry with IDS ${chalk.white( + failedTestIds.join(',') + )} in ${chalk.grey(cacheFile)}` + ) + ); + this.write( + `\n\nTo run failed tests locally, ${chalk.cyan('visit')} ${chalk.white( + `${this.serverConfig.url}?${failedTestIds.map((id) => `testId=${id}`).join('&')}` + )}` + ); + } else { + remove(cacheFile); + } + } else { + if (failedTestIds.length) { + this.write( + `\n\nTo run failed tests locally, ${chalk.cyan('visit')} ${chalk.white( + `${this.serverConfig.url}?${failedTestIds.map((id) => `testId=${id}`).join('&')}` + )}` + ); + } + this.write(chalk.red(`\n\n⚠️ Unable to save failed tests for retry, not all failures had test IDs, cleaning up`)); + remove(cacheFile); + } + } +} // Instead of completely removing, we replace the contents with an empty string so that CI will still cache it. // While this shouldn't ever really be necessary it's a bit more correct to make sure that the log gets cleared // in the cache as well. function remove(filePath) { - fs.writeFileSync(filePath, '', { encoding: 'utf-8' }); + fs.writeFileSync(filePath, '', { encoding: 'utf-8' }); } function printValue(value, tabs = 0) { diff --git a/packages/diagnostic/server/utils/const.js b/packages/diagnostic/server/utils/const.js index 260e946588d..591dafed205 100644 --- a/packages/diagnostic/server/utils/const.js +++ b/packages/diagnostic/server/utils/const.js @@ -3,8 +3,4 @@ export const DEFAULT_HOST = 'localhost'; export const DEFAULT_PROTOCOL = 'http'; export const MAX_PORT_TRIES = 100; -export const INDEX_PATHS = [ - '', - '/', - 'index.html', -]; +export const INDEX_PATHS = ['', '/', 'index.html']; diff --git a/packages/diagnostic/server/utils/get-flags.js b/packages/diagnostic/server/utils/get-flags.js new file mode 100644 index 00000000000..ef94550a966 --- /dev/null +++ b/packages/diagnostic/server/utils/get-flags.js @@ -0,0 +1,63 @@ +export function getFlags() { + const raw = process.argv.slice(2); + for (let i = 0; i < raw.length; i++) { + const rawArg = raw[i]; + if (rawArg.startsWith('--')) { + continue; + } else if (rawArg.startsWith('-')) { + const args = rawArg.slice(1); + if (args.length > 1) { + for (let j = 0; j < args.length; j++) { + raw.push(`-${args[j]}`); + } + } + } + } + const flags = new Set(raw); + const filtered = {}; + + // global flags + const debug = flags.has('--debug') || flags.has('-d'); + const serve = flags.has('--serve') || flags.has('-s'); + const noLaunch = flags.has('--no-launch') || flags.has('-n'); + const filter = flags.has('--filter') || flags.has('-f'); + const retry = flags.has('--retry') || flags.has('-r'); + const headless = flags.has('--headless') || flags.has('-h'); + const useExisting = flags.has('--use-existing') || flags.has('-e'); + + if (filter) { + filtered['filter'] = true; + } + if (debug) { + filtered['debug'] = true; + } + if (serve) { + filtered['serve'] = true; + } + if (noLaunch) { + filtered['noLaunch'] = true; + } + if (retry) { + filtered['retry'] = true; + } + if (headless) { + filtered['headless'] = true; + } + if (useExisting) { + filtered['useExisting'] = true; + } + + return { + parsed: { + debug, + serve, + noLaunch, + filter, + retry, + headless, + useExisting, + }, + filtered, + flags, + }; +} diff --git a/packages/diagnostic/server/utils/platform.js b/packages/diagnostic/server/utils/platform.js index cb731f0abee..8380edf1306 100644 --- a/packages/diagnostic/server/utils/platform.js +++ b/packages/diagnostic/server/utils/platform.js @@ -12,7 +12,7 @@ export function isWin(platform) { } return currentPlatform; -}; +} export function isMac(platform) { if (platform) { @@ -22,7 +22,6 @@ export function isMac(platform) { return /^darwin/.test(os.platform()); } - export function isLinux(platform) { if (platform) { return /^linux/.test(platform); diff --git a/packages/diagnostic/server/utils/port.js b/packages/diagnostic/server/utils/port.js index b820e039764..a5630dd0aef 100644 --- a/packages/diagnostic/server/utils/port.js +++ b/packages/diagnostic/server/utils/port.js @@ -1,5 +1,5 @@ -import { debug } from './debug.js'; import { DEFAULT_PORT, MAX_PORT_TRIES } from './const.js'; +import { debug } from './debug.js'; async function discoverPort(defaultPort, checkPort) { debug(`Discovering available port starting from default port of ${defaultPort}`); diff --git a/packages/diagnostic/src/-types.ts b/packages/diagnostic/src/-types.ts index 5404884eedb..95c15e211b9 100644 --- a/packages/diagnostic/src/-types.ts +++ b/packages/diagnostic/src/-types.ts @@ -1,10 +1,9 @@ -import { SuiteReport } from "./-types/report"; - +import { SuiteReport } from './-types/report'; export type CompatTestReport = { id: number; name: string; - items: { passed: boolean; message: string; }[]; + items: { passed: boolean; message: string }[]; failed: number; passed: number; total: number; @@ -12,7 +11,7 @@ export type CompatTestReport = { skipped: boolean; todo: boolean; testId: string; -} +}; export interface Emitter { emit(name: 'suite-start', data: SuiteReport): void; @@ -25,7 +24,7 @@ export type ParamConfig = { id: string; label: string; value: boolean; -} +}; export type GlobalHooksStorage = { onSuiteStart: GlobalCallback[]; @@ -34,10 +33,20 @@ export type GlobalHooksStorage = { afterModule: GlobalCallback[]; beforeEach: HooksCallback[]; afterEach: HooksCallback[]; -} +}; -export type GlobalConfig = { - params: { [key in 'concurrency' | 'tryCatch' | 'instrument' | 'hideReport' | 'memory' | 'groupLogs' | 'debug' | 'container']: ParamConfig }; +export type GlobalConfig = { + params: { + [key in + | 'concurrency' + | 'tryCatch' + | 'instrument' + | 'hideReport' + | 'memory' + | 'groupLogs' + | 'debug' + | 'container']: ParamConfig; + }; _current: SuiteReport | null; useTestem: boolean; useDiagnostic: boolean; @@ -49,7 +58,7 @@ export type GlobalConfig = { modules: number; skipped: number; todo: number; - } + }; }; export interface Diagnostic { @@ -70,7 +79,6 @@ export interface Diagnostic { verifySteps(steps: string[], message?: string): void; } - export interface TestContext {} export type GlobalCallback = () => void | Promise; @@ -87,7 +95,7 @@ export interface GlobalHooks extends Hooks { } export type HooksCallback = (this: TC, assert: Diagnostic) => void | Promise; -export type ModuleCallback = ((hooks: Hooks) => void | Promise) | (() => void | Promise); +export type ModuleCallback = ((hooks: Hooks) => void) | (() => void); export type TestCallback = (this: TC, assert: Diagnostic) => void | Promise; export interface TestInfo { @@ -113,7 +121,7 @@ export interface ModuleInfo { afterEach: HooksCallback[]; beforeModule: GlobalCallback[]; afterModule: GlobalCallback[]; - }, + }; tests: OrderedMap>; modules: OrderedMap>; } diff --git a/packages/diagnostic/src/-types/report.ts b/packages/diagnostic/src/-types/report.ts index aa015c3bb7d..46e8a79f509 100644 --- a/packages/diagnostic/src/-types/report.ts +++ b/packages/diagnostic/src/-types/report.ts @@ -26,7 +26,7 @@ export interface TestReport { diagnostics: DiagnosticReport[]; passed: boolean; failed: boolean; - } + }; module: ModuleReport; } export interface ModuleReport { diff --git a/packages/diagnostic/src/-utils.ts b/packages/diagnostic/src/-utils.ts index e76e7949351..21610605c68 100644 --- a/packages/diagnostic/src/-utils.ts +++ b/packages/diagnostic/src/-utils.ts @@ -1,5 +1,5 @@ /* global window, globalThis, global, self */ -import { HooksCallback,TestContext, ModuleInfo, GlobalHooksStorage } from "./-types"; +import { GlobalHooksStorage, HooksCallback, ModuleInfo, TestContext } from './-types'; export function assert(message: string, test: unknown): asserts test { if (!test) { @@ -7,14 +7,27 @@ export function assert(message: string, test: unknown): asserts test { } } -export function getGlobal(): Window { - // @ts-expect-error global is node only - const g = typeof globalThis !== 'undefined' ? globalThis : (typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : null); +export function getGlobal(): typeof globalThis { + // prettier-ignore + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const g: typeof globalThis | null = + typeof globalThis !== 'undefined' ? globalThis + : typeof window !== 'undefined' ? window + // @ts-expect-error global is node only + : typeof global !== 'undefined' ? global + : typeof self !== 'undefined' ? self + : null; + assert(`Expected to find a global object`, g !== null); - return g as unknown as Window; + return g as unknown as typeof globalThis; } -export function getChain(globalHooks: GlobalHooksStorage, module: ModuleInfo, parents: ModuleInfo[] | null, prop: 'beforeEach' | 'afterEach'): HooksCallback[] { +export function getChain( + globalHooks: GlobalHooksStorage, + module: ModuleInfo, + parents: ModuleInfo[] | null, + prop: 'beforeEach' | 'afterEach' +): HooksCallback[] { const chain: HooksCallback[] = []; if (globalHooks[prop].length) { @@ -39,11 +52,11 @@ export function getChain(globalHooks: GlobalHooksStorage return chain; } -export function generateHash (str: string) { +export function generateHash(str: string) { let hash = 0; for (let i = 0; i < str.length; i++) { - hash = ((hash << 5) - hash) + str.charCodeAt(i); + hash = (hash << 5) - hash + str.charCodeAt(i); hash |= 0; } diff --git a/packages/diagnostic/src/ember.ts b/packages/diagnostic/src/ember.ts index 1975addee42..b3befd04044 100644 --- a/packages/diagnostic/src/ember.ts +++ b/packages/diagnostic/src/ember.ts @@ -1,19 +1,23 @@ import { getTestMetadata, setupContext, SetupContextOptions, teardownContext, TestContext } from '@ember/test-helpers'; + import AbstractTestLoader from 'ember-cli-test-loader/test-support/index'; import type { Hooks } from './-types'; - import { setupGlobalHooks } from './internals/config'; // fix bug with embroider/webpack/auto-import and test-loader +// prettier-ignore // @ts-expect-error -const CLITestLoader: typeof AbstractTestLoader = AbstractTestLoader.default ? AbstractTestLoader.default : AbstractTestLoader; +const CLITestLoader: typeof AbstractTestLoader = AbstractTestLoader.default + // @ts-expect-error + ? AbstractTestLoader.default as typeof AbstractTestLoader + : AbstractTestLoader; export function setupTest(hooks: Hooks, opts?: SetupContextOptions) { const options = { waitForSettled: false, ...opts }; hooks.beforeEach(async function () { - let testMetadata = getTestMetadata(this); + const testMetadata = getTestMetadata(this); testMetadata.framework = 'qunit'; await setupContext(this, options); @@ -47,7 +51,7 @@ function loadTests() { export function configure() { setupGlobalHooks((hooks) => { hooks.onSuiteFinish(() => { - let length = moduleLoadFailures.length; + const length = moduleLoadFailures.length; try { if (length === 0) { diff --git a/packages/diagnostic/src/emitters/diagnostic.ts b/packages/diagnostic/src/emitters/diagnostic.ts index 57decc35623..66fc4330b2a 100644 --- a/packages/diagnostic/src/emitters/diagnostic.ts +++ b/packages/diagnostic/src/emitters/diagnostic.ts @@ -1,11 +1,11 @@ -import { CompatTestReport, Emitter } from "../-types"; -import { SuiteReport } from "../-types/report"; -import { assert } from "../-utils"; +import { CompatTestReport, Emitter } from '../-types'; +import { SuiteReport } from '../-types/report'; +import { assert } from '../-utils'; type EmitEvent = { name: 'suite-start' | 'suite-finish' | 'test-start' | 'test-finish'; - data: SuiteReport | CompatTestReport -} + data: SuiteReport | CompatTestReport; +}; class DiagnosticEmitter implements Emitter { socket: WebSocket; @@ -30,7 +30,9 @@ class DiagnosticEmitter implements Emitter { this.buffer = []; if (!browserId || !windowId) { - console.warn(`[Diagnostic] Expected to find a browserId and windowId in the url. Likely this page was not served by the diagnostic server. Remote reporting will not be available.`); + console.warn( + `[Diagnostic] Expected to find a browserId and windowId in the url. Likely this page was not served by the diagnostic server. Remote reporting will not be available.` + ); this.socket = null as unknown as WebSocket; return; } @@ -50,7 +52,9 @@ class DiagnosticEmitter implements Emitter { socket.onclose = (event) => { this.connected = false; if (event.wasClean) { - console.log(`[Diagnostic] Remote Reporter Connection closed cleanly, code=${event.code} reason=${event.reason}`); + console.log( + `[Diagnostic] Remote Reporter Connection closed cleanly, code=${event.code} reason=${event.reason}` + ); } else { console.error(`[Diagnostic] Remote Reporter Connection Died`, event); } @@ -60,8 +64,8 @@ class DiagnosticEmitter implements Emitter { console.error(e); throw new Error(`[Diagnostic] Remote Reporter Connection Failed`); }; - socket.onmessage = (message) => { - const msg = JSON.parse(message.data); + socket.onmessage = (message: MessageEvent) => { + const msg = JSON.parse(message.data) as { name: 'close' }; if (msg.name === 'close') { window.close(); } else { @@ -89,7 +93,10 @@ class DiagnosticEmitter implements Emitter { return; } - assert(`Expected event.name to be one of 'suite-start', 'suite-finish', 'test-start' or 'test-finish'`, (['suite-start', 'suite-finish', 'test-start', 'test-finish']).includes(name)); + assert( + `Expected event.name to be one of 'suite-start', 'suite-finish', 'test-start' or 'test-finish'`, + ['suite-start', 'suite-finish', 'test-start', 'test-finish'].includes(name) + ); assert(`Expected event.data to be defined`, typeof data !== 'undefined'); const event = { browserId: this.browserId, windowId: this.windowId, name, data, timestamp: Date.now() }; diff --git a/packages/diagnostic/src/emitters/testem.ts b/packages/diagnostic/src/emitters/testem.ts index caf4bf67f32..e6dc4b228af 100644 --- a/packages/diagnostic/src/emitters/testem.ts +++ b/packages/diagnostic/src/emitters/testem.ts @@ -1,14 +1,16 @@ -/* global Testem */ - -import { Emitter, CompatTestReport } from "../-types"; -import { SuiteReport } from "../-types/report"; -import { assert } from "../-utils"; +import { CompatTestReport, Emitter } from '../-types'; +import { SuiteReport } from '../-types/report'; +import { assert } from '../-utils'; type TestemSocket = { emit(name: 'tests-start'): void; // suite-start emit(name: 'all-test-results'): void; // suite-finish emit(name: 'tests-start', data: CompatTestReport): void; // test-start emit(name: 'test-result', data: CompatTestReport): void; // test-finish +}; + +interface TestemGlobal { + useCustomAdapter(callback: (socket: TestemSocket) => void): void; } class TestemEmitter implements Emitter { @@ -23,7 +25,10 @@ class TestemEmitter implements Emitter { emit(name: 'test-start', data: CompatTestReport): void; emit(name: 'test-finish', data: CompatTestReport): void; emit(name: 'suite-start' | 'suite-finish' | 'test-start' | 'test-finish', data: SuiteReport | CompatTestReport) { - assert(`Expected event.name to be one of 'suite-start', 'suite-finish', 'test-start' or 'test-finish'`, (['suite-start', 'suite-finish', 'test-start', 'test-finish']).includes(name)); + assert( + `Expected event.name to be one of 'suite-start', 'suite-finish', 'test-start' or 'test-finish'`, + ['suite-start', 'suite-finish', 'test-start', 'test-finish'].includes(name) + ); assert(`Expected event.data to be defined`, typeof data !== 'undefined'); if (name === 'suite-start') { @@ -41,7 +46,7 @@ class TestemEmitter implements Emitter { export function createTestemEmitter(): Promise { return new Promise((resolve, reject) => { // @ts-expect-error - const _Testem = window.Testem; + const _Testem: TestemGlobal = window.Testem as TestemGlobal; const hasTestem = typeof _Testem !== 'undefined'; if (!hasTestem) { diff --git a/packages/diagnostic/src/index.ts b/packages/diagnostic/src/index.ts index f27022f2d58..ad40e6025d9 100644 --- a/packages/diagnostic/src/index.ts +++ b/packages/diagnostic/src/index.ts @@ -1,18 +1,17 @@ -import { assert, generateHash } from "./-utils"; -import { ModuleInfo, TestInfo, ModuleCallback, TestCallback, OrderedMap, TestContext } from "./-types"; -import { SuiteReport } from "./-types/report"; +import { ModuleCallback, ModuleInfo, OrderedMap, TestCallback, TestContext, TestInfo } from './-types'; +import { SuiteReport } from './-types/report'; +import { assert, generateHash } from './-utils'; +import { Config, getCurrentModule, HooksDelegate, instrument, setCurrentModule } from './internals/config'; +import { DelegatingReporter } from './internals/delegating-reporter'; +import { runModule } from './internals/run'; -import { Config, HooksDelegate, getCurrentModule, instrument, setCurrentModule } from "./internals/config"; -import { DelegatingReporter } from "./internals/delegating-reporter"; -import { runModule } from "./internals/run"; - -export { registerReporter } from "./internals/delegating-reporter"; -export { setupGlobalHooks, configure } from "./internals/config"; +export { registerReporter } from './internals/delegating-reporter'; +export { setupGlobalHooks, configure } from './internals/config'; const Modules: OrderedMap> = { byName: new Map(), - byOrder: [] -} + byOrder: [], +}; export type { Diagnostic, Hooks as NestedHooks, GlobalHooks, TestContext } from './-types'; @@ -31,7 +30,7 @@ export function module(name: string, cb: M beforeEach: [], afterEach: [], beforeModule: [], - afterModule: [] + afterModule: [], }; const tests: OrderedMap> = { byName: new Map(), byOrder: [] }; const modules: OrderedMap> = { byName: new Map(), byOrder: [] }; @@ -138,8 +137,8 @@ export async function start() { } const promises: Promise[] = []; - for (const module of Modules.byOrder) { - await runModule(module, null, promises); + for (const _module of Modules.byOrder) { + await runModule(_module, null, promises); } if (promises.length) { await Promise.all(promises); @@ -149,6 +148,7 @@ export async function start() { await hook(); } report.end = instrument() && performance.mark('@warp-drive/diagnostic:end'); - report.measure = instrument() && performance.measure('@warp-drive/diagnostic:run', report.start.name, report.end.name); + report.measure = + instrument() && performance.measure('@warp-drive/diagnostic:run', report.start.name, report.end.name); DelegatingReporter.onSuiteFinish(report); } diff --git a/packages/diagnostic/src/internals/config.ts b/packages/diagnostic/src/internals/config.ts index 1465edfd852..01ecb0b166a 100644 --- a/packages/diagnostic/src/internals/config.ts +++ b/packages/diagnostic/src/internals/config.ts @@ -1,6 +1,14 @@ -/* global emit, Testem */ -import { assert } from "../-utils"; -import { GlobalHooks, GlobalCallback, TestContext, HooksCallback, GlobalConfig, ModuleInfo, ParamConfig } from "../-types"; +/* global Testem */ +import { + GlobalCallback, + GlobalConfig, + GlobalHooks, + HooksCallback, + ModuleInfo, + ParamConfig, + TestContext, +} from '../-types'; +import { assert } from '../-utils'; export const Config: GlobalConfig = { globalHooks: { @@ -9,7 +17,7 @@ export const Config: GlobalConfig = { beforeModule: [], afterModule: [], onSuiteStart: [], - onSuiteFinish: [] + onSuiteFinish: [], }, // @ts-expect-error useTestem: typeof Testem !== 'undefined', @@ -20,42 +28,42 @@ export const Config: GlobalConfig = { hideReport: { id: 'hideReport', label: 'Hide Report', - value: true + value: true, }, concurrency: { id: 'concurrency', label: 'Enable Concurrency', - value: false + value: false, }, memory: { id: 'memory', label: 'Instrument Memory', - value: false + value: false, }, instrument: { id: 'performance', label: 'Instrument Performance', - value: true + value: true, }, groupLogs: { id: 'groupLogs', label: 'Group Logs', - value: true + value: true, }, debug: { id: 'debug', label: 'Debug Mode', - value: false + value: false, }, container: { id: 'container', label: 'Hide Container', - value: true + value: true, }, tryCatch: { id: 'tryCatch', label: 'No Try/Catch', - value: true + value: true, }, }, totals: { @@ -66,7 +74,7 @@ export const Config: GlobalConfig = { todo: 0, }, _current: null, -} +}; let currentModule: ModuleInfo; let isResolvingGlobalHooks = false; @@ -111,7 +119,7 @@ export const HooksDelegate = { assert(`Cannot add a global onSuiteFinish hook inside of a module`, isResolvingGlobalHooks); Config.globalHooks.onSuiteFinish.push(cb); }, -} +}; export function getCurrentModule(): ModuleInfo { return currentModule; @@ -141,10 +149,21 @@ export type ConfigOptions = { useTestem: boolean; useDiagnostic: boolean; }; -const configOptions = ['concurrency', 'tryCatch', 'instrument', 'hideReport', 'memory', 'groupLogs', 'debug', 'container'] as const; +const configOptions = [ + 'concurrency', + 'tryCatch', + 'instrument', + 'hideReport', + 'memory', + 'groupLogs', + 'debug', + 'container', +] as const; export function configure(options: ConfigOptions): void { if (options.useTestem && options.useDiagnostic) { - throw new Error(`Cannot use both Testem and Diagnostic at the same time. Please remove one of these options or set it to false.`); + throw new Error( + `Cannot use both Testem and Diagnostic at the same time. Please remove one of these options or set it to false.` + ); } if ('useTestem' in options && typeof options.useTestem === 'boolean') { Config.useTestem = options.useTestem; @@ -160,7 +179,7 @@ export function configure(options: ConfigOptions): void { // @ts-expect-error options.concurrency = options.concurrency > 1; } - configOptions.forEach(key => { + configOptions.forEach((key) => { if (key in options && typeof options[key] === 'boolean') { Config.params[key].value = options[key] as boolean; } @@ -180,7 +199,7 @@ export function getSettings() { useDiagnostic: Config.useDiagnostic, concurrency: Config.concurrency, params: Config.params, - } + }; } export function instrument() { diff --git a/packages/diagnostic/src/internals/delegating-reporter.ts b/packages/diagnostic/src/internals/delegating-reporter.ts index 84921c6fec2..5dd1e24d87c 100644 --- a/packages/diagnostic/src/internals/delegating-reporter.ts +++ b/packages/diagnostic/src/internals/delegating-reporter.ts @@ -1,4 +1,4 @@ -import { Reporter, SuiteReport } from "../-types/report"; +import { Reporter, SuiteReport } from '../-types/report'; const Reporters = new Set(); export function registerReporter(reporter: Reporter) { @@ -42,7 +42,7 @@ export const DelegatingReporter: Reporter = { } }, onModuleStart(report) { - for (const reporter of Reporters) { + for (const reporter of Reporters) { reporter.onModuleStart(report); } }, @@ -56,4 +56,4 @@ export const DelegatingReporter: Reporter = { reporter.onDiagnostic(report); } }, -} +}; diff --git a/packages/diagnostic/src/internals/diagnostic.ts b/packages/diagnostic/src/internals/diagnostic.ts index eb83a37fca1..857a97f0096 100644 --- a/packages/diagnostic/src/internals/diagnostic.ts +++ b/packages/diagnostic/src/internals/diagnostic.ts @@ -1,6 +1,6 @@ -import { GlobalConfig, TestContext, TestInfo } from "../-types"; -import { DiagnosticReport, Reporter, TestReport } from "../-types/report"; -import equiv from "../legacy/equiv"; +import { GlobalConfig, TestContext, TestInfo } from '../-types'; +import { DiagnosticReport, Reporter, TestReport } from '../-types/report'; +import equiv from '../legacy/equiv'; class InternalCompat { declare _diagnostic: Diagnostic; @@ -19,7 +19,6 @@ class InternalCompat { set expected(value) { this._diagnostic.expected = value; } - } export class Diagnostic { @@ -43,8 +42,12 @@ export class Diagnostic { this.test = new InternalCompat(this); } - pushResult(result: Pick & { result?: boolean }): void { - const diagnostic = Object.assign({ passed: result.passed ?? result.result }, result, { testId: this.__currentTest.id }); + pushResult( + result: Pick & { result?: boolean } + ): void { + const diagnostic = Object.assign({ passed: result.passed ?? result.result }, result, { + testId: this.__currentTest.id, + }); this.__report.result.diagnostics.push(diagnostic); if (!diagnostic.passed) { @@ -59,14 +62,14 @@ export class Diagnostic { if (actual !== expected) { if (this.__config.params.tryCatch.value) { try { - throw new Error(message || `Expected ${actual} to equal ${expected}`); + throw new Error(message || `Expected ${String(actual)} to equal ${String(expected)}`); } catch (err) { this.pushResult({ message: message || 'equal', stack: (err as Error).stack!, passed: false, actual, - expected + expected, }); } } else { @@ -75,7 +78,7 @@ export class Diagnostic { stack: '', passed: false, actual, - expected + expected, }); } } else { @@ -84,14 +87,14 @@ export class Diagnostic { stack: '', passed: true, actual: true, - expected: true + expected: true, }); } } notEqual(actual: T, expected: T, message?: string): void { if (actual === expected) { - throw new Error(message || `Expected ${actual} to not equal ${expected}`); + throw new Error(message || `Expected ${String(actual)} to not equal ${String(expected)}`); } } @@ -107,7 +110,7 @@ export class Diagnostic { stack: (err as Error).stack!, passed: false, actual, - expected + expected, }); } } else { @@ -116,7 +119,7 @@ export class Diagnostic { stack: '', passed: false, actual, - expected + expected, }); } } else { @@ -125,7 +128,7 @@ export class Diagnostic { stack: '', passed: true, actual: true, - expected: true + expected: true, }); } } @@ -142,7 +145,7 @@ export class Diagnostic { stack: (err as Error).stack!, passed: false, actual, - expected + expected, }); } } else { @@ -151,7 +154,7 @@ export class Diagnostic { stack: '', passed: false, actual, - expected + expected, }); } } else { @@ -160,7 +163,7 @@ export class Diagnostic { stack: '', passed: true, actual: true, - expected: true + expected: true, }); } } @@ -201,7 +204,7 @@ export class Diagnostic { stack: '', passed: false, actual: false, - expected: true + expected: true, }); } if (this.__report.result.diagnostics.length === 0) { @@ -210,7 +213,7 @@ export class Diagnostic { stack: '', passed: false, actual: false, - expected: true + expected: true, }); } if (this._steps.length) { @@ -219,7 +222,7 @@ export class Diagnostic { stack: '', passed: false, actual: false, - expected: true + expected: true, }); } } @@ -236,23 +239,26 @@ export class Diagnostic { throw new Error(`Expected function to throw ${expected}`); } - return resolved.then(() => { - throw new Error(`Expected function to throw ${expected}`); - }, (err) => { - if (expected) { - if (typeof expected === 'string') { - this.equal(err.message, expected, message); - } else { - this.equal(expected.test(err.message), true, message); + return resolved.then( + () => { + throw new Error(`Expected function to throw ${expected}`); + }, + (err: Error | string) => { + if (expected) { + if (typeof expected === 'string') { + this.equal(typeof err === 'string' ? err : err.message, expected, message); + } else { + this.equal(typeof err === 'string' ? err : expected.test(err.message), true, message); + } } } - }); + ); } catch (err) { if (expected) { if (typeof expected === 'string') { this.equal(err instanceof Error ? err.message : err, expected, message); } else { - this.equal(expected.test(err instanceof Error ? err.message : err as string), true, message); + this.equal(expected.test(err instanceof Error ? err.message : (err as string)), true, message); } } } @@ -270,23 +276,26 @@ export class Diagnostic { return; } - return resolved.then(() => { - return; - }, (err) => { - if (expected) { - if (typeof expected === 'string') { - this.equal(err.message, expected, message); - } else { - this.equal(expected.test(err.message), true, message); + return resolved.then( + () => { + return; + }, + (err: Error | string) => { + if (expected) { + if (typeof expected === 'string') { + this.equal(typeof err === 'string' ? err : err.message, expected, message); + } else { + this.equal(expected.test(typeof err === 'string' ? err : err.message), true, message); + } } } - }); + ); } catch (err) { if (expected) { if (typeof expected === 'string') { this.equal(err instanceof Error ? err.message : err, expected, message); } else { - this.equal(expected.test(err instanceof Error ? err.message : err as string), true, message); + this.equal(expected.test(err instanceof Error ? err.message : (err as string)), true, message); } } } diff --git a/packages/diagnostic/src/internals/run.ts b/packages/diagnostic/src/internals/run.ts index 438dfbe20cf..4745409ffda 100644 --- a/packages/diagnostic/src/internals/run.ts +++ b/packages/diagnostic/src/internals/run.ts @@ -1,11 +1,16 @@ -import { getChain } from "../-utils"; -import { ModuleInfo, HooksCallback, TestInfo, TestContext, } from "../-types"; -import { TestReport, ModuleReport } from "../-types/report"; -import { Diagnostic } from "./diagnostic"; -import { Config, groupLogs, instrument } from "./config"; -import { DelegatingReporter } from "./delegating-reporter"; - -export async function runTest(moduleReport: ModuleReport, beforeChain: HooksCallback[], test: TestInfo, afterChain: HooksCallback[]) { +import { HooksCallback, ModuleInfo, TestContext, TestInfo } from '../-types'; +import { ModuleReport, TestReport } from '../-types/report'; +import { getChain } from '../-utils'; +import { Config, groupLogs, instrument } from './config'; +import { DelegatingReporter } from './delegating-reporter'; +import { Diagnostic } from './diagnostic'; + +export async function runTest( + moduleReport: ModuleReport, + beforeChain: HooksCallback[], + test: TestInfo, + afterChain: HooksCallback[] +) { const testContext = {} as TC; const testReport: TestReport = { id: test.id, @@ -21,7 +26,7 @@ export async function runTest(moduleReport: ModuleReport failed: false, }, module: moduleReport, - } + }; testReport.start = instrument() && performance.mark(`test:${test.module.moduleName} > ${test.name}:start`); const Assert = new Diagnostic(DelegatingReporter, Config, test, testReport); @@ -31,7 +36,9 @@ export async function runTest(moduleReport: ModuleReport if (test.skip) { groupLogs() && console.groupEnd(); testReport.end = instrument() && performance.mark(`test:${test.module.moduleName} > ${test.name}:end`); - testReport.measure = instrument() && performance.measure(`test:${test.module.moduleName} > ${test.name}`, testReport.start.name, testReport.end.name); + testReport.measure = + instrument() && + performance.measure(`test:${test.module.moduleName} > ${test.name}`, testReport.start.name, testReport.end.name); DelegatingReporter.onTestFinish(testReport); return; @@ -63,12 +70,18 @@ export async function runTest(moduleReport: ModuleReport groupLogs() && console.groupEnd(); testReport.end = instrument() && performance.mark(`test:${test.module.moduleName} > ${test.name}:end`); - testReport.measure = instrument() && performance.measure(`test:${test.module.moduleName} > ${test.name}`, testReport.start.name, testReport.end.name); + testReport.measure = + instrument() && + performance.measure(`test:${test.module.moduleName} > ${test.name}`, testReport.start.name, testReport.end.name); DelegatingReporter.onTestFinish(testReport); } -export async function runModule(module: ModuleInfo, parents: ModuleInfo[] | null, promises: Promise[]) { +export async function runModule( + module: ModuleInfo, + parents: ModuleInfo[] | null, + promises: Promise[] +) { groupLogs() && console.groupCollapsed(module.name); const moduleReport: ModuleReport = { name: module.moduleName, @@ -77,7 +90,7 @@ export async function runModule(module: ModuleInfo, measure: null, passed: true, failed: false, - } + }; moduleReport.start = instrument() && performance.mark(`module:${module.moduleName}:start`); DelegatingReporter.onModuleStart(moduleReport); @@ -106,11 +119,10 @@ export async function runModule(module: ModuleInfo, for (let i = 0; i < available; i++) { const test = tests[currentTest++]!; remainingTests--; - const promise = runTest(moduleReport, beforeChain, test, afterChain) - .finally(() => { - const index = promises.indexOf(promise); - promises.splice(index, 1); - }); + const promise = runTest(moduleReport, beforeChain, test, afterChain).finally(() => { + const index = promises.indexOf(promise); + promises.splice(index, 1); + }); promises.push(promise); } @@ -124,8 +136,6 @@ export async function runModule(module: ModuleInfo, } } - - // run modules for (const childModule of module.modules.byOrder) { await runModule(childModule, [...(parents || []), module], promises); @@ -140,6 +150,7 @@ export async function runModule(module: ModuleInfo, } groupLogs() && console.groupEnd(); moduleReport.end = instrument() && performance.mark(`module:${module.moduleName}:end`); - moduleReport.measure = instrument() && performance.measure(`module:${module.moduleName}`, moduleReport.start.name, moduleReport.end.name); + moduleReport.measure = + instrument() && performance.measure(`module:${module.moduleName}`, moduleReport.start.name, moduleReport.end.name); DelegatingReporter.onModuleFinish(moduleReport); } diff --git a/packages/diagnostic/src/legacy/equiv.ts b/packages/diagnostic/src/legacy/equiv.ts index b53b64d50d6..c0aad6a076e 100644 --- a/packages/diagnostic/src/legacy/equiv.ts +++ b/packages/diagnostic/src/legacy/equiv.ts @@ -1,7 +1,8 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-call,@typescript-eslint/ban-types,@typescript-eslint/no-unsafe-member-access */ /* * The utils below are from QUnit to support deepEqual. */ -export function objectType (obj: unknown) { +export function objectType(obj: unknown) { if (typeof obj === 'undefined') { return 'undefined'; } @@ -42,24 +43,24 @@ const BOXABLE_TYPES = new Set(['boolean', 'number', 'string']); // Used for recursion detection, and to avoid repeated comparison. // // Elements are { a: val, b: val }. -let memory: { a: unknown, b: unknown }[] = []; +let memory: { a: unknown; b: unknown }[] = []; -function useStrictEquality (a: unknown, b: unknown) { +function useStrictEquality(a: unknown, b: unknown) { return a === b; } -function useObjectValueEquality (a: object, b: object) { +function useObjectValueEquality(a: object, b: object) { return a === b || a.valueOf() === b.valueOf(); } type HasConstructor = { constructor?: unknown }; -function compareConstructors (a: HasConstructor, b: HasConstructor) { +function compareConstructors(a: HasConstructor, b: HasConstructor) { // Comparing constructors is more strict than using `instanceof` return getConstructor(a) === getConstructor(b); } -function getConstructor (obj: HasConstructor) { +function getConstructor(obj: HasConstructor) { const proto = Object.getPrototypeOf(obj); // If the obj prototype descends from a null constructor, treat it @@ -71,7 +72,7 @@ function getConstructor (obj: HasConstructor) { return !proto || proto.constructor === null ? Object : obj.constructor; } -function getRegExpFlags (regexp: RegExp) { +function getRegExpFlags(regexp: RegExp) { // @ts-expect-error never narrowing is only true for modern browsers return 'flags' in regexp ? regexp.flags : regexp.toString().match(/[gimuy]*$/)[0]; } @@ -82,32 +83,31 @@ const objTypeCallbacks = { null: useStrictEquality, // Handle boxed boolean boolean: useObjectValueEquality, - number (a: number, b: number) { + number(a: number, b: number) { // Handle NaN and boxed number - return a === b || - a.valueOf() === b.valueOf() || - (isNaN(a.valueOf()) && isNaN(b.valueOf())); + return a === b || a.valueOf() === b.valueOf() || (isNaN(a.valueOf()) && isNaN(b.valueOf())); }, // Handle boxed string string: useObjectValueEquality, symbol: useStrictEquality, date: useObjectValueEquality, - nan () { + nan() { return true; }, - regexp (a: RegExp, b: RegExp) { - return a.source === b.source && - + regexp(a: RegExp, b: RegExp) { + return ( + a.source === b.source && // Include flags in the comparison - getRegExpFlags(a) === getRegExpFlags(b); + getRegExpFlags(a) === getRegExpFlags(b) + ); }, // identical reference only function: useStrictEquality, - array (a: unknown[], b: unknown[]) { + array(a: unknown[], b: unknown[]) { if (a.length !== b.length) { // Safe and faster return false; @@ -126,7 +126,7 @@ const objTypeCallbacks = { // repetitions are not counted, so these are equivalent: // a = new Set( [ X={}, Y=[], Y ] ); // b = new Set( [ Y, X, X ] ); - set (a: Set, b: Set) { + set(a: Set, b: Set) { if (a.size !== b.size) { // This optimization has certain quirks because of the lack of // repetition counting. For instance, adding the same @@ -222,7 +222,7 @@ const objTypeCallbacks = { }); return outerEq; - } + }, }; // Entry points from typeEquiv, based on `typeof` @@ -230,7 +230,7 @@ const entryTypeCallbacks = { undefined: useStrictEquality, null: useStrictEquality, boolean: useStrictEquality, - number (a: number, b: number) { + number(a: number, b: number) { // Handle NaN return a === b || (isNaN(a) && isNaN(b)); }, @@ -238,7 +238,7 @@ const entryTypeCallbacks = { symbol: useStrictEquality, function: useStrictEquality, - object (a: BetterObj, b: BetterObj) { + object(a: BetterObj, b: BetterObj) { // Handle memory (skip recursion) if (memory.some((pair) => pair.a === a && pair.b === b)) { return true; @@ -288,10 +288,10 @@ const entryTypeCallbacks = { } return objTypeCallbacks.array(aProperties.sort(), bProperties.sort()); - } + }, }; -function typeEquiv (a: unknown, b: unknown) { +function typeEquiv(a: unknown, b: unknown): boolean { // Optimization: Only perform type-specific comparison when pairs are not strictly equal. if (a === b) { return true; @@ -302,15 +302,17 @@ function typeEquiv (a: unknown, b: unknown) { if (aType !== bType) { // Support comparing primitive to boxed primitives // Try again after possibly unwrapping one - return (aType === 'object' && BOXABLE_TYPES.has(objectType(a)) ? (a as String | Number).valueOf() : a) === - (bType === 'object' && BOXABLE_TYPES.has(objectType(b)) ? (b as String | Number).valueOf() : b); + return ( + (aType === 'object' && BOXABLE_TYPES.has(objectType(a)) ? (a as string | number).valueOf() : a) === + (bType === 'object' && BOXABLE_TYPES.has(objectType(b)) ? (b as string | number).valueOf() : b) + ); } // @ts-expect-error return entryTypeCallbacks[aType](a, b); } -function innerEquiv (a: unknown, b: unknown) { +function innerEquiv(a: unknown, b: unknown): boolean { const res = typeEquiv(a, b); // Release any retained objects and reset recursion detection for next call memory = []; @@ -323,9 +325,9 @@ function innerEquiv (a: unknown, b: unknown) { * @author Philippe Rathé * @author David Chan */ -export default function equiv (a: unknown, b: unknown) { +export default function equiv(a: unknown, b: unknown): boolean { if (arguments.length === 2) { - return (a === b) || innerEquiv(a, b); + return a === b || innerEquiv(a, b); } // Given 0 or 1 arguments, just return true (nothing to compare). diff --git a/packages/diagnostic/src/reporters/dom.ts b/packages/diagnostic/src/reporters/dom.ts index fd1c4685ad2..98585e11044 100644 --- a/packages/diagnostic/src/reporters/dom.ts +++ b/packages/diagnostic/src/reporters/dom.ts @@ -1,7 +1,6 @@ -/* global Testem */ -import { CompatTestReport, Emitter } from "../-types"; -import { DiagnosticReport, ModuleReport, Reporter, SuiteReport, TestReport } from "../-types/report"; -import { getSettings, updateConfigValue, updateSuiteState } from "../internals/config"; +import { CompatTestReport, Emitter } from '../-types'; +import { DiagnosticReport, ModuleReport, Reporter, SuiteReport, TestReport } from '../-types/report'; +import { getSettings, updateConfigValue, updateSuiteState } from '../internals/config'; type SuiteLayout = { report: HTMLElement; @@ -23,7 +22,7 @@ export class DOMReporter implements Reporter { diagnosticsPassed: number; modules: number; modulesPassed: number; - } + }; declare _pendingUpdate: number | null; declare _socket: Emitter | null; @@ -79,7 +78,7 @@ export class DOMReporter implements Reporter { onTestFinish(test: TestReport): void { this.stats.diagnostics += test.result.diagnostics.length; - this.stats.diagnosticsPassed += test.result.diagnostics.filter(d => d.passed).length; + this.stats.diagnosticsPassed += test.result.diagnostics.filter((d) => d.passed).length; if (this._socket) { const compatTestReport = this.currentTests.get(test.id)!; @@ -91,7 +90,7 @@ export class DOMReporter implements Reporter { compatTestReport.todo = test.todo; compatTestReport.total = test.result.diagnostics.length; compatTestReport.runDuration = test.end!.startTime - test.start!.startTime; - compatTestReport.items = test.result.diagnostics.map(d => { + compatTestReport.items = test.result.diagnostics.map((d) => { // more expensive to serialize the whole diagnostic if (this.settings.params.debug.value) { return d; @@ -278,8 +277,8 @@ function renderSuite(element: DocumentFragment, suiteReport: SuiteReport): Suite input.checked = value.value; function update() { - value.value = input.checked; - updateConfigValue(key, value.value); + value.value = input.checked; + updateConfigValue(key, value.value); } input.addEventListener('change', update); diff --git a/packages/diagnostic/src/runners/dom.ts b/packages/diagnostic/src/runners/dom.ts index c3c2c229d99..8eb7c5a9633 100644 --- a/packages/diagnostic/src/runners/dom.ts +++ b/packages/diagnostic/src/runners/dom.ts @@ -1,8 +1,8 @@ +import { registerReporter, start as _start } from '../'; +import type { Emitter } from '../-types'; import { assert, getGlobal } from '../-utils'; -import { start as _start, registerReporter } from '../'; -import { DOMReporter } from '../reporters/dom'; import { ConfigOptions, configure, getSettings } from '../internals/config'; -import type { Emitter } from '../-types'; +import { DOMReporter } from '../reporters/dom'; export async function start(config?: ConfigOptions) { if (config) { @@ -15,7 +15,10 @@ export async function start(config?: ConfigOptions) { assert(`Expected to be in a browser environment`, typeof body !== 'undefined'); const container = context.document.getElementById('warp-drive__diagnostic'); - assert(`Expected to find a diagnostic container element. Make sure your html file has added
`, container !== null); + assert( + `Expected to find a diagnostic container element. Make sure your html file has added
`, + container !== null + ); const settings = getSettings(); let emitter: Emitter | null = null; diff --git a/packages/diagnostic/test/example-tests.js b/packages/diagnostic/test/example-tests.js index 881e3f92e5b..8a89e3e5f9c 100644 --- a/packages/diagnostic/test/example-tests.js +++ b/packages/diagnostic/test/example-tests.js @@ -1,21 +1,21 @@ import { module, test } from './@warp-drive/diagnostic/index.js'; import { start } from './@warp-drive/diagnostic/runners/dom.js'; -module('example-tests', function() { - test('An example test', function(assert) { +module('example-tests', function () { + test('An example test', function (assert) { assert.ok(true, 'We ran a test'); }); - test('Another example test 2', function(assert) { + test('Another example test 2', function (assert) { assert.ok(false, 'We ran another test 2'); assert.ok(true, 'We passed!'); }); - test('Another example test 3', function(assert) { + test('Another example test 3', function (assert) { assert.ok(true, 'We ran another test 3'); }); }); start({ - useDiagnostic: true + useDiagnostic: true, }); diff --git a/packages/diagnostic/tsconfig.json b/packages/diagnostic/tsconfig.json index 5dcb2f4002d..46a4361f60c 100644 --- a/packages/diagnostic/tsconfig.json +++ b/packages/diagnostic/tsconfig.json @@ -1,7 +1,6 @@ { "include": ["src/**/*"], "compilerOptions": { - // "composite": true, "lib": ["DOM", "ESNext"], "module": "esnext", "target": "esnext", diff --git a/packages/eslint-plugin-ember-data/package.json b/packages/eslint-plugin-ember-data/package.json index 8d2cb1e9d7b..dc27b1811ef 100644 --- a/packages/eslint-plugin-ember-data/package.json +++ b/packages/eslint-plugin-ember-data/package.json @@ -11,5 +11,11 @@ }, "volta": { "extends": "../../package.json" + }, + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + }, + "scripts": { + "_syncPnpm": "pnpm sync-dependencies-meta-injected" } -} \ No newline at end of file +} diff --git a/packages/graph/.eslintrc.cjs b/packages/graph/.eslintrc.cjs new file mode 100644 index 00000000000..94f092444d8 --- /dev/null +++ b/packages/graph/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/graph/addon-main.cjs b/packages/graph/addon-main.cjs new file mode 100644 index 00000000000..1dbde47c342 --- /dev/null +++ b/packages/graph/addon-main.cjs @@ -0,0 +1,93 @@ +const requireModule = require('@ember-data/private-build-infra/src/utilities/require-module'); +const getEnv = require('@ember-data/private-build-infra/src/utilities/get-env'); +const detectModule = require('@ember-data/private-build-infra/src/utilities/detect-module'); + +const pkg = require('./package.json'); + +module.exports = { + name: pkg.name, + + options: { + '@embroider/macros': { + setOwnConfig: {}, + }, + }, + + _emberDataConfig: null, + configureEmberData() { + if (this._emberDataConfig) { + return this._emberDataConfig; + } + const app = this._findHost(); + const isProd = /production/.test(process.env.EMBER_ENV); + const hostOptions = app.options?.emberData || {}; + const debugOptions = Object.assign( + { + LOG_PAYLOADS: false, + LOG_OPERATIONS: false, + LOG_MUTATIONS: false, + LOG_NOTIFICATIONS: false, + LOG_REQUESTS: false, + LOG_REQUEST_STATUS: false, + LOG_IDENTIFIERS: false, + LOG_GRAPH: false, + LOG_INSTANCE_CACHE: false, + }, + hostOptions.debug || {} + ); + + const HAS_DEBUG_PACKAGE = detectModule(require, '@ember-data/debug', __dirname, pkg); + const HAS_META_PACKAGE = detectModule(require, 'ember-data', __dirname, pkg); + + const includeDataAdapterInProduction = + typeof hostOptions.includeDataAdapterInProduction === 'boolean' + ? hostOptions.includeDataAdapterInProduction + : HAS_META_PACKAGE; + + const includeDataAdapter = HAS_DEBUG_PACKAGE ? (isProd ? includeDataAdapterInProduction : true) : false; + const DEPRECATIONS = require('@ember-data/private-build-infra/src/deprecations')(hostOptions.compatWith || null); + const FEATURES = require('@ember-data/private-build-infra/src/features')(isProd); + + const ALL_PACKAGES = requireModule('@ember-data/private-build-infra/virtual-packages/packages.js'); + const MACRO_PACKAGE_FLAGS = Object.assign({}, ALL_PACKAGES.default); + delete MACRO_PACKAGE_FLAGS['HAS_DEBUG_PACKAGE']; + + Object.keys(MACRO_PACKAGE_FLAGS).forEach((key) => { + MACRO_PACKAGE_FLAGS[key] = detectModule(require, MACRO_PACKAGE_FLAGS[key], __dirname, pkg); + }); + + // copy configs forward + const ownConfig = this.options['@embroider/macros'].setOwnConfig; + ownConfig.compatWith = hostOptions.compatWith || null; + ownConfig.debug = debugOptions; + ownConfig.deprecations = Object.assign(DEPRECATIONS, ownConfig.deprecations || {}, hostOptions.deprecations || {}); + ownConfig.features = Object.assign({}, FEATURES); + ownConfig.includeDataAdapter = includeDataAdapter; + ownConfig.packages = MACRO_PACKAGE_FLAGS; + ownConfig.env = getEnv(ownConfig); + + this._emberDataConfig = ownConfig; + return ownConfig; + }, + + included() { + this.configureEmberData(); + return this._super.included.call(this, ...arguments); + }, + + treeForVendor() { + return; + }, + treeForPublic() { + return; + }, + treeForStyles() { + return; + }, + treeForAddonStyles() { + return; + }, + treeForApp() { + return; + }, +}; diff --git a/packages/graph/package.json b/packages/graph/package.json index 27c45915989..4fb685194eb 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -11,29 +11,37 @@ "directory": "packages/graph" }, "license": "MIT", - "author": "", + "author": "Chris Thoburn ", "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" - }, - "ember-addon": { - "main": "addon-main.js", - "type": "addon", - "version": 1 + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "files": [ - "addon-main.js", + "unstable-preview-types", + "addon-main.cjs", "addon", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "peerDependencies": { "@ember-data/store": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11" + "@warp-drive/core-types": "workspace:5.5.0-alpha.11" }, "dependenciesMeta": { "@ember-data/private-build-infra": { @@ -41,13 +49,29 @@ }, "@ember-data/store": { "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true + }, + "@ember/string": { + "injected": true } }, "dependencies": { "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.13.2", - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -60,25 +84,35 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" }, - "ember": { - "edition": "octane" - }, "engines": { "node": ">= 18.18.2" }, "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.0", + "ember-addon": { + "main": "addon-main.cjs", + "type": "addon", + "version": 1 + }, + "ember": { + "edition": "octane" + } +} diff --git a/packages/graph/rollup.config.mjs b/packages/graph/rollup.config.mjs index 551c5147bc5..29a69782cbe 100644 --- a/packages/graph/rollup.config.mjs +++ b/packages/graph/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,11 +14,11 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [ + external: external([ '@embroider/macros', '@ember-data/store/-private', '@ember/debug', // assert, deprecate - ], + ]), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/graph/src/-private/-diff.ts b/packages/graph/src/-private/-diff.ts index b777fe6964a..67397f11f09 100644 --- a/packages/graph/src/-private/-diff.ts +++ b/packages/graph/src/-private/-diff.ts @@ -1,9 +1,8 @@ import { assert, deprecate } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { DEPRECATE_NON_UNIQUE_PAYLOADS } from '@ember-data/deprecations'; import { DEBUG } from '@ember-data/env'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { isBelongsTo } from './-utils'; import { assertPolymorphicType } from './debug/assert-polymorphic-type'; @@ -208,10 +207,10 @@ export function computeLocalState(storage: CollectionEdge): StableRecordIdentifi return storage.localState; } - let state = storage.remoteState.slice(); + const state = storage.remoteState.slice(); storage.removals?.forEach((v) => { - let index = state.indexOf(v); + const index = state.indexOf(v); state.splice(index, 1); }); diff --git a/packages/graph/src/-private/-edge-definition.ts b/packages/graph/src/-private/-edge-definition.ts index fdca332c1a5..e4043e78558 100644 --- a/packages/graph/src/-private/-edge-definition.ts +++ b/packages/graph/src/-private/-edge-definition.ts @@ -1,10 +1,9 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { DEBUG } from '@ember-data/env'; import type Store from '@ember-data/store'; -import type { RelationshipSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { RelationshipSchema } from '@warp-drive/core-types/schema'; import { expandingGet, expandingSet, getStore } from './-utils'; import { assertInheritedSchema } from './debug/assert-polymorphic-type'; @@ -172,8 +171,8 @@ function syncMeta(definition: UpgradedMeta, inverseDefinition: UpgradedMeta) { } function upgradeMeta(meta: RelationshipSchema): UpgradedMeta { - let niceMeta: UpgradedMeta = {} as UpgradedMeta; - let options = meta.options; + const niceMeta: UpgradedMeta = {} as UpgradedMeta; + const options = meta.options; niceMeta.kind = meta.kind; niceMeta.key = meta.name; niceMeta.type = meta.type; @@ -196,18 +195,18 @@ function upgradeMeta(meta: RelationshipSchema): UpgradedMeta { function assertConfiguration(info: EdgeDefinition, type: string, key: string) { if (DEBUG) { - let isSelfReferential = info.isSelfReferential; + const isSelfReferential = info.isSelfReferential; if (isSelfReferential) { return true; } - let _isRHS = + const _isRHS = key === info.rhs_relationshipName && (type === info.rhs_baseModelName || // base or non-polymorphic // if the other side is polymorphic then we need to scan our modelNames (info.lhs_isPolymorphic && info.rhs_modelNames.includes(type))); // polymorphic - let _isLHS = + const _isLHS = key === info.lhs_relationshipName && (type === info.lhs_baseModelName || // base or non-polymorphic // if the other side is polymorphic then we need to scan our modelNames @@ -291,8 +290,8 @@ function assertConfiguration(info: EdgeDefinition, type: string, key: string) { } export function isLHS(info: EdgeDefinition, type: string, key: string): boolean { - let isSelfReferential = info.isSelfReferential; - let isRelationship = key === info.lhs_relationshipName; + const isSelfReferential = info.isSelfReferential; + const isRelationship = key === info.lhs_relationshipName; if (DEBUG) { assertConfiguration(info, type, key); @@ -311,8 +310,8 @@ export function isLHS(info: EdgeDefinition, type: string, key: string): boolean } export function isRHS(info: EdgeDefinition, type: string, key: string): boolean { - let isSelfReferential = info.isSelfReferential; - let isRelationship = key === info.rhs_relationshipName; + const isSelfReferential = info.isSelfReferential; + const isRelationship = key === info.rhs_relationshipName; if (DEBUG) { assertConfiguration(info, type, key); @@ -353,9 +352,9 @@ export function upgradeDefinition( !isImplicit ); - let relationships = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor(identifier); + const relationships = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor(identifier); assert(`Expected to have a relationship definition for ${type} but none was found.`, relationships); - let meta = relationships[propertyName]; + const meta = relationships[propertyName]; if (!meta) { // TODO potentially we should just be permissive here since this is an implicit relationship @@ -413,11 +412,11 @@ export function upgradeDefinition( inverseDefinition = null; } else { // CASE: We have an explicit inverse or were able to resolve one - let inverseDefinitions = storeWrapper + const inverseDefinitions = storeWrapper .getSchemaDefinitionService() .relationshipsDefinitionFor({ type: inverseType }); assert(`Expected to have a relationship definition for ${inverseType} but none was found.`, inverseDefinitions); - let metaFromInverse = inverseDefinitions[inverseKey]; + const metaFromInverse = inverseDefinitions[inverseKey]; assert( `Expected a relationship schema for '${inverseType}.${inverseKey}' to match the inverse of '${type}.${propertyName}', but no relationship schema was found.`, metaFromInverse @@ -495,8 +494,8 @@ export function upgradeDefinition( cached.hasInverse !== false ); - let _isLHS = cached.lhs_baseModelName === baseType; - let modelNames = _isLHS ? cached.lhs_modelNames : cached.rhs_modelNames; + const _isLHS = cached.lhs_baseModelName === baseType; + const modelNames = _isLHS ? cached.lhs_modelNames : cached.rhs_modelNames; // make this lookup easier in the future by caching the key modelNames.push(type); expandingSet(cache, type, propertyName, cached); diff --git a/packages/graph/src/-private/-utils.ts b/packages/graph/src/-private/-utils.ts index 28258d41936..ef2d6fbf0bd 100644 --- a/packages/graph/src/-private/-utils.ts +++ b/packages/graph/src/-private/-utils.ts @@ -1,15 +1,14 @@ import { assert, inspect, warn } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { LOG_GRAPH } from '@ember-data/debugging'; import type { Store } from '@ember-data/store/-private'; import { peekCache } from '@ember-data/store/-private'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import { ResourceIdentifierObject } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { UpdateRelationshipOperation } from '@warp-drive/core-types/graph'; +import { ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; import { UpgradedMeta } from './-edge-definition'; -import type { UpdateRelationshipOperation } from './-operations'; import { coerceId } from './coerce-id'; import type { CollectionEdge } from './edges/collection'; import type { ImplicitEdge } from './edges/implicit'; @@ -22,12 +21,12 @@ export function getStore(wrapper: CacheCapabilitiesManager | { _store: Store }): } export function expandingGet(cache: Record>, key1: string, key2: string): T | undefined { - let mainCache = (cache[key1] = cache[key1] || Object.create(null)); + const mainCache = (cache[key1] = cache[key1] || Object.create(null)); return mainCache[key2]; } export function expandingSet(cache: Record>, key1: string, key2: string, value: T): void { - let mainCache = (cache[key1] = cache[key1] || Object.create(null)); + const mainCache = (cache[key1] = cache[key1] || Object.create(null)); mainCache[key2] = value; } @@ -149,7 +148,7 @@ export function removeIdentifierCompletelyFromRelationship( } else if (isHasMany(relationship)) { relationship.remoteMembers.delete(value); relationship.additions?.delete(value); - let wasInRemovals = relationship.removals?.delete(value); + const wasInRemovals = relationship.removals?.delete(value); const canonicalIndex = relationship.remoteState.indexOf(value); if (canonicalIndex !== -1) { diff --git a/packages/graph/src/-private/debug/assert-polymorphic-type.ts b/packages/graph/src/-private/debug/assert-polymorphic-type.ts index 3a61559a36d..7ffeb77b12c 100644 --- a/packages/graph/src/-private/debug/assert-polymorphic-type.ts +++ b/packages/graph/src/-private/debug/assert-polymorphic-type.ts @@ -1,7 +1,7 @@ import { assert } from '@ember/debug'; import { DEBUG } from '@ember-data/env'; import type { UpgradedMeta } from '../-edge-definition'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; /* diff --git a/packages/graph/src/-private/edges/collection.ts b/packages/graph/src/-private/edges/collection.ts index 7157dab3ff3..fcadc7673dc 100644 --- a/packages/graph/src/-private/edges/collection.ts +++ b/packages/graph/src/-private/edges/collection.ts @@ -1,7 +1,6 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; - -import type { CollectionRelationship } from '@ember-data/store/-types/cache/relationship'; -import type { Links, Meta, PaginationLinks } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { CollectionRelationship } from '@warp-drive/core-types/cache/relationship'; +import type { Links, Meta, PaginationLinks } from '@warp-drive/core-types/spec/raw'; import { computeLocalState } from '../-diff'; import type { UpgradedMeta } from '../-edge-definition'; @@ -53,7 +52,7 @@ export function createCollectionEdge(definition: UpgradedMeta, identifier: Stabl } export function legacyGetCollectionRelationshipData(source: CollectionEdge): CollectionRelationship { - let payload: CollectionRelationship = {}; + const payload: CollectionRelationship = {}; if (source.state.hasReceivedData) { payload.data = computeLocalState(source); diff --git a/packages/graph/src/-private/edges/implicit.ts b/packages/graph/src/-private/edges/implicit.ts index 091dee757f4..89d7074eb5e 100644 --- a/packages/graph/src/-private/edges/implicit.ts +++ b/packages/graph/src/-private/edges/implicit.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { UpgradedMeta } from '../-edge-definition'; diff --git a/packages/graph/src/-private/edges/resource.ts b/packages/graph/src/-private/edges/resource.ts index 98160e05ac1..e3156694e1d 100644 --- a/packages/graph/src/-private/edges/resource.ts +++ b/packages/graph/src/-private/edges/resource.ts @@ -1,7 +1,6 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; - -import { ResourceRelationship } from '@ember-data/store/-types/cache/relationship'; -import type { Links, Meta, PaginationLinks } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; +import type { Links, Meta, PaginationLinks } from '@warp-drive/core-types/spec/raw'; import type { UpgradedMeta } from '../-edge-definition'; import type { RelationshipState } from '../-state'; @@ -41,7 +40,7 @@ export function createResourceEdge(definition: UpgradedMeta, identifier: StableR export function legacyGetResourceRelationshipData(source: ResourceEdge): ResourceRelationship { let data: StableRecordIdentifier | null | undefined; - let payload: ResourceRelationship = {}; + const payload: ResourceRelationship = {}; if (source.localState) { data = source.localState; } diff --git a/packages/graph/src/-private/graph.ts b/packages/graph/src/-private/graph.ts index cdd86e433a3..a0708a4d816 100644 --- a/packages/graph/src/-private/graph.ts +++ b/packages/graph/src/-private/graph.ts @@ -1,23 +1,22 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { LOG_GRAPH } from '@ember-data/debugging'; import { DEBUG } from '@ember-data/env'; -import type { RelationshipDiff } from '@ember-data/store/-types/cache/cache'; -import type { CollectionRelationship, ResourceRelationship } from '@ember-data/store/-types/cache/relationship'; import { MergeOperation } from '@ember-data/store/-types/q/cache'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; - -import { rollbackRelationship } from './-diff'; -import type { EdgeCache, UpgradedMeta } from './-edge-definition'; -import { isLHS, upgradeDefinition } from './-edge-definition'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { RelationshipDiff } from '@warp-drive/core-types/cache'; +import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; import type { DeleteRecordOperation, LocalRelationshipOperation, RemoteRelationshipOperation, UnknownOperation, -} from './-operations'; +} from '@warp-drive/core-types/graph'; + +import { rollbackRelationship } from './-diff'; +import type { EdgeCache, UpgradedMeta } from './-edge-definition'; +import { isLHS, upgradeDefinition } from './-edge-definition'; import { assertValidRelationshipPayload, forAllRelatedIdentifiers, @@ -105,7 +104,7 @@ export class Graph { } has(identifier: StableRecordIdentifier, propertyName: string): boolean { - let relationships = this.identifiers.get(identifier); + const relationships = this.identifiers.get(identifier); if (!relationships) { return false; } @@ -269,7 +268,7 @@ export class Graph { // cleans up the graph but retains some nodes // to allow for rematerialization Object.keys(relationships).forEach((key) => { - let rel = relationships[key]!; + const rel = relationships[key]!; if (!rel) { return; } @@ -556,7 +555,7 @@ export class Graph { } this._willSyncLocal = false; - let updated = this._updatedRelationships; + const updated = this._updatedRelationships; this._updatedRelationships = new Set(); updated.forEach((rel) => notifyChange(this, rel.identifier, rel.definition.key)); } @@ -656,7 +655,7 @@ function notifyInverseOfDematerialization( return; } - let relationship = graph.get(inverseIdentifier, inverseKey); + const relationship = graph.get(inverseIdentifier, inverseKey); assert(`expected no implicit`, !isImplicit(relationship)); // For remote members, it is possible that inverseRecordData has already been associated to @@ -765,7 +764,7 @@ function addPending( definition: UpgradedMeta, op: RemoteRelationshipOperation & { field: string } ): void { - let lc = (cache[definition.kind as 'hasMany' | 'belongsTo'] = + const lc = (cache[definition.kind as 'hasMany' | 'belongsTo'] = cache[definition.kind as 'hasMany' | 'belongsTo'] || new Map>()); let lc2 = lc.get(definition.inverseType); if (!lc2) { diff --git a/packages/graph/src/-private/normalize-link.ts b/packages/graph/src/-private/normalize-link.ts index 56b1472b1fe..c05a2c99ce2 100644 --- a/packages/graph/src/-private/normalize-link.ts +++ b/packages/graph/src/-private/normalize-link.ts @@ -1,4 +1,4 @@ -import type { Link, LinkObject } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { Link, LinkObject } from '@warp-drive/core-types/spec/raw'; /* This method normalizes a link to an "links object". If the passed link is diff --git a/packages/graph/src/-private/operations/add-to-related-records.ts b/packages/graph/src/-private/operations/add-to-related-records.ts index aeb7fe5d82f..65d37e06f35 100644 --- a/packages/graph/src/-private/operations/add-to-related-records.ts +++ b/packages/graph/src/-private/operations/add-to-related-records.ts @@ -1,9 +1,9 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { AddToRelatedRecordsOperation } from '@warp-drive/core-types/graph'; import { _addLocal } from '../-diff'; -import type { AddToRelatedRecordsOperation } from '../-operations'; import { isHasMany, notifyChange } from '../-utils'; import type { CollectionEdge } from '../edges/collection'; import type { Graph } from '../graph'; diff --git a/packages/graph/src/-private/operations/remove-from-related-records.ts b/packages/graph/src/-private/operations/remove-from-related-records.ts index 397c36cca08..a7d7536065e 100644 --- a/packages/graph/src/-private/operations/remove-from-related-records.ts +++ b/packages/graph/src/-private/operations/remove-from-related-records.ts @@ -1,9 +1,9 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { RemoveFromRelatedRecordsOperation } from '@warp-drive/core-types/graph'; import { _removeLocal } from '../-diff'; -import type { RemoveFromRelatedRecordsOperation } from '../-operations'; import { isHasMany, notifyChange } from '../-utils'; import type { CollectionEdge } from '../edges/collection'; import type { Graph } from '../graph'; diff --git a/packages/graph/src/-private/operations/replace-related-record.ts b/packages/graph/src/-private/operations/replace-related-record.ts index f6bbda97bb5..58b7efd8366 100644 --- a/packages/graph/src/-private/operations/replace-related-record.ts +++ b/packages/graph/src/-private/operations/replace-related-record.ts @@ -1,11 +1,10 @@ import { assert, deprecate } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE } from '@ember-data/deprecations'; import { DEBUG } from '@ember-data/env'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { ReplaceRelatedRecordOperation } from '@warp-drive/core-types/graph'; -import type { ReplaceRelatedRecordOperation } from '../-operations'; import { isBelongsTo, isNew, notifyChange } from '../-utils'; import { assertPolymorphicType } from '../debug/assert-polymorphic-type'; import type { Graph } from '../graph'; diff --git a/packages/graph/src/-private/operations/replace-related-records.ts b/packages/graph/src/-private/operations/replace-related-records.ts index ff0b57f3b74..86188fbd6cd 100644 --- a/packages/graph/src/-private/operations/replace-related-records.ts +++ b/packages/graph/src/-private/operations/replace-related-records.ts @@ -1,12 +1,11 @@ import { assert, deprecate } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE } from '@ember-data/deprecations'; import { DEBUG } from '@ember-data/env'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { ReplaceRelatedRecordsOperation } from '@warp-drive/core-types/graph'; import { _addLocal, _removeLocal, _removeRemote, diffCollection } from '../-diff'; -import type { ReplaceRelatedRecordsOperation } from '../-operations'; import { isBelongsTo, isHasMany, isNew, notifyChange } from '../-utils'; import { assertPolymorphicType } from '../debug/assert-polymorphic-type'; import type { CollectionEdge } from '../edges/collection'; diff --git a/packages/graph/src/-private/operations/update-relationship.ts b/packages/graph/src/-private/operations/update-relationship.ts index c0640c01b0e..48f94e2213a 100644 --- a/packages/graph/src/-private/operations/update-relationship.ts +++ b/packages/graph/src/-private/operations/update-relationship.ts @@ -1,14 +1,10 @@ import { assert, warn } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { IdentifierCache } from '@ember-data/store/-private/caches/identifier-cache'; -import type { - ExistingResourceIdentifierObject, - NewResourceIdentifierObject, -} from '@ember-data/store/-types/q/ember-data-json-api'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { UpdateRelationshipOperation } from '@warp-drive/core-types/graph'; +import type { ExistingResourceIdentifierObject, NewResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; -import type { UpdateRelationshipOperation } from '../-operations'; import { isBelongsTo, isHasMany, notifyChange } from '../-utils'; import type { Graph } from '../graph'; import _normalizeLink from '../normalize-link'; @@ -91,12 +87,12 @@ export default function updateRelationshipOperation(graph: Graph, op: UpdateRela } if (payload.links) { - let originalLinks = relationship.links; + const originalLinks = relationship.links; relationship.links = payload.links; if (payload.links.related) { - let relatedLink = _normalizeLink(payload.links.related); - let currentLink = originalLinks && originalLinks.related ? _normalizeLink(originalLinks.related) : null; - let currentLinkHref = currentLink ? currentLink.href : null; + const relatedLink = _normalizeLink(payload.links.related); + const currentLink = originalLinks && originalLinks.related ? _normalizeLink(originalLinks.related) : null; + const currentLinkHref = currentLink ? currentLink.href : null; if (relatedLink && relatedLink.href && relatedLink.href !== currentLinkHref) { warn( @@ -132,7 +128,7 @@ export default function updateRelationshipOperation(graph: Graph, op: UpdateRela */ relationship.state.hasFailedLoadAttempt = false; if (hasRelationshipDataProperty) { - let relationshipIsEmpty = payload.data === null || (Array.isArray(payload.data) && payload.data.length === 0); + const relationshipIsEmpty = payload.data === null || (Array.isArray(payload.data) && payload.data.length === 0); // we don't need to notify here as the update op we pushed in above will notify once // membership is in the correct state. diff --git a/packages/graph/tsconfig.json b/packages/graph/tsconfig.json new file mode 100644 index 00000000000..ff2940749aa --- /dev/null +++ b/packages/graph/tsconfig.json @@ -0,0 +1,44 @@ +{ + "include": [ + "src/**/*", + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "rootDir": "src", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types" + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/holodeck/.eslintrc.cjs b/packages/holodeck/.eslintrc.cjs new file mode 100644 index 00000000000..94f092444d8 --- /dev/null +++ b/packages/holodeck/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/holodeck/client/index.ts b/packages/holodeck/client/index.ts index ff5989a6b4a..68f7dfb4e3f 100644 --- a/packages/holodeck/client/index.ts +++ b/packages/holodeck/client/index.ts @@ -2,13 +2,11 @@ import type { Handler, NextFn, RequestContext, RequestInfo, StructuredDataDocume import type { ScaffoldGenerator } from './mock'; -const TEST_IDS = new WeakMap(); +const TEST_IDS = new WeakMap(); export function setTestId(context: object, str: string | null) { if (str && TEST_IDS.has(context)) { - throw new Error( - `MockServerHandler is already configured with a testId.` - ); + throw new Error(`MockServerHandler is already configured with a testId.`); } if (str) { TEST_IDS.set(context, { id: str, request: 0, mock: 0 }); @@ -41,7 +39,9 @@ export class MockServerHandler implements Handler { const request: RequestInfo = Object.assign({}, context.request); const isRecording = request.url!.endsWith('/__record'); const firstChar = request.url!.includes('?') ? '&' : '?'; - const queryForTest = `${firstChar}__xTestId=${test.id}&__xTestRequestNumber=${isRecording ? test.mock++ : test.request++}`; + const queryForTest = `${firstChar}__xTestId=${test.id}&__xTestRequestNumber=${ + isRecording ? test.mock++ : test.request++ + }`; request.url = request.url + queryForTest; request.mode = 'cors'; @@ -50,7 +50,6 @@ export class MockServerHandler implements Handler { try { return await next(request); - } catch (e) { if (e instanceof Error && !(e instanceof DOMException)) { e.message = e.message.replace(queryForTest, ''); @@ -58,7 +57,7 @@ export class MockServerHandler implements Handler { throw e; } } -}; +} export async function mock(owner: object, generate: ScaffoldGenerator, isRecording?: boolean) { const test = TEST_IDS.get(owner); diff --git a/packages/holodeck/package.json b/packages/holodeck/package.json index b8e6d0df07e..ad23acfef53 100644 --- a/packages/holodeck/package.json +++ b/packages/holodeck/package.json @@ -22,10 +22,11 @@ "extends": "../../package.json" }, "dependencies": { - "pm2": "^5.3.0", - "chalk": "^4.1.2", "@hono/node-server": "^1.2.0", - "hono": "^3.8.0" + "chalk": "^4.1.2", + "hono": "^3.8.0", + "pm2": "^5.3.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "files": [ "bin", @@ -45,12 +46,11 @@ "build": "pnpm build:client && pnpm build:types", "start": "rollup --config --watch", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, - "dependenciesMeta": { - "@ember-data/request": { - "injected": true - } + "peerDependencies": { + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -59,12 +59,13 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/request": "workspace:5.5.0-alpha.11", "@embroider/addon-dev": "^4.1.1", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", - "@ember-data/request": "workspace:5.5.0-alpha.11", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0" }, @@ -84,5 +85,16 @@ "types": "./dist/mock.d.ts", "default": "./dist/mock.js" } + }, + "dependenciesMeta": { + "@ember-data/request": { + "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + } } -} \ No newline at end of file +} diff --git a/packages/holodeck/rollup.config.mjs b/packages/holodeck/rollup.config.mjs index d0e9e773af3..26c9257f53c 100644 --- a/packages/holodeck/rollup.config.mjs +++ b/packages/holodeck/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'client', destDir: 'dist', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [], + external: external(), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/holodeck/tsconfig.json b/packages/holodeck/tsconfig.json index 945fac61eed..38f8983d67e 100644 --- a/packages/holodeck/tsconfig.json +++ b/packages/holodeck/tsconfig.json @@ -1,18 +1,13 @@ { "include": ["client/**/*"], "compilerOptions": { - "target": "ES2022", - "module": "ES2020", - "moduleResolution": "node", + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", "skipLibCheck": true, "declarationDir": "dist", "emitDeclarationOnly": true, "noEmit": false, - - // Enable faster builds - // but causes us to not rebuild properly - "incremental": false, - "allowJs": false, "checkJs": false, @@ -34,6 +29,10 @@ "experimentalDecorators": true, "pretty": true, + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + // Support generation of source maps. Note: you must *also* enable source // maps in your `ember-cli-babel` config and/or `babel.config.js`. "declaration": true, @@ -41,10 +40,6 @@ "inlineSourceMap": true, "inlineSources": true, - "baseUrl": "client", - - "paths": { - "@ember-data/request": ["../../request/unstable-preview-types"], - } + "baseUrl": "client" } } \ No newline at end of file diff --git a/packages/json-api/.eslintrc.cjs b/packages/json-api/.eslintrc.cjs new file mode 100644 index 00000000000..8cd33b93590 --- /dev/null +++ b/packages/json-api/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug', 'ember-inflector'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/json-api/package.json b/packages/json-api/package.json index 12e534f0d6c..8756428e525 100644 --- a/packages/json-api/package.json +++ b/packages/json-api/package.json @@ -13,10 +13,12 @@ "license": "MIT", "author": "", "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -24,6 +26,7 @@ "version": 1 }, "files": [ + "unstable-preview-types", "addon-main.js", "addon", "README.md", @@ -31,37 +34,67 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "peerDependencies": { "@ember-data/graph": "workspace:5.5.0-alpha.11", "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-inflector": "^4.0.2" }, + "peerDependenciesMeta": { + "@ember-data/request-utils": { + "optional": true + } + }, + "dependencies": { + "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", + "@ember/edition-utils": "^1.2.0", + "@embroider/macros": "^1.13.2", + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" + }, "dependenciesMeta": { "@ember-data/private-build-infra": { "injected": true }, + "@warp-drive/internal-config": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, "@ember-data/graph": { "injected": true }, "@ember-data/store": { "injected": true }, - "@warp-drive/core": { + "@ember-data/request-utils": { + "injected": true + }, + "ember-inflector": { "injected": true }, - "@ember-data/request-utils": { - "injected": true, - "optional": true + "@ember-data/request": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true + }, + "@ember/string": { + "injected": true } }, - "dependencies": { - "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", - "@ember/edition-utils": "^1.2.0", - "@embroider/macros": "^1.13.2", - "ember-cli-babel": "^8.2.0" - }, "devDependencies": { "@babel/cli": "^7.23.0", "@babel/core": "^7.23.2", @@ -73,13 +106,21 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/graph": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-inflector": "^4.0.2", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" @@ -94,4 +135,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/json-api/rollup.config.mjs b/packages/json-api/rollup.config.mjs index bb73842c063..40b834f78fc 100644 --- a/packages/json-api/rollup.config.mjs +++ b/packages/json-api/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,15 +14,13 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [ + external: external([ '@ember-data/graph/-private', - '@ember-data/request-utils', - '@ember-data/store', '@ember-data/store/-private', '@ember/debug', // assert, deprecate '@embroider/macros', 'ember-inflector', // pluralize - ], + ]), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/json-api/src/-private/builders/-utils.ts b/packages/json-api/src/-private/builders/-utils.ts index 0f41ea281a5..9cae4d3439b 100644 --- a/packages/json-api/src/-private/builders/-utils.ts +++ b/packages/json-api/src/-private/builders/-utils.ts @@ -1,5 +1,5 @@ import { type UrlOptions } from '@ember-data/request-utils'; -import type { CacheOptions, ConstrainedRequestOptions } from '@ember-data/store/-types/request'; +import type { CacheOptions, ConstrainedRequestOptions } from '@warp-drive/core-types/request'; export function copyForwardUrlOptions(urlOptions: UrlOptions, options: ConstrainedRequestOptions): void { if ('host' in options) { diff --git a/packages/json-api/src/-private/builders/find-record.ts b/packages/json-api/src/-private/builders/find-record.ts index 98e4e17ca9d..02b87a878db 100644 --- a/packages/json-api/src/-private/builders/find-record.ts +++ b/packages/json-api/src/-private/builders/find-record.ts @@ -8,7 +8,7 @@ import type { FindRecordOptions, FindRecordRequestOptions, RemotelyAccessibleIdentifier, -} from '@ember-data/store/-types/request'; +} from '@warp-drive/core-types/request'; import { copyForwardUrlOptions, extractCacheOptions } from './-utils'; diff --git a/packages/json-api/src/-private/builders/query.ts b/packages/json-api/src/-private/builders/query.ts index 210d9c80b4c..234fe64cdbe 100644 --- a/packages/json-api/src/-private/builders/query.ts +++ b/packages/json-api/src/-private/builders/query.ts @@ -3,13 +3,14 @@ */ import { pluralize } from 'ember-inflector'; -import { buildBaseURL, buildQueryParams, QueryParamsSource, type QueryUrlOptions } from '@ember-data/request-utils'; +import { buildBaseURL, buildQueryParams, type QueryUrlOptions } from '@ember-data/request-utils'; +import type { QueryParamsSource } from '@warp-drive/core-types/params'; import type { CacheOptions, ConstrainedRequestOptions, PostQueryRequestOptions, QueryRequestOptions, -} from '@ember-data/store/-types/request'; +} from '@warp-drive/core-types/request'; import { copyForwardUrlOptions, extractCacheOptions } from './-utils'; diff --git a/packages/json-api/src/-private/builders/save-record.ts b/packages/json-api/src/-private/builders/save-record.ts index f8ef884c12c..1f91b816f7e 100644 --- a/packages/json-api/src/-private/builders/save-record.ts +++ b/packages/json-api/src/-private/builders/save-record.ts @@ -1,7 +1,5 @@ import { assert } from '@ember/debug'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { pluralize } from 'ember-inflector'; import { @@ -11,12 +9,13 @@ import { type UpdateRecordUrlOptions, } from '@ember-data/request-utils'; import { recordIdentifierFor } from '@ember-data/store'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { ConstrainedRequestOptions, CreateRequestOptions, DeleteRequestOptions, UpdateRequestOptions, -} from '@ember-data/store/-types/request'; +} from '@warp-drive/core-types/request'; import { copyForwardUrlOptions } from './-utils'; diff --git a/packages/json-api/src/-private/cache.ts b/packages/json-api/src/-private/cache.ts index 51feed99398..d969df67239 100644 --- a/packages/json-api/src/-private/cache.ts +++ b/packages/json-api/src/-private/cache.ts @@ -3,44 +3,52 @@ */ import { assert } from '@ember/debug'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { LOG_MUTATIONS, LOG_OPERATIONS, LOG_REQUESTS } from '@ember-data/debugging'; import { DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE } from '@ember-data/deprecations'; import { DEBUG } from '@ember-data/env'; import { graphFor, isBelongsTo, peekGraph } from '@ember-data/graph/-private'; -import type { LocalRelationshipOperation } from '@ember-data/graph/-private/-operations'; import type { CollectionEdge } from '@ember-data/graph/-private/edges/collection'; import type { ImplicitEdge } from '@ember-data/graph/-private/edges/implicit'; import type { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; import type { Graph, GraphEdge } from '@ember-data/graph/-private/graph'; -import type { StructuredDataDocument, StructuredDocument, StructuredErrorDocument } from '@ember-data/request'; -import Store from '@ember-data/store'; -import { StoreRequestInfo } from '@ember-data/store/-private/cache-handler'; +import type Store from '@ember-data/store'; +import type { StoreRequestInfo } from '@ember-data/store/-private/cache-handler'; import type { IdentifierCache } from '@ember-data/store/-private/caches/identifier-cache'; import type { CacheCapabilitiesManager as InternalCapabilitiesManager } from '@ember-data/store/-private/managers/cache-capabilities-manager'; -import type { ResourceBlob } from '@ember-data/store/-types/cache/aliases'; -import type { RelationshipDiff } from '@ember-data/store/-types/cache/cache'; -import type { Change } from '@ember-data/store/-types/cache/change'; +import type { MergeOperation } from '@ember-data/store/-types/q/cache'; +import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +import type { AttributesHash, JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; +import type { Cache, ChangedAttributesHash, RelationshipDiff } from '@warp-drive/core-types/cache'; +import type { ResourceBlob } from '@warp-drive/core-types/cache/aliases'; +import type { Change } from '@warp-drive/core-types/cache/change'; +import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; +import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; +import type { + StableDocumentIdentifier, + StableExistingRecordIdentifier, + StableRecordIdentifier, +} from '@warp-drive/core-types/identifier'; +import { Value } from '@warp-drive/core-types/json/raw'; +import type { + StructuredDataDocument, + StructuredDocument, + StructuredErrorDocument, +} from '@warp-drive/core-types/request'; +import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; import type { CollectionResourceDataDocument, + ResourceDataDocument, ResourceDocument, ResourceErrorDocument, ResourceMetaDocument, SingleResourceDataDocument, -} from '@ember-data/store/-types/cache/document'; -import type { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; -import type { Cache, ChangedAttributesHash, MergeOperation } from '@ember-data/store/-types/q/cache'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +} from '@warp-drive/core-types/spec/document'; import type { CollectionResourceDocument, - CollectionResourceRelationship, ExistingResourceObject, SingleResourceDocument, SingleResourceRelationship, -} from '@ember-data/store/-types/q/ember-data-json-api'; -import type { AttributesHash, JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; -import type { AttributeSchema, RelationshipSchema } from '@ember-data/store/-types/q/record-data-schemas'; +} from '@warp-drive/core-types/spec/raw'; function isImplicit(relationship: GraphEdge): relationship is ImplicitEdge { return relationship.definition.isImplicit; @@ -60,10 +68,10 @@ const EMPTY_ITERATOR = { interface CachedResource { id: string | null; - remoteAttrs: Record | null; - localAttrs: Record | null; - inflightAttrs: Record | null; - changes: Record | null; + remoteAttrs: Record | null; + localAttrs: Record | null; + inflightAttrs: Record | null; + changes: Record | null; errors: JsonApiError[] | null; isNew: boolean; isDeleted: boolean; @@ -74,7 +82,7 @@ interface CachedResource { * * @internal */ - inflightRelationships?: Record; + inflightRelationships?: Record | null; } function makeCache(): CachedResource { @@ -196,7 +204,7 @@ export default class JSONAPICache implements Cache { } const jsonApiDoc = doc.content as SingleResourceDocument | CollectionResourceDocument; - let included = jsonApiDoc.included; + const included = jsonApiDoc.included; let i: number, length: number; const { identifierCache } = this._capabilities; @@ -237,7 +245,7 @@ export default class JSONAPICache implements Cache { if (Array.isArray(jsonApiDoc.data)) { length = jsonApiDoc.data.length; - let identifiers: StableExistingRecordIdentifier[] = []; + const identifiers: StableExistingRecordIdentifier[] = []; for (i = 0; i < length; i++) { identifiers.push(putOne(this, identifierCache, jsonApiDoc.data[i])); @@ -262,7 +270,7 @@ export default class JSONAPICache implements Cache { typeof jsonApiDoc.data === 'object' ); - let identifier = putOne(this, identifierCache, jsonApiDoc.data); + const identifier = putOne(this, identifierCache, jsonApiDoc.data); return this._putDocument( doc as StructuredDataDocument, identifier, @@ -300,13 +308,13 @@ export default class JSONAPICache implements Cache { isErrorDocument(doc) ? fromStructuredError(doc) : fromBaseDocument(doc); if (data !== undefined) { - (resourceDocument as SingleResourceDataDocument | CollectionResourceDataDocument).data = data; + (resourceDocument as ResourceDataDocument).data = data; } if (included !== undefined) { assert(`There should not be included data on an Error document`, !isErrorDocument(doc)); assert(`There should not be included data on a Meta document`, !isMetaDocument(doc)); - (resourceDocument as SingleResourceDataDocument | CollectionResourceDataDocument).included = included; + (resourceDocument as ResourceDataDocument).included = included; } const request = doc.request as StoreRequestInfo | undefined; @@ -341,7 +349,7 @@ export default class JSONAPICache implements Cache { patch(op: MergeOperation): void { if (LOG_OPERATIONS) { try { - let _data = JSON.parse(JSON.stringify(op)) as object; + const _data = JSON.parse(JSON.stringify(op)) as object; // eslint-disable-next-line no-console console.log(`EmberData | Operation - patch ${op.op}`, _data); } catch (e) { @@ -370,7 +378,7 @@ export default class JSONAPICache implements Cache { mutate(mutation: LocalRelationshipOperation): void { if (LOG_MUTATIONS) { try { - let _data = JSON.parse(JSON.stringify(mutation)) as object; + const _data = JSON.parse(JSON.stringify(mutation)) as object; // eslint-disable-next-line no-console console.log(`EmberData | Mutation - update ${mutation.op}`, _data); } catch (e) { @@ -425,7 +433,7 @@ export default class JSONAPICache implements Cache { const { type, id, lid } = identifier; const attributes = Object.assign({}, peeked.remoteAttrs, peeked.inflightAttrs, peeked.localAttrs); - const relationships = {}; + const relationships: JsonApiResource['relationships'] = {}; const rels = this.__graph.identifiers.get(identifier); if (rels) { @@ -505,11 +513,11 @@ export default class JSONAPICache implements Cache { const cached = peeked || this._createCache(identifier); const isLoading = /*#__NOINLINE__*/ _isLoading(peeked, this._capabilities, identifier) || !recordIsLoaded(peeked); - let isUpdate = /*#__NOINLINE__*/ !_isEmpty(peeked) && !isLoading; + const isUpdate = /*#__NOINLINE__*/ !_isEmpty(peeked) && !isLoading; if (LOG_OPERATIONS) { try { - let _data = JSON.parse(JSON.stringify(data)) as object; + const _data = JSON.parse(JSON.stringify(data)) as object; // eslint-disable-next-line no-console console.log(`EmberData | Operation - upsert (${existed ? 'merge' : 'insert'})`, _data); } catch (e) { @@ -681,11 +689,11 @@ export default class JSONAPICache implements Cache { */ clientDidCreate( identifier: StableRecordIdentifier, - options?: Record | undefined + options?: Record | undefined ): Record { if (LOG_MUTATIONS) { try { - let _data = options ? (JSON.parse(JSON.stringify(options)) as object) : options; + const _data = options ? (JSON.parse(JSON.stringify(options)) as object) : options; // eslint-disable-next-line no-console console.log(`EmberData | Mutation - clientDidCreate ${identifier.lid}`, _data); } catch (e) { @@ -695,18 +703,18 @@ export default class JSONAPICache implements Cache { } const cached = this._createCache(identifier); cached.isNew = true; - let createOptions = {}; + const createOptions: Record = {}; if (options !== undefined) { const storeWrapper = this._capabilities; - let attributeDefs = storeWrapper.getSchemaDefinitionService().attributesDefinitionFor(identifier); - let relationshipDefs = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor(identifier); + const attributeDefs = storeWrapper.getSchemaDefinitionService().attributesDefinitionFor(identifier); + const relationshipDefs = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor(identifier); const graph = this.__graph; - let propertyNames = Object.keys(options); + const propertyNames = Object.keys(options); for (let i = 0; i < propertyNames.length; i++) { - let name = propertyNames[i]; - let propertyValue = options[name]; + const name = propertyNames[i]; + const propertyValue = options[name]; if (name === 'id') { continue; @@ -714,7 +722,7 @@ export default class JSONAPICache implements Cache { const fieldType: AttributeSchema | RelationshipSchema | undefined = relationshipDefs[name] || attributeDefs[name]; - let kind = fieldType !== undefined ? ('kind' in fieldType ? fieldType.kind : 'attribute') : null; + const kind = fieldType !== undefined ? ('kind' in fieldType ? fieldType.kind : 'attribute') : null; let relationship: ResourceEdge | CollectionEdge; switch (kind) { @@ -738,7 +746,7 @@ export default class JSONAPICache implements Cache { op: 'replaceRelatedRecords', field: name, record: identifier, - value: propertyValue as StableRecordIdentifier[], + value: propertyValue as unknown as StableRecordIdentifier[], }); relationship = graph.get(identifier, name) as CollectionEdge; relationship.state.hasReceivedData = true; @@ -919,14 +927,14 @@ export default class JSONAPICache implements Cache { } } }); - cached.inflightRelationships = undefined; + cached.inflightRelationships = null; } } setupRelationships(this.__graph, this._capabilities, identifier, data); } newCanonicalAttributes = data.attributes; } - let changedKeys = calculateChangedKeys(cached, newCanonicalAttributes); + const changedKeys = calculateChangedKeys(cached, newCanonicalAttributes); cached.remoteAttrs = Object.assign( cached.remoteAttrs || (Object.create(null) as Record), @@ -968,9 +976,10 @@ export default class JSONAPICache implements Cache { commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[] | undefined): void { const cached = this.__peek(identifier, false); if (cached.inflightAttrs) { - let keys = Object.keys(cached.inflightAttrs); + const keys = Object.keys(cached.inflightAttrs); if (keys.length > 0) { - let attrs = (cached.localAttrs = cached.localAttrs || (Object.create(null) as Record)); + const attrs = (cached.localAttrs = + cached.localAttrs || (Object.create(null) as Record)); for (let i = 0; i < keys.length; i++) { if (attrs[keys[i]] === undefined) { attrs[keys[i]] = cached.inflightAttrs[keys[i]]; @@ -1027,10 +1036,10 @@ export default class JSONAPICache implements Cache { cached.remoteAttrs = null; cached.inflightAttrs = null; - let relatedIdentifiers = _allRelatedIdentifiers(storeWrapper, identifier); + const relatedIdentifiers = _allRelatedIdentifiers(storeWrapper, identifier); if (areAllModelsUnloaded(storeWrapper, relatedIdentifiers)) { for (let i = 0; i < relatedIdentifiers.length; ++i) { - let relatedIdentifier = relatedIdentifiers[i]; + const relatedIdentifier = relatedIdentifiers[i]; storeWrapper.notifyChange(relatedIdentifier, 'removed'); removed = true; storeWrapper.disconnectRecord(relatedIdentifier); @@ -1104,7 +1113,7 @@ export default class JSONAPICache implements Cache { * @param field * @param value */ - setAttr(identifier: StableRecordIdentifier, attr: string, value: unknown): void { + setAttr(identifier: StableRecordIdentifier, attr: string, value: Value): void { const cached = this.__peek(identifier, false); const existing = cached.inflightAttrs && attr in cached.inflightAttrs @@ -1113,9 +1122,9 @@ export default class JSONAPICache implements Cache { ? cached.remoteAttrs[attr] : undefined; if (existing !== value) { - cached.localAttrs = cached.localAttrs || (Object.create(null) as Record); + cached.localAttrs = cached.localAttrs || (Object.create(null) as Record); cached.localAttrs[attr] = value; - cached.changes = cached.changes || (Object.create(null) as Record); + cached.changes = cached.changes || (Object.create(null) as Record); cached.changes[attr] = [existing, value]; } else if (cached.localAttrs) { delete cached.localAttrs[attr]; @@ -1272,10 +1281,7 @@ export default class JSONAPICache implements Cache { * @param field * @returns resource relationship object */ - getRelationship( - identifier: StableRecordIdentifier, - field: string - ): SingleResourceRelationship | CollectionResourceRelationship { + getRelationship(identifier: StableRecordIdentifier, field: string): ResourceRelationship | CollectionRelationship { return this.__graph.getData(identifier, field); } @@ -1411,7 +1417,7 @@ export default class JSONAPICache implements Cache { * @returns {CachedResource} */ __peek(identifier: StableRecordIdentifier, allowDestroyed: boolean): CachedResource { - let resource = this.__safePeek(identifier, allowDestroyed); + const resource = this.__safePeek(identifier, allowDestroyed); assert( `Expected Cache to have a resource entry for the identifier ${String(identifier)} but none was found`, resource @@ -1422,7 +1428,7 @@ export default class JSONAPICache implements Cache { function areAllModelsUnloaded(wrapper: CacheCapabilitiesManager, identifiers: StableRecordIdentifier[]): boolean { for (let i = 0; i < identifiers.length; ++i) { - let identifier = identifiers[i]; + const identifier = identifiers[i]; if (wrapper.hasRecord(identifier)) { return false; } @@ -1448,7 +1454,7 @@ function getDefaultValue( schema: AttributeSchema | undefined, identifier: StableRecordIdentifier, store: Store -): unknown { +): Value | undefined { const options = schema?.options; if (!schema || (!options && !schema.type)) { @@ -1460,15 +1466,15 @@ function getDefaultValue( // If anyone opens an issue for args not working right, we'll restore + deprecate it via a Proxy // that lazily instantiates the record. We don't want to provide any args here // because in a non @ember-data/model world they don't make sense. - return options.defaultValue(); + return options.defaultValue() as Value; // legacy support for defaultValues that are primitives } else if (options && 'defaultValue' in options) { - let defaultValue = options.defaultValue; + const defaultValue = options.defaultValue; assert( `Non primitive defaultValues are not supported because they are shared between all instances. If you would like to use a complex object as a default value please provide a function that returns the complex object.`, typeof defaultValue !== 'object' || defaultValue === null ); - return defaultValue; + return defaultValue as Value; // new style transforms } else if (schema.type) { @@ -1476,7 +1482,7 @@ function getDefaultValue( store.schema as unknown as { transforms?: Map< string, - { defaultValue(options: Record | null, identifier: StableRecordIdentifier): unknown } + { defaultValue(options: Record | null, identifier: StableRecordIdentifier): Value } >; } ).transforms?.get(schema.type); @@ -1504,7 +1510,7 @@ function notifyAttributes(storeWrapper: CacheCapabilitiesManager, identifier: St in the schema */ function calculateChangedKeys(cached: CachedResource, updates?: AttributesHash): string[] { - let changedKeys: string[] = []; + const changedKeys: string[] = []; if (updates) { const keys = Object.keys(updates); @@ -1518,8 +1524,8 @@ function calculateChangedKeys(cached: CachedResource, updates?: AttributesHash): ); for (let i = 0; i < length; i++) { - let key = keys[i]; - let value = updates[key]; + const key = keys[i]; + const value = updates[key]; // A value in localAttrs means the user has a local change to // this attribute. We never override this value when merging @@ -1629,10 +1635,10 @@ function patchLocalAttributes(cached: CachedResource): boolean { return false; } let hasAppliedPatch = false; - let mutatedKeys = Object.keys(localAttrs); + const mutatedKeys = Object.keys(localAttrs); for (let i = 0, length = mutatedKeys.length; i < length; i++) { - let attr = mutatedKeys[i]; + const attr = mutatedKeys[i]; const existing = inflightAttrs && attr in inflightAttrs ? inflightAttrs[attr] @@ -1704,10 +1710,10 @@ function _directlyRelatedIdentifiersIterable( const findNext = (): StableRecordIdentifier | undefined => { while (i < initializedRelationshipsArr.length) { while (j < 2) { - let relatedIdentifiers = + const relatedIdentifiers = j === 0 ? getLocalState(initializedRelationshipsArr[i]) : getRemoteState(initializedRelationshipsArr[i]); while (k < relatedIdentifiers.length) { - let relatedIdentifier = relatedIdentifiers[k++]; + const relatedIdentifier = relatedIdentifiers[k++]; if (relatedIdentifier !== null) { return relatedIdentifier; } @@ -1747,12 +1753,12 @@ function _allRelatedIdentifiers( storeWrapper: CacheCapabilitiesManager, originating: StableRecordIdentifier ): StableRecordIdentifier[] { - let array: StableRecordIdentifier[] = []; - let queue: StableRecordIdentifier[] = []; - let seen = new Set(); + const array: StableRecordIdentifier[] = []; + const queue: StableRecordIdentifier[] = []; + const seen = new Set(); queue.push(originating); while (queue.length > 0) { - let identifier = queue.shift()!; + const identifier = queue.shift()!; array.push(identifier); seen.add(identifier); diff --git a/packages/json-api/src/-private/serialize.ts b/packages/json-api/src/-private/serialize.ts index 1e654d246c1..7236bc723f3 100644 --- a/packages/json-api/src/-private/serialize.ts +++ b/packages/json-api/src/-private/serialize.ts @@ -3,10 +3,23 @@ */ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { AttributesHash, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { Cache } from '@warp-drive/core-types/cache'; +import type { Relationship } from '@warp-drive/core-types/cache/relationship'; +import type { Value } from '@warp-drive/core-types/json/raw'; -import type { Cache } from '@ember-data/store/-types/cache/cache'; -import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; +type ChangedRelationshipData = { + data: Relationship['data']; +}; + +export type JsonApiResourcePatch = { + type: string; + id: string | null; + lid: string; + attributes?: Record; + relationships?: Record; +}; /** * Serializes the current state of a resource or array of resources for use with POST or PUT requests. @@ -73,7 +86,7 @@ export function serializePatch( cache: Cache, identifier: StableRecordIdentifier // options: { include?: string[] } = {} -): { data: JsonApiResource } { +): { data: JsonApiResourcePatch } { const { id, lid, type } = identifier; const record = cache.peek(identifier) as JsonApiResource; assert( @@ -81,7 +94,7 @@ export function serializePatch( record ); - const data: JsonApiResource = { + const data: JsonApiResourcePatch = { type, lid, id, @@ -89,10 +102,11 @@ export function serializePatch( if (cache.hasChangedAttrs(identifier)) { const attrsChanges = cache.changedAttrs(identifier); - const attributes = {}; + const attributes: AttributesHash = {}; Object.keys(attrsChanges).forEach((key) => { - const newVal = attrsChanges[key][1]; + const change = attrsChanges[key]; + const newVal = change[1] as Value | undefined; attributes[key] = newVal === undefined ? null : newVal; }); @@ -101,8 +115,7 @@ export function serializePatch( const changedRelationships = cache.changedRelationships(identifier); if (changedRelationships.size) { - const relationships = {}; - + const relationships: Record = {}; changedRelationships.forEach((diff, key) => { relationships[key] = { data: diff.localState }; }); diff --git a/packages/json-api/tsconfig.json b/packages/json-api/tsconfig.json new file mode 100644 index 00000000000..1b8e7a68b50 --- /dev/null +++ b/packages/json-api/tsconfig.json @@ -0,0 +1,44 @@ +{ + "include": [ + "src/**/*" + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "exactOptionalPropertyTypes": true, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types", + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/legacy-compat/.eslintrc.cjs b/packages/legacy-compat/.eslintrc.cjs new file mode 100644 index 00000000000..909003a7295 --- /dev/null +++ b/packages/legacy-compat/.eslintrc.cjs @@ -0,0 +1,29 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +const config = { + ...parser.defaults(), + ...base.settings(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug', '@ember/application'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; + +module.exports = config; diff --git a/packages/legacy-compat/package.json b/packages/legacy-compat/package.json index b5002352a34..6a07acd36a5 100644 --- a/packages/legacy-compat/package.json +++ b/packages/legacy-compat/package.json @@ -21,6 +21,7 @@ "extends": "../../package.json" }, "files": [ + "unstable-preview-types", "addon-main.js", "addon", "README.md", @@ -28,11 +29,23 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -42,7 +55,8 @@ "dependencies": { "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@embroider/macros": "^1.13.2", - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "dependenciesMeta": { "@ember-data/private-build-infra": { @@ -56,13 +70,35 @@ }, "@ember-data/json-api": { "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + }, + "@ember-data/store": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "@ember-data/request-utils": { + "injected": true } }, "peerDependencies": { "@ember-data/graph": "workspace:5.5.0-alpha.11", "@ember-data/json-api": "workspace:5.5.0-alpha.11", "@ember-data/request": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11" + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11" }, "peerDependenciesMeta": { "@ember-data/graph": { @@ -83,15 +119,26 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/graph": "workspace:5.5.0-alpha.11", + "@ember-data/json-api": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", + "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-inflector": "^4.0.2", + "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0" }, "ember": { "edition": "octane" } -} \ No newline at end of file +} diff --git a/packages/legacy-compat/rollup.config.mjs b/packages/legacy-compat/rollup.config.mjs index faf78264d13..991caa93696 100644 --- a/packages/legacy-compat/rollup.config.mjs +++ b/packages/legacy-compat/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: ['@ember/debug', '@embroider/macros', '@ember-data/store/-private', '@ember-data/request'], + external: external(['@ember/debug', '@embroider/macros', '@ember-data/store/-private']), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/legacy-compat/src/index.ts b/packages/legacy-compat/src/index.ts index ee5d6dc8515..41b2b6bcd7b 100644 --- a/packages/legacy-compat/src/index.ts +++ b/packages/legacy-compat/src/index.ts @@ -4,7 +4,7 @@ import { assert } from '@ember/debug'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; import { _deprecatingNormalize } from '@ember-data/store/-private'; -import type { ObjectValue } from '@ember-data/store/-types/json/raw'; +import type { ObjectValue } from '@warp-drive/core-types/json/raw'; import { FetchManager, upgradeStore } from './-private'; import type { MinimumAdapterInterface } from './legacy-network-handler/minimum-adapter-interface'; @@ -66,9 +66,9 @@ export function adapterFor(this: Store, modelName: string, _allowMissing?: true) this._adapterCache = this._adapterCache || (Object.create(null) as Record); - let normalizedModelName = _deprecatingNormalize(modelName); + const normalizedModelName = _deprecatingNormalize(modelName); - let { _adapterCache } = this; + const { _adapterCache } = this; let adapter: (MinimumAdapterInterface & { store: Store }) | undefined = _adapterCache[normalizedModelName]; if (adapter) { return adapter; @@ -127,9 +127,9 @@ export function serializerFor(this: Store, modelName: string): MinimumSerializer upgradeStore(this); this._serializerCache = this._serializerCache || (Object.create(null) as Record); - let normalizedModelName = _deprecatingNormalize(modelName); + const normalizedModelName = _deprecatingNormalize(modelName); - let { _serializerCache } = this; + const { _serializerCache } = this; let serializer: (MinimumSerializerInterface & { store: Store }) | undefined = _serializerCache[normalizedModelName]; if (serializer) { return serializer; @@ -262,7 +262,7 @@ export function pushPayload(this: Store, modelName: string, inputPayload: Object !(this.isDestroying || this.isDestroyed) ); - const payload = inputPayload || (modelName as unknown as object); + const payload: ObjectValue = inputPayload || (modelName as unknown as ObjectValue); const normalizedModelName = inputPayload ? _deprecatingNormalize(modelName) : 'application'; const serializer = this.serializerFor(normalizedModelName); @@ -287,15 +287,15 @@ export function serializeRecord(this: Store, record: unknown, options?: Serializ export function cleanup(this: Store) { upgradeStore(this); // enqueue destruction of any adapters/serializers we have created - for (let adapterName in this._adapterCache) { - let adapter = this._adapterCache[adapterName]!; + for (const adapterName in this._adapterCache) { + const adapter = this._adapterCache[adapterName]!; if (typeof adapter.destroy === 'function') { adapter.destroy(); } } - for (let serializerName in this._serializerCache) { - let serializer = this._serializerCache[serializerName]!; + for (const serializerName in this._serializerCache) { + const serializer = this._serializerCache[serializerName]!; if (typeof serializer.destroy === 'function') { serializer.destroy(); } diff --git a/packages/legacy-compat/src/legacy-network-handler/fetch-manager.ts b/packages/legacy-compat/src/legacy-network-handler/fetch-manager.ts index 6940887e775..2f40051789d 100644 --- a/packages/legacy-compat/src/legacy-network-handler/fetch-manager.ts +++ b/packages/legacy-compat/src/legacy-network-handler/fetch-manager.ts @@ -1,30 +1,27 @@ import { assert, warn } from '@ember/debug'; import { importSync } from '@embroider/macros'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; import { DEBUG, TESTING } from '@ember-data/env'; -import type { MinimumSerializerInterface } from '@ember-data/legacy-compat/legacy-network-handler/minimum-serializer-interface'; import { HAS_GRAPH_PACKAGE } from '@ember-data/packages'; import { createDeferred } from '@ember-data/request'; import type { Deferred } from '@ember-data/request/-private/types'; import type Store from '@ember-data/store'; import { coerceId } from '@ember-data/store/-private'; -import { StoreRequestInfo } from '@ember-data/store/-private/cache-handler'; +import type { StoreRequestInfo } from '@ember-data/store/-private/cache-handler'; import type { InstanceCache } from '@ember-data/store/-private/caches/instance-cache'; import type RequestStateService from '@ember-data/store/-private/network/request-cache'; import type { FindRecordQuery, Request, SaveRecordMutation } from '@ember-data/store/-private/network/request-cache'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; -import type { - CollectionResourceDocument, - SingleResourceDocument, -} from '@ember-data/store/-types/q/ember-data-json-api'; import type { FindOptions } from '@ember-data/store/-types/q/store'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { CollectionResourceDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; import { upgradeStore } from '../-private'; import { assertIdentifierHasId } from './identifier-has-id'; import { payloadIsNotBlank } from './legacy-data-utils'; import { AdapterPayload, MinimumAdapterInterface } from './minimum-adapter-interface'; +import type { MinimumSerializerInterface } from './minimum-serializer-interface'; import { normalizeResponseHelper } from './serializer-response'; import Snapshot from './snapshot'; @@ -87,14 +84,14 @@ export default class FetchManager { identifier: StableRecordIdentifier, options: FetchMutationOptions ): Promise { - let resolver = createDeferred(); - let query: SaveRecordMutation = { + const resolver = createDeferred(); + const query: SaveRecordMutation = { op: 'saveRecord', recordIdentifier: identifier, options, }; - let queryRequest: Request = { + const queryRequest: Request = { data: [query], }; @@ -118,22 +115,22 @@ export default class FetchManager { options: FindOptions, request: StoreRequestInfo ): Promise { - let query: FindRecordQuery = { + const query: FindRecordQuery = { op: 'findRecord', recordIdentifier: identifier, options, }; - let queryRequest: Request = { + const queryRequest: Request = { data: [query], }; - let pendingFetch = this.getPendingFetch(identifier, options); + const pendingFetch = this.getPendingFetch(identifier, options); if (pendingFetch) { return pendingFetch; } - let modelName = identifier.type; + const modelName = identifier.type; const resolver = createDeferred(); const pendingFetchItem: PendingFetchItem = { @@ -143,7 +140,7 @@ export default class FetchManager { queryRequest, } as PendingFetchItem; - let resolverPromise = resolver.promise; + const resolverPromise = resolver.promise; const store = this._store; const isInitialLoad = !store._instanceCache.recordIsLoaded(identifier); // we don't use isLoading directly because we are the request @@ -157,7 +154,7 @@ export default class FetchManager { // additional data received in the payload // may result in the merging of identifiers (and thus records) - let potentiallyNewIm = store._push(payload, options.reload); + const potentiallyNewIm = store._push(payload, options.reload); if (potentiallyNewIm && !Array.isArray(potentiallyNewIm)) { return potentiallyNewIm; } @@ -196,7 +193,7 @@ export default class FetchManager { }); } - let fetchesByType = this._pendingFetch; + const fetchesByType = this._pendingFetch; let fetchesById = fetchesByType.get(modelName); if (!fetchesById) { @@ -226,11 +223,11 @@ export default class FetchManager { } getPendingFetch(identifier: StableExistingRecordIdentifier, options: FindOptions) { - let pendingFetches = this._pendingFetch.get(identifier.type)?.get(identifier); + const pendingFetches = this._pendingFetch.get(identifier.type)?.get(identifier); // We already have a pending fetch for this if (pendingFetches) { - let matchingPendingFetch = pendingFetches.find((fetch) => isSameRequest(options, fetch.options)); + const matchingPendingFetch = pendingFetches.find((fetch) => isSameRequest(options, fetch.options)); if (matchingPendingFetch) { return matchingPendingFetch.promise; } @@ -354,8 +351,8 @@ function _findMany( modelName: string, snapshots: Snapshot[] ): Promise { - let modelClass = store.modelFor(modelName); // `adapter.findMany` gets the modelClass still - let promise = Promise.resolve().then(() => { + const modelClass = store.modelFor(modelName); // `adapter.findMany` gets the modelClass still + const promise = Promise.resolve().then(() => { const ids = snapshots.map((s) => s.id!); assert( `Cannot fetch a record without an id`, @@ -363,7 +360,7 @@ function _findMany( ); // eslint-disable-next-line @typescript-eslint/unbound-method assert(`Expected this adapter to implement findMany for coalescing`, adapter.findMany); - let ret = adapter.findMany(store, modelClass, ids, snapshots); + const ret = adapter.findMany(store, modelClass, ids, snapshots); assert('adapter.findMany returned undefined, this was very likely a mistake', ret !== undefined); return ret; }); @@ -376,16 +373,16 @@ function _findMany( .join(',')}]', but the adapter's response did not have any data`, !!payloadIsNotBlank(adapterPayload) ); - let serializer = store.serializerFor(modelName); - let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findMany'); + const serializer = store.serializerFor(modelName); + const payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findMany'); return payload as CollectionResourceDocument; }); } -function rejectFetchedItems(fetchMap: Map, snapshots: Snapshot[], error?) { +function rejectFetchedItems(fetchMap: Map, snapshots: Snapshot[], error?: Error) { for (let i = 0, l = snapshots.length; i < l; i++) { - let snapshot = snapshots[i]; - let pair = fetchMap.get(snapshot); + const snapshot = snapshots[i]; + const pair = fetchMap.get(snapshot); if (pair) { pair.resolver.reject( @@ -416,9 +413,9 @@ function handleFoundRecords( options object, we resolve all snapshots by id with the first response we see. */ - let snapshotsById = new Map(); + const snapshotsById = new Map(); for (let i = 0; i < snapshots.length; i++) { - let id = snapshots[i].id!; + const id = snapshots[i].id!; let snapshotGroup = snapshotsById.get(id); if (!snapshotGroup) { snapshotGroup = []; @@ -430,10 +427,10 @@ function handleFoundRecords( const included = Array.isArray(coalescedPayload.included) ? coalescedPayload.included : []; // resolve found records - let resources = coalescedPayload.data; + const resources = coalescedPayload.data; for (let i = 0, l = resources.length; i < l; i++) { - let resource = resources[i]; - let snapshotGroup = snapshotsById.get(resource.id); + const resource = resources[i]; + const snapshotGroup = snapshotsById.get(resource.id); snapshotsById.delete(resource.id); if (!snapshotGroup) { @@ -441,8 +438,8 @@ function handleFoundRecords( included.push(resource); } else { snapshotGroup.forEach((snapshot) => { - let pair = fetchMap.get(snapshot)!; - let resolver = pair.resolver; + const pair = fetchMap.get(snapshot)!; + const resolver = pair.resolver; resolver.resolve({ data: resource }); }); } @@ -457,7 +454,7 @@ function handleFoundRecords( } // reject missing records - let rejected: Snapshot[] = []; + const rejected: Snapshot[] = []; snapshotsById.forEach((snapshotArray) => { rejected.push(...snapshotArray); }); @@ -475,8 +472,8 @@ function handleFoundRecords( function _fetchRecord(store: Store, adapter: MinimumAdapterInterface, fetchItem: PendingFetchItem) { upgradeStore(store); - let identifier = fetchItem.identifier; - let modelName = identifier.type; + const identifier = fetchItem.identifier; + const modelName = identifier.type; assert(`You tried to find a record but you have no adapter (for ${modelName})`, adapter); assert( @@ -484,9 +481,9 @@ function _fetchRecord(store: Store, adapter: MinimumAdapterInterface, fetchItem: typeof adapter.findRecord === 'function' ); - let snapshot = store._fetchManager.createSnapshot(identifier, fetchItem.options); - let klass = store.modelFor(identifier.type); - let id = identifier.id; + const snapshot = store._fetchManager.createSnapshot(identifier, fetchItem.options); + const klass = store.modelFor(identifier.type); + const id = identifier.id; let promise = Promise.resolve().then(() => { return adapter.findRecord(store, klass, identifier.id, snapshot); @@ -498,8 +495,8 @@ function _fetchRecord(store: Store, adapter: MinimumAdapterInterface, fetchItem: `You made a 'findRecord' request for a '${modelName}' with id '${id}', but the adapter's response did not have any data`, !!payloadIsNotBlank(adapterPayload) ); - let serializer = store.serializerFor(modelName); - let payload = normalizeResponseHelper(serializer, store, klass, adapterPayload, id, 'findRecord'); + const serializer = store.serializerFor(modelName); + const payload = normalizeResponseHelper(serializer, store, klass, adapterPayload, id, 'findRecord'); assert( `Ember Data expected the primary data returned from a 'findRecord' response to be an object but instead it found an array.`, !Array.isArray(payload.data) @@ -535,7 +532,7 @@ function _processCoalescedGroup( .then((payloads: CollectionResourceDocument) => { handleFoundRecords(store, fetchMap, group, payloads); }) - .catch((error) => { + .catch((error: Error) => { rejectFetchedItems(fetchMap, group, error); }); } else if (group.length === 1) { @@ -551,8 +548,8 @@ function _flushPendingFetchForType( modelName: string ) { upgradeStore(store); - let adapter = store.adapterFor(modelName); - let shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests; + const adapter = store.adapterFor(modelName); + const shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests; if (shouldCoalesce) { const pendingFetchItems: PendingFetchItem[] = []; @@ -566,13 +563,13 @@ function _flushPendingFetchForType( pendingFetchItems.push(requestsForIdentifier[0]); }); - let totalItems = pendingFetchItems.length; + const totalItems = pendingFetchItems.length; if (totalItems > 1) { - let snapshots = new Array(totalItems); - let fetchMap = new Map(); + const snapshots = new Array(totalItems); + const fetchMap = new Map(); for (let i = 0; i < totalItems; i++) { - let fetchItem = pendingFetchItems[i]; + const fetchItem = pendingFetchItems[i]; snapshots[i] = store._fetchManager.createSnapshot(fetchItem.identifier, fetchItem.options); fetchMap.set(snapshots[i], fetchItem); } @@ -605,8 +602,8 @@ function _flushPendingSave(store: Store, pending: PendingSaveItem) { const adapter = store.adapterFor(identifier.type); const operation = options[SaveOp]; - let modelName = snapshot.modelName; - let modelClass = store.modelFor(modelName); + const modelName = snapshot.modelName; + const modelClass = store.modelFor(modelName); assert(`You tried to update a record but you have no adapter (for ${modelName})`, adapter); assert( @@ -615,7 +612,7 @@ function _flushPendingSave(store: Store, pending: PendingSaveItem) { ); let promise: Promise = Promise.resolve().then(() => adapter[operation](store, modelClass, snapshot)); - let serializer: SerializerWithParseErrors | null = store.serializerFor(modelName); + const serializer: SerializerWithParseErrors | null = store.serializerFor(modelName); assert( `Your adapter's '${operation}' method must return a value, but it returned 'undefined'`, diff --git a/packages/legacy-compat/src/legacy-network-handler/identifier-has-id.ts b/packages/legacy-compat/src/legacy-network-handler/identifier-has-id.ts index 58fb3352af5..0e4164be403 100644 --- a/packages/legacy-compat/src/legacy-network-handler/identifier-has-id.ts +++ b/packages/legacy-compat/src/legacy-network-handler/identifier-has-id.ts @@ -1,6 +1,6 @@ import { assert } from '@ember/debug'; -import type { StableExistingRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier } from '@warp-drive/core-types/identifier'; export function assertIdentifierHasId(identifier: unknown): asserts identifier is StableExistingRecordIdentifier { assert( diff --git a/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.js b/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.js index 67eadce1070..841baf2b7cb 100644 --- a/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.js +++ b/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.js @@ -8,8 +8,8 @@ import { normalizeResponseHelper } from './serializer-response'; export function _findHasMany(adapter, store, identifier, link, relationship, options) { let promise = Promise.resolve().then(() => { const snapshot = store._fetchManager.createSnapshot(identifier, options); - let useLink = !link || typeof link === 'string'; - let relatedLink = useLink ? link : link.href; + const useLink = !link || typeof link === 'string'; + const relatedLink = useLink ? link : link.href; return adapter.findHasMany(store, snapshot, relatedLink, relationship); }); @@ -21,7 +21,7 @@ export function _findHasMany(adapter, store, identifier, link, relationship, opt ); const modelClass = store.modelFor(relationship.type); - let serializer = store.serializerFor(relationship.type); + const serializer = store.serializerFor(relationship.type); let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findHasMany'); assert( @@ -41,22 +41,22 @@ export function _findHasMany(adapter, store, identifier, link, relationship, opt export function _findBelongsTo(store, identifier, link, relationship, options) { let promise = Promise.resolve().then(() => { - let adapter = store.adapterFor(identifier.type); + const adapter = store.adapterFor(identifier.type); assert(`You tried to load a belongsTo relationship but you have no adapter (for ${identifier.type})`, adapter); assert( `You tried to load a belongsTo relationship from a specified 'link' in the original payload but your adapter does not implement 'findBelongsTo'`, typeof adapter.findBelongsTo === 'function' ); - let snapshot = store._fetchManager.createSnapshot(identifier, options); - let useLink = !link || typeof link === 'string'; - let relatedLink = useLink ? link : link.href; + const snapshot = store._fetchManager.createSnapshot(identifier, options); + const useLink = !link || typeof link === 'string'; + const relatedLink = useLink ? link : link.href; return adapter.findBelongsTo(store, snapshot, relatedLink, relationship); }); promise = promise.then( (adapterPayload) => { - let modelClass = store.modelFor(relationship.type); - let serializer = store.serializerFor(relationship.type); + const modelClass = store.modelFor(relationship.type); + const serializer = store.serializerFor(relationship.type); let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findBelongsTo'); assert( @@ -89,7 +89,7 @@ export function _findBelongsTo(store, identifier, link, relationship, options) { function syncRelationshipDataFromLink(store, payload, parentIdentifier, relationship) { // ensure the right hand side (incoming payload) points to the parent record that // requested this relationship - let relationshipData = payload.data + const relationshipData = payload.data ? iterateData(payload.data, (data, index) => { const { id, type } = data; ensureRelationshipIsSetToParent(data, parentIdentifier, store, relationship, index); @@ -128,41 +128,41 @@ function syncRelationshipDataFromLink(store, payload, parentIdentifier, relation } function ensureRelationshipIsSetToParent(payload, parentIdentifier, store, parentRelationship, index) { - let { id, type } = payload; + const { id, type } = payload; if (!payload.relationships) { payload.relationships = {}; } - let { relationships } = payload; + const { relationships } = payload; - let inverse = getInverse(store, parentIdentifier, parentRelationship, type); + const inverse = getInverse(store, parentIdentifier, parentRelationship, type); if (inverse) { - let { inverseKey, kind } = inverse; + const { inverseKey, kind } = inverse; - let relationshipData = relationships[inverseKey] && relationships[inverseKey].data; + const relationshipData = relationships[inverseKey] && relationships[inverseKey].data; if (DEBUG) { if ( typeof relationshipData !== 'undefined' && !relationshipDataPointsToParent(relationshipData, parentIdentifier) ) { - let inspect = function inspect(thing) { + const inspect = function inspect(thing) { return `'${JSON.stringify(thing)}'`; }; - let quotedType = inspect(type); - let quotedInverse = inspect(inverseKey); - let expected = inspect({ + const quotedType = inspect(type); + const quotedInverse = inspect(inverseKey); + const expected = inspect({ id: parentIdentifier.id, type: parentIdentifier.type, }); - let expectedModel = `${parentIdentifier.type}:${parentIdentifier.id}`; - let got = inspect(relationshipData); - let prefix = typeof index === 'number' ? `data[${index}]` : `data`; - let path = `${prefix}.relationships.${inverseKey}.data`; - let other = relationshipData ? `<${relationshipData.type}:${relationshipData.id}>` : null; - let relationshipFetched = `${expectedModel}.${parentRelationship.kind}("${parentRelationship.name}")`; - let includedRecord = `<${type}:${id}>`; - let message = [ + const expectedModel = `${parentIdentifier.type}:${parentIdentifier.id}`; + const got = inspect(relationshipData); + const prefix = typeof index === 'number' ? `data[${index}]` : `data`; + const path = `${prefix}.relationships.${inverseKey}.data`; + const other = relationshipData ? `<${relationshipData.type}:${relationshipData.id}>` : null; + const relationshipFetched = `${expectedModel}.${parentRelationship.kind}("${parentRelationship.name}")`; + const includedRecord = `<${type}:${id}>`; + const message = [ `Encountered mismatched relationship: Ember Data expected ${path} in the payload from ${relationshipFetched} to include ${expected} but got ${got} instead.\n`, `The ${includedRecord} record loaded at ${prefix} in the payload specified ${other} as its ${quotedInverse}, but should have specified ${expectedModel} (the record the relationship is being loaded from) as its ${quotedInverse} instead.`, `This could mean that the response for ${relationshipFetched} may have accidentally returned ${quotedType} records that aren't related to ${expectedModel} and could be related to a different ${parentIdentifier.type} record instead.`, @@ -196,13 +196,13 @@ function inverseForRelationship(store, identifier, key) { } function getInverse(store, parentIdentifier, parentRelationship, type) { - let { name: lhs_relationshipName } = parentRelationship; - let { type: parentType } = parentIdentifier; - let inverseKey = inverseForRelationship(store, { type: parentType }, lhs_relationshipName); + const { name: lhs_relationshipName } = parentRelationship; + const { type: parentType } = parentIdentifier; + const inverseKey = inverseForRelationship(store, { type: parentType }, lhs_relationshipName); if (inverseKey) { const definition = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type }); - let { kind } = definition[inverseKey]; + const { kind } = definition[inverseKey]; return { inverseKey, kind, @@ -220,7 +220,7 @@ function relationshipDataPointsToParent(relationshipData, identifier) { return false; } for (let i = 0; i < relationshipData.length; i++) { - let entry = relationshipData[i]; + const entry = relationshipData[i]; if (validateRelationshipEntry(entry, identifier)) { return true; } @@ -233,7 +233,7 @@ function relationshipDataPointsToParent(relationshipData, identifier) { } function fixRelationshipData(relationshipData, relationshipKind, { id, type }) { - let parentRelationshipData = { + const parentRelationshipData = { id, type, }; @@ -246,7 +246,7 @@ function fixRelationshipData(relationshipData, relationshipKind, { id, type }) { // these arrays could be massive so this is better than filter // Note: this is potentially problematic if type/id are not in the // same state of normalization. - let found = relationshipData.find((v) => { + const found = relationshipData.find((v) => { return v.type === parentRelationshipData.type && v.id === parentRelationshipData.id; }); if (!found) { diff --git a/packages/legacy-compat/src/legacy-network-handler/legacy-data-utils.ts b/packages/legacy-compat/src/legacy-network-handler/legacy-data-utils.ts index b8553063faa..c69c09fbe45 100644 --- a/packages/legacy-compat/src/legacy-network-handler/legacy-data-utils.ts +++ b/packages/legacy-compat/src/legacy-network-handler/legacy-data-utils.ts @@ -1,4 +1,4 @@ -import type { AdapterPayload } from '@ember-data/legacy-compat/legacy-network-handler/minimum-adapter-interface'; +import type { AdapterPayload } from './minimum-adapter-interface'; export function iterateData(data: T[] | T, fn: (o: T, index?: number) => T) { if (Array.isArray(data)) { diff --git a/packages/legacy-compat/src/legacy-network-handler/legacy-network-handler.ts b/packages/legacy-compat/src/legacy-network-handler/legacy-network-handler.ts index 07876b328ab..c741caf29c1 100644 --- a/packages/legacy-compat/src/legacy-network-handler/legacy-network-handler.ts +++ b/packages/legacy-compat/src/legacy-network-handler/legacy-network-handler.ts @@ -1,33 +1,33 @@ import { assert } from '@ember/debug'; import { importSync } from '@embroider/macros'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; import { LOG_PAYLOADS } from '@ember-data/debugging'; import { DEBUG, TESTING } from '@ember-data/env'; -import type { MinimumAdapterInterface } from '@ember-data/legacy-compat/legacy-network-handler/minimum-adapter-interface'; -import type { MinimumSerializerInterface } from '@ember-data/legacy-compat/legacy-network-handler/minimum-serializer-interface'; import type { Future, Handler, NextFn, StructuredDataDocument } from '@ember-data/request'; import type Store from '@ember-data/store'; import type { StoreRequestContext, StoreRequestInfo } from '@ember-data/store/-private/cache-handler'; import type { Collection } from '@ember-data/store/-private/record-arrays/identifier-array'; -import { SingleResourceDataDocument } from '@ember-data/store/-types/cache/document'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { JsonApiError } from '@ember-data/store/-types/q/record-data-json-api'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { SingleResourceDataDocument } from '@warp-drive/core-types/spec/document'; import type { CollectionResourceDocument, JsonApiDocument, Links, PaginationLinks, SingleResourceDocument, -} from '@ember-data/store/-types/q/ember-data-json-api'; -import type { JsonApiError } from '@ember-data/store/-types/q/record-data-json-api'; -import type { RelationshipSchema } from '@ember-data/store/-types/q/record-data-schemas'; +} from '@warp-drive/core-types/spec/raw'; import { upgradeStore } from '../-private'; import FetchManager, { SaveOp } from './fetch-manager'; import { assertIdentifierHasId } from './identifier-has-id'; import { _findBelongsTo, _findHasMany } from './legacy-data-fetch'; import { payloadIsNotBlank } from './legacy-data-utils'; +import type { MinimumAdapterInterface } from './minimum-adapter-interface'; +import type { MinimumSerializerInterface } from './minimum-serializer-interface'; import { normalizeResponseHelper } from './serializer-response'; import type Snapshot from './snapshot'; import SnapshotRecordArray from './snapshot-record-array'; @@ -100,14 +100,15 @@ function findBelongsTo(context: StoreRequestContext): Promise { upgradeStore(store); // short circuit if we are already loading - let pendingRequest = + const pendingRequest = identifier && store._fetchManager.getPendingFetch(identifier as StableExistingRecordIdentifier, options); if (pendingRequest) { return pendingRequest as Promise; } if (useLink) { - return _findBelongsTo(store, record, links!.related, field, options) as Promise; + assert(`Expected a related link when calling store.findBelongsTo, found ${String(links)}`, links && links.related); + return _findBelongsTo(store, record, links.related, field, options) as Promise; } assert(`Expected an identifier`, Array.isArray(identifiers) && identifiers.length === 1); @@ -150,8 +151,9 @@ function findHasMany(context: StoreRequestContext): Promise { `You tried to load a hasMany relationship from a specified 'link' in the original payload but your adapter does not implement 'findHasMany'`, typeof adapter.findHasMany === 'function' ); + assert(`Expected a related link when calling store.findhasMany, found ${String(links)}`, links && links.related); - return _findHasMany(adapter, store, record, links!.related, field, options) as Promise; + return _findHasMany(adapter, store, record, links.related, field, options) as Promise; } // identifiers case @@ -160,7 +162,7 @@ function findHasMany(context: StoreRequestContext): Promise { const manager = store._fetchManager; for (let i = 0; i < identifiers.length; i++) { - let identifier = identifiers[i]; + const identifier = identifiers[i]; // TODO we probably can be lenient here and return from cache for the isNew case assertIdentifierHasId(identifier); fetches[i] = options.reload @@ -187,7 +189,7 @@ function saveRecord(context: StoreRequestContext): Promise { .then((payload) => { if (LOG_PAYLOADS) { try { - let payloadCopy: unknown = payload ? JSON.parse(JSON.stringify(payload)) : payload; + const payloadCopy: unknown = payload ? JSON.parse(JSON.stringify(payload)) : payload; // eslint-disable-next-line no-console console.log(`EmberData | Payload - ${operation}`, payloadCopy); } catch (e) { @@ -221,15 +223,17 @@ function adapterDidInvalidate( ) { upgradeStore(store); if (error && error.isAdapterError === true && error.code === 'InvalidError') { - let serializer = store.serializerFor(identifier.type) as SerializerWithParseErrors; + const serializer = store.serializerFor(identifier.type) as SerializerWithParseErrors; // TODO @deprecate extractErrors being called // TODO remove extractErrors from the default serializers. if (serializer && typeof serializer.extractErrors === 'function') { - let errorsHash = serializer.extractErrors(store, store.modelFor(identifier.type), error, identifier.id) as Record< - string, - string | string[] - >; + const errorsHash = serializer.extractErrors( + store, + store.modelFor(identifier.type), + error, + identifier.id + ) as Record; error.errors = errorsHashToArray(errorsHash); } } @@ -263,7 +267,7 @@ function errorsHashToArray(errors: Record): JsonApiEr if (errors) { Object.keys(errors).forEach((key) => { - let messages = makeArray(errors[key]); + const messages = makeArray(errors[key]); for (let i = 0; i < messages.length; i++) { let title = 'Invalid Attribute'; let pointer = `/data/attributes/${key}`; @@ -305,7 +309,7 @@ function findRecord(context: StoreRequestContext): Promise { promise = store._fetchManager.scheduleFetch(identifier, options, context.request); } else { let snapshot: Snapshot | null = null; - let adapter = store.adapterFor(identifier.type); + const adapter = store.adapterFor(identifier.type); // Refetch the record if the adapter thinks the record is stale if ( @@ -477,7 +481,7 @@ function query(context: StoreRequestContext): Promise { delete options._recordArray; } const schema = store.modelFor(type); - let promise = Promise.resolve().then(() => adapter.query(store, schema, query, recordArray, options)); + const promise = Promise.resolve().then(() => adapter.query(store, schema, query, recordArray, options)); return promise.then((adapterPayload) => { const serializer = store.serializerFor(type); @@ -523,7 +527,7 @@ function queryRecord(context: StoreRequestContext): Promise { ); const schema = store.modelFor(type); - let promise = Promise.resolve().then(() => adapter.queryRecord(store, schema, query, options)) as Promise; + const promise = Promise.resolve().then(() => adapter.queryRecord(store, schema, query, options)) as Promise; return promise.then((adapterPayload: T) => { const serializer = store.serializerFor(type); diff --git a/packages/legacy-compat/src/legacy-network-handler/minimum-adapter-interface.ts b/packages/legacy-compat/src/legacy-network-handler/minimum-adapter-interface.ts index ce209e46db9..790f0ba833d 100644 --- a/packages/legacy-compat/src/legacy-network-handler/minimum-adapter-interface.ts +++ b/packages/legacy-compat/src/legacy-network-handler/minimum-adapter-interface.ts @@ -1,11 +1,13 @@ /** * @module @ember-data/experimental-preview-types */ -import type { Snapshot, SnapshotRecordArray } from '@ember-data/legacy-compat/-private'; import type Store from '@ember-data/store'; import type { Collection } from '@ember-data/store/-private/record-arrays/identifier-array'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; -import type { RelationshipSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { RelationshipSchema } from '@warp-drive/core-types/schema'; + +import type Snapshot from './snapshot'; +import type SnapshotRecordArray from './snapshot-record-array'; type Group = Snapshot[]; // TODO this should probably just alias unknown diff --git a/packages/legacy-compat/src/legacy-network-handler/minimum-serializer-interface.ts b/packages/legacy-compat/src/legacy-network-handler/minimum-serializer-interface.ts index 0d91b3444ce..ace5949404a 100644 --- a/packages/legacy-compat/src/legacy-network-handler/minimum-serializer-interface.ts +++ b/packages/legacy-compat/src/legacy-network-handler/minimum-serializer-interface.ts @@ -1,13 +1,13 @@ /** @module @ember-data/experimental-preview-types */ -import type { Snapshot } from '@ember-data/legacy-compat/-private'; import type Store from '@ember-data/store'; -import type { ObjectValue } from '@ember-data/store/-types/json/raw'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; -import type { JsonApiDocument, SingleResourceDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { ObjectValue } from '@warp-drive/core-types/json/raw'; +import type { JsonApiDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; import type { AdapterPayload } from './minimum-adapter-interface'; +import type Snapshot from './snapshot'; export type SerializerOptions = { includeId?: boolean }; export type RequestType = diff --git a/packages/legacy-compat/src/legacy-network-handler/serializer-response.ts b/packages/legacy-compat/src/legacy-network-handler/serializer-response.ts index 3c6dff3d540..fcab8bdeb22 100644 --- a/packages/legacy-compat/src/legacy-network-handler/serializer-response.ts +++ b/packages/legacy-compat/src/legacy-network-handler/serializer-response.ts @@ -1,14 +1,12 @@ import { assert } from '@ember/debug'; import { DEBUG } from '@ember-data/env'; -import type { AdapterPayload } from '@ember-data/legacy-compat/legacy-network-handler/minimum-adapter-interface'; -import type { - MinimumSerializerInterface, - RequestType, -} from '@ember-data/legacy-compat/legacy-network-handler/minimum-serializer-interface'; import type Store from '@ember-data/store'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; -import type { JsonApiDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { JsonApiDocument } from '@warp-drive/core-types/spec/raw'; + +import type { AdapterPayload } from './minimum-adapter-interface'; +import type { MinimumSerializerInterface, RequestType } from './minimum-serializer-interface'; /** This is a helper method that validates a JSON API top-level document @@ -20,7 +18,7 @@ import type { JsonApiDocument } from '@ember-data/store/-types/q/ember-data-json */ function validateDocumentStructure(doc?: AdapterPayload | JsonApiDocument): asserts doc is JsonApiDocument { if (DEBUG) { - let errors: string[] = []; + const errors: string[] = []; if (!doc || typeof doc !== 'object') { errors.push('Top level of a JSON API document must be an object'); } else { @@ -78,7 +76,7 @@ export function normalizeResponseHelper( id: string | null, requestType: RequestType ): JsonApiDocument { - let normalizedResponse = serializer + const normalizedResponse = serializer ? serializer.normalizeResponse(store, modelClass, payload, id, requestType) : payload; diff --git a/packages/legacy-compat/src/legacy-network-handler/snapshot-record-array.ts b/packages/legacy-compat/src/legacy-network-handler/snapshot-record-array.ts index 64e3180e1fe..ecfdede8847 100644 --- a/packages/legacy-compat/src/legacy-network-handler/snapshot-record-array.ts +++ b/packages/legacy-compat/src/legacy-network-handler/snapshot-record-array.ts @@ -1,13 +1,12 @@ /** @module @ember-data/legacy-compat */ -import type { StableRecordIdentifier } from '@warp-drive/core'; - import type Store from '@ember-data/store'; import { SOURCE } from '@ember-data/store/-private'; import type IdentifierArray from '@ember-data/store/-private/record-arrays/identifier-array'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; import type { FindOptions } from '@ember-data/store/-types/q/store'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { upgradeStore } from '../-private'; import type Snapshot from './snapshot'; diff --git a/packages/legacy-compat/src/legacy-network-handler/snapshot.ts b/packages/legacy-compat/src/legacy-network-handler/snapshot.ts index c5427d965d3..79ac2bd88b4 100644 --- a/packages/legacy-compat/src/legacy-network-handler/snapshot.ts +++ b/packages/legacy-compat/src/legacy-network-handler/snapshot.ts @@ -4,21 +4,22 @@ import { assert } from '@ember/debug'; import { importSync } from '@embroider/macros'; -import type { StableRecordIdentifier } from '@warp-drive/core'; import { DEBUG } from '@ember-data/env'; import type { CollectionEdge } from '@ember-data/graph/-private/edges/collection'; -import { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; -import type { SerializerOptions } from '@ember-data/legacy-compat/legacy-network-handler/minimum-serializer-interface'; +import type { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; import { HAS_JSON_API_PACKAGE } from '@ember-data/packages'; import type Store from '@ember-data/store'; -import { CollectionRelationship } from '@ember-data/store/-types/cache/relationship'; -import type { ChangedAttributesHash } from '@ember-data/store/-types/q/cache'; -import type { AttributeSchema, RelationshipSchema } from '@ember-data/store/-types/q/record-data-schemas'; import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; import type { FindOptions } from '@ember-data/store/-types/q/store'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { ChangedAttributesHash } from '@warp-drive/core-types/cache'; +import type { CollectionRelationship } from '@warp-drive/core-types/cache/relationship'; +import type { Value } from '@warp-drive/core-types/json/raw'; +import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; import { upgradeStore } from '../-private'; +import type { SerializerOptions } from './minimum-serializer-interface'; type RecordId = string | null; @@ -239,16 +240,16 @@ export default class Snapshot implements Snapshot { @public */ changedAttributes(): ChangedAttributesHash { - let changedAttributes = Object.create(null) as ChangedAttributesHash; + const changedAttributes = Object.create(null) as ChangedAttributesHash; if (!this._changedAttributes) { return changedAttributes; } - let changedAttributeKeys = Object.keys(this._changedAttributes); + const changedAttributeKeys = Object.keys(this._changedAttributes); for (let i = 0, length = changedAttributeKeys.length; i < length; i++) { - let key = changedAttributeKeys[i]; - changedAttributes[key] = this._changedAttributes[key].slice() as [unknown, unknown]; + const key = changedAttributeKeys[i]; + changedAttributes[key] = this._changedAttributes[key].slice() as [Value | undefined, Value]; } return changedAttributes; @@ -291,9 +292,9 @@ export default class Snapshot implements Snapshot { will be returned if the contents of the relationship is unknown. */ belongsTo(keyName: string, options?: { id?: boolean }): Snapshot | RecordId | undefined { - let returnModeIsId = !!(options && options.id); + const returnModeIsId = !!(options && options.id); let result: Snapshot | RecordId | undefined; - let store = this._store; + const store = this._store; if (returnModeIsId === true && keyName in this._belongsToIds) { return this._belongsToIds[keyName]; @@ -303,7 +304,7 @@ export default class Snapshot implements Snapshot { return this._belongsToRelationships[keyName]; } - let relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName })[ + const relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName })[ keyName ]; assert( @@ -339,11 +340,11 @@ export default class Snapshot implements Snapshot { ); } - let value = graphFor(this._store).getData(identifier, keyName); - let data = value && value.data; + const value = graphFor(this._store).getData(identifier, keyName); + const data = value && value.data; upgradeStore(store); - let inverseIdentifier = data ? store.identifierCache.getOrCreateRecordIdentifier(data) : null; + const inverseIdentifier = data ? store.identifierCache.getOrCreateRecordIdentifier(data) : null; if (value && value.data !== undefined) { const cache = store.cache; @@ -399,10 +400,10 @@ export default class Snapshot implements Snapshot { undefined will be returned if the contents of the relationship is unknown. */ hasMany(keyName: string, options?: { ids?: boolean }): RecordId[] | Snapshot[] | undefined { - let returnModeIsIds = !!(options && options.ids); + const returnModeIsIds = !!(options && options.ids); let results: RecordId[] | Snapshot[] | undefined; - let cachedIds: RecordId[] | undefined = this._hasManyIds[keyName]; - let cachedSnapshots: Snapshot[] | undefined = this._hasManyRelationships[keyName]; + const cachedIds: RecordId[] | undefined = this._hasManyIds[keyName]; + const cachedSnapshots: Snapshot[] | undefined = this._hasManyRelationships[keyName]; if (returnModeIsIds === true && keyName in this._hasManyIds) { return cachedIds; @@ -414,7 +415,7 @@ export default class Snapshot implements Snapshot { const store = this._store; upgradeStore(store); - let relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName })[ + const relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName })[ keyName ]; assert( @@ -449,12 +450,12 @@ export default class Snapshot implements Snapshot { ); } - let value = graphFor(this._store).getData(identifier, keyName) as CollectionRelationship; + const value = graphFor(this._store).getData(identifier, keyName) as CollectionRelationship; if (value.data) { results = []; value.data.forEach((member) => { - let inverseIdentifier = store.identifierCache.getOrCreateRecordIdentifier(member); + const inverseIdentifier = store.identifierCache.getOrCreateRecordIdentifier(member); const cache = store.cache; if (!cache.isDeleted(inverseIdentifier)) { @@ -496,7 +497,7 @@ export default class Snapshot implements Snapshot { @public */ eachAttribute(callback: (key: string, meta: AttributeSchema) => void, binding?: unknown): void { - let attrDefs = this._store.getSchemaDefinitionService().attributesDefinitionFor(this.identifier); + const attrDefs = this._store.getSchemaDefinitionService().attributesDefinitionFor(this.identifier); Object.keys(attrDefs).forEach((key) => { callback.call(binding, key, attrDefs[key]); }); @@ -520,7 +521,7 @@ export default class Snapshot implements Snapshot { @public */ eachRelationship(callback: (key: string, meta: RelationshipSchema) => void, binding?: unknown): void { - let relationshipDefs = this._store.getSchemaDefinitionService().relationshipsDefinitionFor(this.identifier); + const relationshipDefs = this._store.getSchemaDefinitionService().relationshipsDefinitionFor(this.identifier); Object.keys(relationshipDefs).forEach((key) => { callback.call(binding, key, relationshipDefs[key]); }); diff --git a/packages/legacy-compat/tsconfig.json b/packages/legacy-compat/tsconfig.json new file mode 100644 index 00000000000..3c860b1fafe --- /dev/null +++ b/packages/legacy-compat/tsconfig.json @@ -0,0 +1,43 @@ +{ + "include": [ + "src/**/*" + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types" + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/model/.eslintrc.cjs b/packages/model/.eslintrc.cjs new file mode 100644 index 00000000000..a624261eda1 --- /dev/null +++ b/packages/model/.eslintrc.cjs @@ -0,0 +1,39 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + ...base.settings(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: [ + 'ember-inflector', + '@ember/array', + '@ember/array/proxy', + '@ember/debug', + '@ember/string', + '@ember/object/internals', + '@ember/object/proxy', + '@ember/object/computed', + '@ember/object', + '@ember/application', + '@ember/object/promise-proxy-mixin', + ], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/model/package.json b/packages/model/package.json index 706101c9419..e43d5d0560e 100644 --- a/packages/model/package.json +++ b/packages/model/package.json @@ -14,10 +14,13 @@ "author": "", "directories": {}, "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "move-dts": "bun ../../scripts/copy-declarations.mjs src", + "build:types": "tsc --build --force && pnpm move-dts", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -25,6 +28,7 @@ "version": 1 }, "files": [ + "unstable-preview-types", "blueprints", "addon-main.js", "addon", @@ -33,6 +37,16 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "peerDependencies": { "@ember-data/debug": "workspace:5.5.0-alpha.11", "@ember-data/graph": "workspace:5.5.0-alpha.11", @@ -40,8 +54,8 @@ "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/string": "^3.1.1", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-inflector": "^4.0.2" }, "peerDependenciesMeta": { @@ -59,10 +73,10 @@ "@ember-data/private-build-infra": { "injected": true }, - "@ember-data/store": { + "@warp-drive/internal-config": { "injected": true }, - "@ember/string": { + "@ember-data/store": { "injected": true }, "@ember-data/tracking": { @@ -76,6 +90,24 @@ }, "@ember-data/legacy-compat": { "injected": true + }, + "@ember-data/debug": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/request-utils": { + "injected": true } }, "dependencies": { @@ -85,7 +117,8 @@ "ember-cli-babel": "^8.2.0", "ember-cli-string-utils": "^1.1.0", "ember-cli-test-info": "^1.0.0", - "inflection": "~3.0.0" + "inflection": "~3.0.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -98,13 +131,24 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/debug": "workspace:5.5.0-alpha.11", + "@ember-data/graph": "workspace:5.5.0-alpha.11", + "@ember-data/json-api": "workspace:5.5.0-alpha.11", + "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-inflector": "^4.0.2", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" @@ -116,4 +160,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/model/rollup.config.mjs b/packages/model/rollup.config.mjs index f83859d2e9c..904b0bc7652 100644 --- a/packages/model/rollup.config.mjs +++ b/packages/model/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,26 +14,23 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [ + external: external([ '@embroider/macros', '@ember/service', - 'ember-inflector', '@ember/debug', '@ember/object/computed', '@ember-data/store/-private', - '@ember-data/store', '@ember/object/internals', '@ember-data/tracking/-private', '@ember/object/promise-proxy-mixin', '@ember/object/proxy', '@ember/array', '@ember/array/proxy', - '@ember/string', '@ember/object', '@ember/object/mixin', '@ember/application', '@ember/polyfills', - ], + ]), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/model/src/-private/attr.js b/packages/model/src/-private/attr.js index d9b8a40af38..62a2f279650 100644 --- a/packages/model/src/-private/attr.js +++ b/packages/model/src/-private/attr.js @@ -109,7 +109,7 @@ function attr(type, options) { options = options || {}; } - let meta = { + const meta = { type: type, kind: 'attribute', isAttribute: true, @@ -146,7 +146,7 @@ function attr(type, options) { const identifier = recordIdentifierFor(this); const cache = peekCache(this); - let currentValue = cache.getAttr(identifier, key); + const currentValue = cache.getAttr(identifier, key); if (currentValue !== value) { cache.setAttr(identifier, key, value); diff --git a/packages/model/src/-private/belongs-to.js b/packages/model/src/-private/belongs-to.js index 91d9f251640..c660b4a1fd2 100644 --- a/packages/model/src/-private/belongs-to.js +++ b/packages/model/src/-private/belongs-to.js @@ -101,8 +101,8 @@ import { computedMacroWithOptionalParams, normalizeModelName } from './util'; @return {Ember.computed} relationship */ function belongsTo(modelName, options) { - let opts = options; - let userEnteredModelName = modelName; + const opts = options; + const userEnteredModelName = modelName; assert( `Expected options.async from @belongsTo('${userEnteredModelName}', options) to be a boolean`, @@ -113,7 +113,7 @@ function belongsTo(modelName, options) { opts.inverse === null || (typeof opts.inverse === 'string' && opts.inverse.length > 0) ); - let meta = { + const meta = { type: normalizeModelName(userEnteredModelName), isRelationship: true, options: opts, diff --git a/packages/model/src/-private/debug/assert-polymorphic-type.js b/packages/model/src/-private/debug/assert-polymorphic-type.ts similarity index 73% rename from packages/model/src/-private/debug/assert-polymorphic-type.js rename to packages/model/src/-private/debug/assert-polymorphic-type.ts index 4ed15e66500..c696ffca135 100644 --- a/packages/model/src/-private/debug/assert-polymorphic-type.js +++ b/packages/model/src/-private/debug/assert-polymorphic-type.ts @@ -1,5 +1,8 @@ import { assert } from '@ember/debug'; import { DEBUG } from '@ember-data/env'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type Store from '@ember-data/store'; +import type { UpgradedMeta } from '@ember-data/graph/-private/-edge-definition'; /* Assert that `addedRecord` has a valid type so it can be added to the @@ -13,10 +16,10 @@ import { DEBUG } from '@ember-data/env'; information about the relationship, retrieved via `record.relationshipFor(key)`. */ -let assertPolymorphicType; +let assertPolymorphicType: (parentIdentifier: StableRecordIdentifier, parentDefinition: UpgradedMeta, addedIdentifier: StableRecordIdentifier, store: Store) => void; if (DEBUG) { - assertPolymorphicType = function assertPolymorphicType(parentIdentifier, parentDefinition, addedIdentifier, store) { + assertPolymorphicType = function assertPolymorphicType(parentIdentifier: StableRecordIdentifier, parentDefinition: UpgradedMeta, addedIdentifier: StableRecordIdentifier, store: Store) { if (parentDefinition.inverseIsImplicit) { return; } diff --git a/packages/model/src/-private/errors.ts b/packages/model/src/-private/errors.ts index 67a7af5de2f..b43767bb468 100644 --- a/packages/model/src/-private/errors.ts +++ b/packages/model/src/-private/errors.ts @@ -101,7 +101,7 @@ const ArrayProxyWithCustomOverrides = ArrayProxy as unknown as new () => Arra @public @extends Ember.ArrayProxy */ -export default class Errors extends ArrayProxyWithCustomOverrides { +class Errors extends ArrayProxyWithCustomOverrides { declare __record: { currentState: RecordState }; /** @property errorsByAttributeName @@ -133,7 +133,7 @@ export default class Errors extends ArrayProxyWithCustomOverrides { - let map = this.errorsByAttributeName; + const map = this.errorsByAttributeName; let errors = map.get(attribute); @@ -176,7 +176,7 @@ export default class Errors extends ArrayProxyWithCustomOverrides { + override get content(): NativeArray { return A(); } @@ -185,7 +185,7 @@ export default class Errors extends ArrayProxyWithCustomOverrides 0; } } + +export default Errors; diff --git a/packages/model/src/-private/has-many.js b/packages/model/src/-private/has-many.js index 7e1dc4a67c5..671a46ab116 100644 --- a/packages/model/src/-private/has-many.js +++ b/packages/model/src/-private/has-many.js @@ -185,7 +185,7 @@ function hasMany(type, options) { // the relationship. This is used for introspection and // serialization. Note that `key` is populated lazily // the first time the CP is called. - let meta = { + const meta = { type: normalizeType(type), options, isRelationship: true, diff --git a/packages/model/src/-private/hooks.ts b/packages/model/src/-private/hooks.ts index 7336921d678..06d4e8ce4b3 100644 --- a/packages/model/src/-private/hooks.ts +++ b/packages/model/src/-private/hooks.ts @@ -1,10 +1,9 @@ import { getOwner, setOwner } from '@ember/application'; import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { setCacheFor, setRecordIdentifier, type Store, StoreMap } from '@ember-data/store/-private'; -import type { Cache } from '@ember-data/store/-types/cache/cache'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { Cache } from '@warp-drive/core-types/cache'; import type { ModelStore } from './model'; import Model from './model'; diff --git a/packages/model/src/-private/legacy-relationships-support.ts b/packages/model/src/-private/legacy-relationships-support.ts index 62a68ff92d6..b28a621fccc 100644 --- a/packages/model/src/-private/legacy-relationships-support.ts +++ b/packages/model/src/-private/legacy-relationships-support.ts @@ -1,11 +1,9 @@ import { assert } from '@ember/debug'; import { importSync } from '@embroider/macros'; -import type { StableRecordIdentifier } from '@warp-drive/core'; import { DEBUG } from '@ember-data/env'; import type { UpgradedMeta } from '@ember-data/graph/-private/-edge-definition'; -import type { LocalRelationshipOperation } from '@ember-data/graph/-private/-operations'; import type { CollectionEdge } from '@ember-data/graph/-private/edges/collection'; import type { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; import type { Graph, GraphEdge } from '@ember-data/graph/-private/graph'; @@ -20,15 +18,14 @@ import { SOURCE, storeFor, } from '@ember-data/store/-private'; -import { CollectionRelationship } from '@ember-data/store/-types/cache/relationship'; import type { Cache } from '@ember-data/store/-types/q/cache'; -import { - CollectionResourceRelationship, - SingleResourceRelationship, -} from '@ember-data/store/-types/q/ember-data-json-api'; import type { JsonApiRelationship } from '@ember-data/store/-types/q/record-data-json-api'; import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; import type { FindOptions } from '@ember-data/store/-types/q/store'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { CollectionRelationship } from '@warp-drive/core-types/cache/relationship'; +import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; +import type { CollectionResourceRelationship, SingleResourceRelationship } from '@warp-drive/core-types/spec/raw'; import RelatedCollection from './many-array'; import type Model from './model'; @@ -87,7 +84,7 @@ export class LegacySupport { const currentState = array[SOURCE]; const identifier = this.identifier; - let [identifiers, jsonApi] = this._getCurrentState(identifier, array.key); + const [identifiers, jsonApi] = this._getCurrentState(identifier, array.key); if (jsonApi.meta) { array.meta = jsonApi.meta; @@ -121,7 +118,7 @@ export class LegacySupport { } reloadBelongsTo(key: string, options?: FindOptions): Promise { - let loadingPromise = this._relationshipPromisesCache[key] as Promise | undefined; + const loadingPromise = this._relationshipPromisesCache[key] as Promise | undefined; if (loadingPromise) { return loadingPromise; } @@ -129,10 +126,10 @@ export class LegacySupport { const relationship = this.graph.get(this.identifier, key); assert(`Expected ${key} to be a belongs-to relationship`, isBelongsTo(relationship)); - let resource = this.cache.getRelationship(this.identifier, key) as SingleResourceRelationship; + const resource = this.cache.getRelationship(this.identifier, key) as SingleResourceRelationship; relationship.state.hasFailedLoadAttempt = false; relationship.state.shouldForceReload = true; - let promise = this._findBelongsTo(key, resource, relationship, options); + const promise = this._findBelongsTo(key, resource, relationship, options); if (this._relationshipProxyCache[key]) { // @ts-expect-error return this._updatePromiseProxyFor('belongsTo', key, { promise }); @@ -142,16 +139,16 @@ export class LegacySupport { getBelongsTo(key: string, options?: FindOptions): PromiseBelongsTo | RecordInstance | null { const { identifier, cache } = this; - let resource = cache.getRelationship(this.identifier, key) as SingleResourceRelationship; - let relatedIdentifier = resource && resource.data ? resource.data : null; + const resource = cache.getRelationship(this.identifier, key) as SingleResourceRelationship; + const relatedIdentifier = resource && resource.data ? resource.data : null; assert(`Expected a stable identifier`, !relatedIdentifier || isStableIdentifier(relatedIdentifier)); const store = this.store; const relationship = this.graph.get(this.identifier, key); assert(`Expected ${key} to be a belongs-to relationship`, isBelongsTo(relationship)); - let isAsync = relationship.definition.isAsync; - let _belongsToState: BelongsToProxyMeta = { + const isAsync = relationship.definition.isAsync; + const _belongsToState: BelongsToProxyMeta = { key, store, legacySupport: this, @@ -163,19 +160,19 @@ export class LegacySupport { return this._relationshipProxyCache[key] as PromiseBelongsTo; } - let promise = this._findBelongsTo(key, resource, relationship, options); + const promise = this._findBelongsTo(key, resource, relationship, options); const isLoaded = relatedIdentifier && store._instanceCache.recordIsLoaded(relatedIdentifier); return this._updatePromiseProxyFor('belongsTo', key, { promise, - content: isLoaded ? store._instanceCache.getRecord(relatedIdentifier!) : null, + content: isLoaded ? store._instanceCache.getRecord(relatedIdentifier) : null, _belongsToState, }); } else { if (relatedIdentifier === null) { return null; } else { - let toReturn = store._instanceCache.getRecord(relatedIdentifier); + const toReturn = store._instanceCache.getRecord(relatedIdentifier); assert( `You looked up the '${key}' relationship on a '${identifier.type}' with id ${ identifier.id || 'null' @@ -203,13 +200,13 @@ export class LegacySupport { _getCurrentState( identifier: StableRecordIdentifier, field: string - ): [StableRecordIdentifier[], CollectionResourceRelationship] { - let jsonApi = this.cache.getRelationship(identifier, field) as CollectionResourceRelationship; + ): [StableRecordIdentifier[], CollectionRelationship] { + const jsonApi = this.cache.getRelationship(identifier, field) as CollectionRelationship; const cache = this.store._instanceCache; - let identifiers: StableRecordIdentifier[] = []; + const identifiers: StableRecordIdentifier[] = []; if (jsonApi.data) { for (let i = 0; i < jsonApi.data.length; i++) { - const relatedIdentifier = jsonApi.data[i]; + const relatedIdentifier: StableRecordIdentifier = jsonApi.data[i]; assert(`Expected a stable identifier`, isStableIdentifier(relatedIdentifier)); if (cache.recordIsLoaded(relatedIdentifier, true)) { identifiers.push(relatedIdentifier); @@ -266,7 +263,7 @@ export class LegacySupport { return loadingPromise; } - const jsonApi = this.cache.getRelationship(this.identifier, key) as CollectionResourceRelationship; + const jsonApi = this.cache.getRelationship(this.identifier, key) as CollectionRelationship; const promise = this._findHasManyByJsonApiResource(jsonApi, this.identifier, relationship, options); if (!promise) { @@ -286,7 +283,7 @@ export class LegacySupport { reloadHasMany(key: string, options?: FindOptions) { if (HAS_JSON_API_PACKAGE) { - let loadingPromise = this._relationshipPromisesCache[key]; + const loadingPromise = this._relationshipPromisesCache[key]; if (loadingPromise) { return loadingPromise; } @@ -295,8 +292,8 @@ export class LegacySupport { state.hasFailedLoadAttempt = false; state.shouldForceReload = true; - let manyArray = this.getManyArray(key, definition); - let promise = this.fetchAsyncHasMany(key, relationship, manyArray, options); + const manyArray = this.getManyArray(key, definition); + const promise = this.fetchAsyncHasMany(key, relationship, manyArray, options); if (this._relationshipProxyCache[key]) { return this._updatePromiseProxyFor('hasMany', key, { promise }); @@ -311,14 +308,14 @@ export class LegacySupport { if (HAS_JSON_API_PACKAGE) { const relationship = this.graph.get(this.identifier, key) as CollectionEdge; const { definition, state } = relationship; - let manyArray = this.getManyArray(key, definition); + const manyArray = this.getManyArray(key, definition); if (definition.isAsync) { if (state.hasFailedLoadAttempt) { return this._relationshipProxyCache[key] as PromiseManyArray; } - let promise = this.fetchAsyncHasMany(key, relationship, manyArray, options); + const promise = this.fetchAsyncHasMany(key, relationship, manyArray, options); return this._updatePromiseProxyFor('hasMany', key, { promise, content: manyArray }); } else { @@ -389,8 +386,8 @@ export class LegacySupport { if (DEBUG) { if (kind) { - let modelName = identifier.type; - let actualRelationshipKind = relationship.definition.kind; + const modelName = identifier.type; + const actualRelationshipKind = relationship.definition.kind; assert( `You tried to get the '${name}' relationship on a '${modelName}' via record.${kind}('${name}'), but the relationship is of kind '${actualRelationshipKind}'. Use record.${actualRelationshipKind}('${name}') instead.`, actualRelationshipKind === kind @@ -398,7 +395,7 @@ export class LegacySupport { } } - let relationshipKind = relationship.definition.kind; + const relationshipKind = relationship.definition.kind; if (relationshipKind === 'belongsTo') { reference = new BelongsToReference(this.store, graph, identifier, relationship as ResourceEdge, name); @@ -456,7 +453,7 @@ export class LegacySupport { op: 'findHasMany', records: identifiers || [], data: request, - cacheOptions: { [Symbol.for('ember-data:skip-cache')]: true }, + cacheOptions: { [Symbol.for('wd:skip-cache')]: true }, }) as unknown as Promise; } @@ -479,7 +476,7 @@ export class LegacySupport { op: 'findHasMany', records: identifiers, data: request, - cacheOptions: { [Symbol.for('ember-data:skip-cache')]: true }, + cacheOptions: { [Symbol.for('wd:skip-cache')]: true }, }) as unknown as Promise; } @@ -511,7 +508,7 @@ export class LegacySupport { const identifier = resource.data ? resource.data : null; assert(`Expected a stable identifier`, !identifier || isStableIdentifier(identifier)); - let { isStale, hasDematerializedInverse, hasReceivedData, isEmpty, shouldForceReload } = relationship.state; + const { isStale, hasDematerializedInverse, hasReceivedData, isEmpty, shouldForceReload } = relationship.state; const allInverseRecordsAreLoaded = areAllInverseRecordsLoaded(this.store, resource); const shouldFindViaLink = @@ -537,7 +534,7 @@ export class LegacySupport { op: 'findBelongsTo', records: identifier ? [identifier] : [], data: request, - cacheOptions: { [Symbol.for('ember-data:skip-cache')]: true }, + cacheOptions: { [Symbol.for('wd:skip-cache')]: true }, }); this._pending[key] = future .then((doc) => doc.content) @@ -574,7 +571,7 @@ export class LegacySupport { op: 'findBelongsTo', records: [identifier], data: request, - cacheOptions: { [Symbol.for('ember-data:skip-cache')]: true }, + cacheOptions: { [Symbol.for('wd:skip-cache')]: true }, }) .then((doc) => doc.content) .finally(() => { @@ -660,7 +657,7 @@ function handleCompletedRelationshipRequest( if (error) { relationship.state.hasFailedLoadAttempt = true; - let proxy = recordExt._relationshipProxyCache[key]; + const proxy = recordExt._relationshipProxyCache[key]; // belongsTo relationships are sometimes unloaded // when a load fails, in this case we need // to make sure that we aren't proxying @@ -706,7 +703,8 @@ function extractIdentifierFromRecord(record: PromiseProxyRecord | RecordInstance } function anyUnloaded(store: Store, relationship: CollectionEdge) { - const graph = store._graph!; + const graph = store._graph; + assert(`Expected a Graph instance to be available`, graph); const relationshipData = graph.getData( relationship.identifier, relationship.definition.key @@ -714,7 +712,7 @@ function anyUnloaded(store: Store, relationship: CollectionEdge) { const state = relationshipData.data; const cache = store._instanceCache; const unloaded = state?.find((s) => { - let isLoaded = cache.recordIsLoaded(s, true); + const isLoaded = cache.recordIsLoaded(s, true); return !isLoaded; }); diff --git a/packages/model/src/-private/many-array.ts b/packages/model/src/-private/many-array.ts index 391df562211..5799be88465 100644 --- a/packages/model/src/-private/many-array.ts +++ b/packages/model/src/-private/many-array.ts @@ -3,8 +3,6 @@ */ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import type Store from '@ember-data/store'; import { ARRAY_SIGNAL, @@ -18,9 +16,10 @@ import { IdentifierArrayCreateOptions } from '@ember-data/store/-private/record- import type { CreateRecordProperties } from '@ember-data/store/-private/store-service'; import type { Cache } from '@ember-data/store/-types/q/cache'; import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; -import type { Links, PaginationLinks } from '@ember-data/store/-types/q/ember-data-json-api'; import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; import type { FindOptions } from '@ember-data/store/-types/q/store'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { Links, PaginationLinks } from '@warp-drive/core-types/spec/raw'; import { LegacySupport } from './legacy-relationships-support'; @@ -345,7 +344,7 @@ export default class RelatedCollection extends RecordArray { return record; } - destroy() { + override destroy() { super.destroy(false); } } diff --git a/packages/model/src/-private/model-for-mixin.ts b/packages/model/src/-private/model-for-mixin.ts index f86e4c09bfa..d70cce50b1a 100644 --- a/packages/model/src/-private/model-for-mixin.ts +++ b/packages/model/src/-private/model-for-mixin.ts @@ -21,11 +21,11 @@ import Model, { type ModelFactory } from './model'; in this case */ export default function modelForMixin(store: Store, normalizedModelName: string): ModelFactory | undefined { - let owner = getOwner(store)!; - let MaybeMixin = owner.factoryFor(`mixin:${normalizedModelName}`); - let mixin = MaybeMixin && MaybeMixin.class; + const owner = getOwner(store)!; + const MaybeMixin = owner.factoryFor(`mixin:${normalizedModelName}`); + const mixin = MaybeMixin && MaybeMixin.class; if (mixin) { - let ModelForMixin = Model.extend(mixin); + const ModelForMixin = Model.extend(mixin); ModelForMixin.__isMixin = true; ModelForMixin.__mixin = mixin; //Cache the class as a model diff --git a/packages/model/src/-private/model.d.ts b/packages/model/src/-private/model.d.ts index a4e6c140c4b..371f1fa2111 100644 --- a/packages/model/src/-private/model.d.ts +++ b/packages/model/src/-private/model.d.ts @@ -1,15 +1,15 @@ import type EmberObject from '@ember/object'; -import type { Errors } from '@ember-data/model/-private'; +import type { Errors } from './errors'; import type Store from '@ember-data/store'; -import type { AttributeSchema, RelationshipSchema, RelationshipsSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { AttributeSchema, RelationshipSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; import type { JsonApiError } from '@ember-data/store/-types/q/record-data-json-api'; import type HasManyReference from './references/has-many'; import type BelongsToReference from './references/belongs-to'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { LegacySupport } from './legacy-relationships-support'; -import type { Cache } from '@ember-data/store/-types/q/cache'; +import type { Cache } from '@warp-drive/core-types/cache'; import type RecordState from './record-state'; export type ModelCreateArgs = { diff --git a/packages/model/src/-private/model.js b/packages/model/src/-private/model.js index cca0a5930a8..614f7c68594 100644 --- a/packages/model/src/-private/model.js +++ b/packages/model/src/-private/model.js @@ -36,17 +36,17 @@ export function lookupLegacySupport(record) { } function findPossibleInverses(type, inverseType, name, relationshipsSoFar) { - let possibleRelationships = relationshipsSoFar || []; + const possibleRelationships = relationshipsSoFar || []; - let relationshipMap = inverseType.relationships; + const relationshipMap = inverseType.relationships; if (!relationshipMap) { return possibleRelationships; } - let relationshipsForType = relationshipMap.get(type.modelName); - let relationships = Array.isArray(relationshipsForType) + const relationshipsForType = relationshipMap.get(type.modelName); + const relationships = Array.isArray(relationshipsForType) ? relationshipsForType.filter((relationship) => { - let optionsForRelationship = relationship.options; + const optionsForRelationship = relationship.options; if (!optionsForRelationship.inverse && optionsForRelationship.inverse !== null) { return true; @@ -75,7 +75,7 @@ function findPossibleInverses(type, inverseType, name, relationshipsSoFar) { */ function computeOnce(target, propertyName, desc) { const cache = new WeakMap(); - let getter = desc.get; + const getter = desc.get; desc.get = function () { let meta = cache.get(this); @@ -125,17 +125,17 @@ class Model extends EmberObject { options._createProps = null; options._secretInit = null; - let store = (this.store = _secretInit.store); + const store = (this.store = _secretInit.store); super.init(options); - let identity = _secretInit.identifier; + const identity = _secretInit.identifier; _secretInit.cb(this, _secretInit.cache, identity, _secretInit.store); this.___recordState = DEBUG ? new RecordState(this) : null; this.setProperties(createProps); - let notifications = store.notifications; + const notifications = store.notifications; this.___private_notifications = notifications.subscribe(identity, (identifier, type, field) => { notifyChanges(identifier, type, field, this, store); }); @@ -481,7 +481,7 @@ class Model extends EmberObject { set id(id) { const normalizedId = coerceId(id); const identifier = recordIdentifierFor(this); - let didChange = normalizedId !== identifier.id; + const didChange = normalizedId !== identifier.id; assert( `Cannot set ${identifier.type} record's id to ${id}, because id is already ${identifier.id}`, !didChange || identifier.id === null @@ -582,7 +582,7 @@ class Model extends EmberObject { */ @computeOnce get errors() { - let errors = Errors.create({ __record: this }); + const errors = Errors.create({ __record: this }); this.currentState.updateInvalidErrors(errors); return errors; } @@ -933,7 +933,7 @@ class Model extends EmberObject { options, record: identifier, }, - cacheOptions: { [Symbol.for('ember-data:skip-cache')]: true }, + cacheOptions: { [Symbol.for('wd:skip-cache')]: true }, }) .then(() => this) .finally(() => { @@ -1241,7 +1241,7 @@ class Model extends EmberObject { this.modelName ); - let relationship = this.relationshipsByName.get(name); + const relationship = this.relationshipsByName.get(name); return relationship && store.modelFor(relationship.type); } @@ -1292,11 +1292,11 @@ class Model extends EmberObject { `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName ); - let inverseMap = this.inverseMap; + const inverseMap = this.inverseMap; if (inverseMap[name]) { return inverseMap[name]; } else { - let inverse = this._findInverseFor(name, store); + const inverse = this._findInverseFor(name, store); inverseMap[name] = inverse; return inverse; } @@ -1327,7 +1327,7 @@ class Model extends EmberObject { } let fieldOnInverse, inverseKind, inverseRelationship, inverseOptions; - let inverseSchema = this.typeForRelationship(name, store); + const inverseSchema = this.typeForRelationship(name, store); // if the type does not exist and we are not polymorphic //If inverse is specified manually, return the inverse @@ -1362,8 +1362,8 @@ class Model extends EmberObject { } if (DEBUG) { - let filteredRelationships = possibleRelationships.filter((possibleRelationship) => { - let optionsForRelationship = possibleRelationship.options; + const filteredRelationships = possibleRelationships.filter((possibleRelationship) => { + const optionsForRelationship = possibleRelationship.options; return name === optionsForRelationship.inverse; }); @@ -1379,7 +1379,7 @@ class Model extends EmberObject { ); } - let explicitRelationship = possibleRelationships.find((relationship) => relationship.options.inverse === name); + const explicitRelationship = possibleRelationships.find((relationship) => relationship.options.inverse === name); if (explicitRelationship) { possibleRelationships = [explicitRelationship]; } @@ -1491,12 +1491,12 @@ class Model extends EmberObject { this.modelName ); - let map = new Map(); - let relationshipsByName = this.relationshipsByName; + const map = new Map(); + const relationshipsByName = this.relationshipsByName; // Loop through each computed property on the class relationshipsByName.forEach((desc) => { - let { type } = desc; + const { type } = desc; if (!map.has(type)) { map.set(type, []); @@ -1548,7 +1548,7 @@ class Model extends EmberObject { `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName ); - let names = { + const names = { hasMany: [], belongsTo: [], }; @@ -1602,17 +1602,17 @@ class Model extends EmberObject { this.modelName ); - let types = []; + const types = []; - let rels = this.relationshipsObject; - let relationships = Object.keys(rels); + const rels = this.relationshipsObject; + const relationships = Object.keys(rels); // create an array of the unique types involved // in relationships for (let i = 0; i < relationships.length; i++) { - let name = relationships[i]; - let meta = rels[name]; - let modelName = meta.type; + const name = relationships[i]; + const meta = rels[name]; + const modelName = meta.type; if (types.indexOf(modelName) === -1) { types.push(modelName); @@ -1664,13 +1664,13 @@ class Model extends EmberObject { `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName ); - let map = new Map(); - let rels = this.relationshipsObject; - let relationships = Object.keys(rels); + const map = new Map(); + const rels = this.relationshipsObject; + const relationships = Object.keys(rels); for (let i = 0; i < relationships.length; i++) { - let name = relationships[i]; - let value = rels[name]; + const name = relationships[i]; + const value = rels[name]; map.set(value.name, value); } @@ -1685,8 +1685,8 @@ class Model extends EmberObject { this.modelName ); - let relationships = Object.create(null); - let modelName = this.modelName; + const relationships = Object.create(null); + const modelName = this.modelName; this.eachComputedProperty((name, meta) => { if (meta.kind === 'hasMany' || meta.kind === 'belongsTo') { // TODO deprecate key being here @@ -1751,7 +1751,7 @@ class Model extends EmberObject { `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName ); - let map = new Map(); + const map = new Map(); this.eachComputedProperty((name, meta) => { if (meta.kind === 'hasMany' || meta.kind === 'belongsTo') { @@ -1804,10 +1804,10 @@ class Model extends EmberObject { this.modelName ); - let relationshipTypes = this.relatedTypes; + const relationshipTypes = this.relatedTypes; for (let i = 0; i < relationshipTypes.length; i++) { - let type = relationshipTypes[i]; + const type = relationshipTypes[i]; callback.call(binding, type); } } @@ -1818,18 +1818,17 @@ class Model extends EmberObject { this.modelName ); - let knownKey = knownSide.name; - let knownKind = knownSide.kind; - let inverse = this.inverseFor(knownKey, store); + const knownKey = knownSide.name; + const knownKind = knownSide.kind; + const inverse = this.inverseFor(knownKey, store); // let key; - let otherKind; if (!inverse) { return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone'; } // key = inverse.name; - otherKind = inverse.kind; + const otherKind = inverse.kind; if (otherKind === 'belongsTo') { return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne'; @@ -1883,7 +1882,7 @@ class Model extends EmberObject { this.modelName ); - let map = new Map(); + const map = new Map(); this.eachComputedProperty((name, meta) => { if (meta.kind === 'attribute') { @@ -1948,7 +1947,7 @@ class Model extends EmberObject { this.modelName ); - let map = new Map(); + const map = new Map(); this.eachAttribute((name, meta) => { if (meta.type) { @@ -2112,8 +2111,8 @@ if (HAS_DEBUG_PACKAGE) { @private */ Model.prototype._debugInfo = function () { - let relationships = {}; - let expensiveProperties = []; + const relationships = {}; + const expensiveProperties = []; const identifier = recordIdentifierFor(this); const schema = this.store.getSchemaDefinitionService(); @@ -2123,7 +2122,7 @@ if (HAS_DEBUG_PACKAGE) { const attributes = Object.keys(attrDefs); attributes.unshift('id'); - let groups = [ + const groups = [ { name: 'Attributes', properties: attributes, @@ -2166,10 +2165,10 @@ if (HAS_DEBUG_PACKAGE) { } if (DEBUG) { - let lookupDescriptor = function lookupDescriptor(obj, keyName) { + const lookupDescriptor = function lookupDescriptor(obj, keyName) { let current = obj; do { - let descriptor = Object.getOwnPropertyDescriptor(current, keyName); + const descriptor = Object.getOwnPropertyDescriptor(current, keyName); if (descriptor !== undefined) { return descriptor; } @@ -2182,9 +2181,9 @@ if (DEBUG) { init() { this._super(...arguments); - let ourDescriptor = lookupDescriptor(Model.prototype, 'currentState'); - let theirDescriptor = lookupDescriptor(this, 'currentState'); - let realState = this.___recordState; + const ourDescriptor = lookupDescriptor(Model.prototype, 'currentState'); + const theirDescriptor = lookupDescriptor(this, 'currentState'); + const realState = this.___recordState; if (ourDescriptor.get !== theirDescriptor.get || realState !== this.currentState) { throw new Error( `'currentState' is a reserved property name on instances of classes extending Model. Please choose a different property name for ${this.constructor.toString()}` @@ -2192,7 +2191,7 @@ if (DEBUG) { } const ID_DESCRIPTOR = lookupDescriptor(Model.prototype, 'id'); - let idDesc = lookupDescriptor(this, 'id'); + const idDesc = lookupDescriptor(this, 'id'); if (idDesc.get !== ID_DESCRIPTOR.get) { throw new Error( diff --git a/packages/model/src/-private/notify-changes.ts b/packages/model/src/-private/notify-changes.ts index 029b44e2363..cb4999b7610 100644 --- a/packages/model/src/-private/notify-changes.ts +++ b/packages/model/src/-private/notify-changes.ts @@ -1,11 +1,10 @@ import { assert } from '@ember/debug'; import { cacheFor } from '@ember/object/internals'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import type Store from '@ember-data/store'; import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; -import { RelationshipSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import { RelationshipSchema } from '@warp-drive/core-types/schema'; import type Model from './model'; import { LEGACY_SUPPORT } from './model'; @@ -44,9 +43,9 @@ function notifyRelationship(identifier: StableRecordIdentifier, key: string, rec if (meta.kind === 'belongsTo') { record.notifyPropertyChange(key); } else if (meta.kind === 'hasMany') { - let support = LEGACY_SUPPORT.get(identifier); - let manyArray = support && support._manyArrayCache[key]; - let hasPromise = support && support._relationshipPromisesCache[key]; + const support = LEGACY_SUPPORT.get(identifier); + const manyArray = support && support._manyArrayCache[key]; + const hasPromise = support && support._relationshipPromisesCache[key]; if (manyArray && hasPromise) { // do nothing, we will notify the ManyArray directly @@ -70,7 +69,7 @@ function notifyRelationship(identifier: StableRecordIdentifier, key: string, rec } function notifyAttribute(store: Store, identifier: StableRecordIdentifier, key: string, record: Model) { - let currentValue = cacheFor(record, key); + const currentValue = cacheFor(record, key); const cache = store.cache; if (currentValue !== cache.getAttr(identifier, key)) { record.notifyPropertyChange(key); diff --git a/packages/model/src/-private/promise-belongs-to.ts b/packages/model/src/-private/promise-belongs-to.ts index 907a94726b1..30ea87cad2f 100644 --- a/packages/model/src/-private/promise-belongs-to.ts +++ b/packages/model/src/-private/promise-belongs-to.ts @@ -75,7 +75,7 @@ class PromiseBelongsTo extends Extended { async reload(options: Record): Promise { assert('You are trying to reload an async belongsTo before it has been created', this.content !== undefined); - let { key, legacySupport } = this._belongsToState; + const { key, legacySupport } = this._belongsToState; await legacySupport.reloadBelongsTo(key, options); return this; } diff --git a/packages/model/src/-private/record-state.ts b/packages/model/src/-private/record-state.ts index 9067b5a7884..bcaa93f638d 100644 --- a/packages/model/src/-private/record-state.ts +++ b/packages/model/src/-private/record-state.ts @@ -1,7 +1,5 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core'; - import type Store from '@ember-data/store'; import { storeFor } from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store/-private'; @@ -11,8 +9,9 @@ import type { RequestState } from '@ember-data/store/-private/network/request-ca import type { Cache } from '@ember-data/store/-types/q/cache'; import { cached, compat } from '@ember-data/tracking'; import { addToTransaction, defineSignal, getSignal, peekSignal, subscribe } from '@ember-data/tracking/-private'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import Errors from './errors'; +import type Errors from './errors'; import type Model from './model'; const SOURCE_POINTER_REGEXP = /^\/?data\/(attributes|relationships)\/(.*)/; @@ -216,6 +215,7 @@ export default class RecordState { this.notify('isDirty'); break; case 'errors': + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument this.updateInvalidErrors(this.record.errors); this.notify('isValid'); break; @@ -237,15 +237,15 @@ export default class RecordState { `Expected the Cache instance for ${this.identifier.lid} to implement getErrors(identifier)`, typeof this.cache.getErrors === 'function' ); - let jsonApiErrors = this.cache.getErrors(this.identifier); + const jsonApiErrors = this.cache.getErrors(this.identifier); errors.clear(); for (let i = 0; i < jsonApiErrors.length; i++) { - let error = jsonApiErrors[i]; + const error = jsonApiErrors[i]; if (error.source && error.source.pointer) { - let keyMatch = error.source.pointer.match(SOURCE_POINTER_REGEXP); + const keyMatch = error.source.pointer.match(SOURCE_POINTER_REGEXP); let key: string | undefined; if (keyMatch) { @@ -255,7 +255,7 @@ export default class RecordState { } if (key) { - let errMsg = error.detail || error.title; + const errMsg = error.detail || error.title; assert(`Expected field error to have a detail or title to use as the message`, errMsg); errors.add(key, errMsg); } @@ -288,7 +288,7 @@ export default class RecordState { @tagged get isSaved() { - let rd = this.cache; + const rd = this.cache; if (this.isDeleted) { assert(`Expected Cache to implement isDeletionCommitted()`, typeof rd.isDeletionCommitted === 'function'); return rd.isDeletionCommitted(this.identifier); @@ -301,7 +301,7 @@ export default class RecordState { @tagged get isEmpty() { - let rd = this.cache; + const rd = this.cache; // TODO this is not actually an RFC'd concept. Determine the // correct heuristic to replace this with. assert(`Expected Cache to implement isEmpty()`, typeof rd.isEmpty === 'function'); @@ -310,26 +310,27 @@ export default class RecordState { @tagged get isNew() { - let rd = this.cache; + const rd = this.cache; assert(`Expected Cache to implement isNew()`, typeof rd.isNew === 'function'); return rd.isNew(this.identifier); } @tagged get isDeleted() { - let rd = this.cache; + const rd = this.cache; assert(`Expected Cache to implement isDeleted()`, typeof rd.isDeleted === 'function'); return rd.isDeleted(this.identifier); } @tagged get isValid() { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return this.record.errors.length === 0; } @tagged get isDirty() { - let rd = this.cache; + const rd = this.cache; if (this.isEmpty || rd.isDeletionCommitted(this.identifier) || (this.isDeleted && this.isNew)) { return false; } @@ -338,7 +339,7 @@ export default class RecordState { @tagged get isError() { - let errorReq = this._errorRequests[this._errorRequests.length - 1]; + const errorReq = this._errorRequests[this._errorRequests.length - 1]; if (!errorReq) { return false; } else { @@ -348,7 +349,7 @@ export default class RecordState { @tagged get adapterError() { - let request = this._lastError; + const request = this._lastError; if (!request) { return null; } diff --git a/packages/model/src/-private/references/belongs-to.ts b/packages/model/src/-private/references/belongs-to.ts index cbc51e17739..3fc65c2d093 100644 --- a/packages/model/src/-private/references/belongs-to.ts +++ b/packages/model/src/-private/references/belongs-to.ts @@ -1,21 +1,20 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; - import { DEBUG } from '@ember-data/env'; import type { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; import type { Graph } from '@ember-data/graph/-private/graph'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store/-private'; import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; +import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; +import { cached, compat } from '@ember-data/tracking'; +import { defineSignal } from '@ember-data/tracking/-private'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { LinkObject, Links, Meta, SingleResourceDocument, SingleResourceRelationship, -} from '@ember-data/store/-types/q/ember-data-json-api'; -import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; -import { cached, compat } from '@ember-data/tracking'; -import { defineSignal } from '@ember-data/tracking/-private'; +} from '@warp-drive/core-types/spec/raw'; import { assertPolymorphicType } from '../debug/assert-polymorphic-type'; import { areAllInverseRecordsLoaded, LegacySupport } from '../legacy-relationships-support'; @@ -113,7 +112,7 @@ export default class BelongsToReference { this.___relatedToken = null; } - let resource = this._resource(); + const resource = this._resource(); if (resource && resource.data) { const identifier = this.store.identifierCache.getOrCreateRecordIdentifier(resource.data); this.___relatedToken = this.store.notifications.subscribe( @@ -214,11 +213,11 @@ export default class BelongsToReference { @return {String} The link Ember Data will use to fetch or reload this belongs-to relationship. */ link(): string | null { - let resource = this._resource(); + const resource = this._resource(); if (isResourceIdentiferWithRelatedLinks(resource)) { if (resource.links) { - let related = resource.links.related; + const related = resource.links.related; return !related || typeof related === 'string' ? related : related.href; } } @@ -233,7 +232,7 @@ export default class BelongsToReference { * @returns */ links(): Links | null { - let resource = this._resource(); + const resource = this._resource(); return resource && resource.links ? resource.links : null; } @@ -280,7 +279,7 @@ export default class BelongsToReference { */ meta() { let meta: Meta | null = null; - let resource = this._resource(); + const resource = this._resource(); if (resource && resource.meta && typeof resource.meta === 'object') { meta = resource.meta; } @@ -336,7 +335,7 @@ export default class BelongsToReference { @return {String} The name of the remote type. This should either be `link` or `id` */ remoteType(): 'link' | 'id' { - let value = this._resource(); + const value = this._resource(); if (isResourceIdentiferWithRelatedLinks(value)) { return 'link'; } @@ -390,8 +389,8 @@ export default class BelongsToReference { @return {Promise} A promise that resolves with the new value in this belongs-to relationship. */ push(data: SingleResourceDocument | Promise): Promise { - let jsonApiDoc: SingleResourceDocument = data as SingleResourceDocument; - let record = this.store.push(jsonApiDoc); + const jsonApiDoc: SingleResourceDocument = data as SingleResourceDocument; + const record = this.store.push(jsonApiDoc); if (DEBUG) { // eslint-disable-next-line @typescript-eslint/no-unsafe-call @@ -467,7 +466,7 @@ export default class BelongsToReference { @return {Model} the record in this relationship */ value(): RecordInstance | null { - let resource = this._resource(); + const resource = this._resource(); return resource && resource.data ? this.store.peekRecord(resource.data) : null; } diff --git a/packages/model/src/-private/references/has-many.ts b/packages/model/src/-private/references/has-many.ts index de98864d5ff..1a82d617035 100644 --- a/packages/model/src/-private/references/has-many.ts +++ b/packages/model/src/-private/references/has-many.ts @@ -1,14 +1,15 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; - -import { ManyArray } from 'ember-data/-private'; - import { DEBUG } from '@ember-data/env'; import type { CollectionEdge } from '@ember-data/graph/-private/edges/collection'; import type { Graph } from '@ember-data/graph/-private/graph'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; -import { CollectionRelationship } from '@ember-data/store/-types/cache/relationship'; +import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; +import type { FindOptions } from '@ember-data/store/-types/q/store'; +import { cached, compat } from '@ember-data/tracking'; +import { defineSignal } from '@ember-data/tracking/-private'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { CollectionRelationship } from '@warp-drive/core-types/cache/relationship'; import type { CollectionResourceDocument, CollectionResourceRelationship, @@ -17,14 +18,11 @@ import type { Meta, PaginationLinks, SingleResourceDocument, -} from '@ember-data/store/-types/q/ember-data-json-api'; -import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; -import type { FindOptions } from '@ember-data/store/-types/q/store'; -import { cached, compat } from '@ember-data/tracking'; -import { defineSignal } from '@ember-data/tracking/-private'; +} from '@warp-drive/core-types/spec/raw'; import { assertPolymorphicType } from '../debug/assert-polymorphic-type'; import { areAllInverseRecordsLoaded, LegacySupport } from '../legacy-relationships-support'; +import type ManyArray from '../many-array'; import { LEGACY_SUPPORT } from '../model'; /** @@ -109,9 +107,9 @@ export default class HasManyReference { get identifiers(): StableRecordIdentifier[] { this._ref; // consume the tracked prop - let resource = this._resource(); + const resource = this._resource(); - let map = this.___relatedTokenMap; + const map = this.___relatedTokenMap; this.___relatedTokenMap = new Map(); if (resource && resource.data) { @@ -193,7 +191,7 @@ export default class HasManyReference { @return {String} The name of the remote type. This should either be `link` or `ids` */ remoteType(): 'link' | 'ids' { - let value = this._resource(); + const value = this._resource(); if (value && value.links && value.links.related) { return 'link'; } @@ -279,11 +277,11 @@ export default class HasManyReference { @return {String} The link Ember Data will use to fetch or reload this belongs-to relationship. */ link(): string | null { - let resource = this._resource(); + const resource = this._resource(); if (isResourceIdentiferWithRelatedLinks(resource)) { if (resource.links) { - let related = resource.links.related; + const related = resource.links.related; return !related || typeof related === 'string' ? related : related.href; } } @@ -298,7 +296,7 @@ export default class HasManyReference { * @returns */ links(): PaginationLinks | null { - let resource = this._resource(); + const resource = this._resource(); return resource && resource.links ? resource.links : null; } @@ -345,7 +343,7 @@ export default class HasManyReference { */ meta() { let meta: Meta | null = null; - let resource = this._resource(); + const resource = this._resource(); if (resource && resource.meta && typeof resource.meta === 'object') { meta = resource.meta; } @@ -400,7 +398,7 @@ export default class HasManyReference { async push( objectOrPromise: ExistingResourceObject[] | CollectionResourceDocument | { data: SingleResourceDocument[] } ): Promise { - let payload = objectOrPromise; + const payload = objectOrPromise; let array: Array; if (!Array.isArray(payload) && typeof payload === 'object' && Array.isArray(payload.data)) { @@ -411,7 +409,7 @@ export default class HasManyReference { const { store } = this; - let identifiers = array.map((obj) => { + const identifiers = array.map((obj) => { let record: RecordInstance; if ('data' in obj) { // TODO deprecate pushing non-valid JSON:API here @@ -421,8 +419,8 @@ export default class HasManyReference { } if (DEBUG) { - let relationshipMeta = this.hasManyRelationship.definition; - let identifier = this.hasManyRelationship.identifier; + const relationshipMeta = this.hasManyRelationship.definition; + const identifier = this.hasManyRelationship.identifier; // eslint-disable-next-line @typescript-eslint/no-unsafe-call assertPolymorphicType(identifier, relationshipMeta, recordIdentifierFor(record), store); @@ -444,7 +442,7 @@ export default class HasManyReference { } _isLoaded() { - let hasRelationshipDataProperty = this.hasManyRelationship.state.hasReceivedData; + const hasRelationshipDataProperty = this.hasManyRelationship.state.hasReceivedData; if (!hasRelationshipDataProperty) { return false; } diff --git a/packages/model/src/-private/schema-provider.ts b/packages/model/src/-private/schema-provider.ts index 32bd56043f0..9f4b137e527 100644 --- a/packages/model/src/-private/schema-provider.ts +++ b/packages/model/src/-private/schema-provider.ts @@ -1,9 +1,8 @@ import { getOwner } from '@ember/application'; -import type { RecordIdentifier } from '@warp-drive/core/identifier'; - import type Store from '@ember-data/store'; -import type { AttributesSchema, RelationshipsSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { RecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; import type { FactoryCache, ModelFactory, ModelStore } from './model'; import Model from './model'; @@ -29,8 +28,8 @@ export class ModelSchemaProvider { attributes = this._attributesDefCache[type]; if (attributes === undefined) { - let modelClass = this.store.modelFor(type); - let attributeMap = modelClass.attributes; + const modelClass = this.store.modelFor(type); + const attributeMap = modelClass.attributes; attributes = Object.create(null) as AttributesSchema; attributeMap.forEach((meta, name) => (attributes[name] = meta)); @@ -48,7 +47,7 @@ export class ModelSchemaProvider { relationships = this._relationshipsDefCache[type]; if (relationships === undefined) { - let modelClass = this.store.modelFor(type) as typeof Model; + const modelClass = this.store.modelFor(type) as typeof Model; relationships = modelClass.relationshipsObject || null; this._relationshipsDefCache[type] = relationships; } @@ -89,10 +88,10 @@ export function getModelFactory(store: ModelStore, type: string): ModelFactory | return null; } - let klass = factory.class; + const klass = factory.class; if (klass.isModel) { - let hasOwnModelNameSet = klass.modelName && Object.prototype.hasOwnProperty.call(klass, 'modelName'); + const hasOwnModelNameSet = klass.modelName && Object.prototype.hasOwnProperty.call(klass, 'modelName'); if (!hasOwnModelNameSet) { Object.defineProperty(klass, 'modelName', { value: type }); } diff --git a/packages/model/src/-private/util.ts b/packages/model/src/-private/util.ts index 2a0a3a4c301..981542501a6 100644 --- a/packages/model/src/-private/util.ts +++ b/packages/model/src/-private/util.ts @@ -6,7 +6,7 @@ import { DEPRECATE_NON_STRICT_TYPES } from '@ember-data/deprecations'; export type DecoratorPropertyDescriptor = (PropertyDescriptor & { initializer?: () => unknown }) | undefined; export function isElementDescriptor(args: unknown[]): args is [object, string, DecoratorPropertyDescriptor] { - let [maybeTarget, maybeKey, maybeDesc] = args; + const [maybeTarget, maybeKey, maybeDesc] = args; return ( // Ensure we have the right number of args diff --git a/packages/model/tsconfig.json b/packages/model/tsconfig.json new file mode 100644 index 00000000000..e8e469a0712 --- /dev/null +++ b/packages/model/tsconfig.json @@ -0,0 +1,45 @@ +{ + "include": [ + "src/**/*", + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "experimentalDecorators": true, + "allowJs": false, + "noEmit": false, + "noImplicitAny": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types", + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/private-build-infra/package.json b/packages/private-build-infra/package.json index fc97a792698..906cabb2bc0 100644 --- a/packages/private-build-infra/package.json +++ b/packages/private-build-infra/package.json @@ -10,7 +10,9 @@ "license": "MIT", "author": "", "directories": {}, - "scripts": {}, + "scripts": { + "_syncPnpm": "pnpm sync-dependencies-meta-injected" + }, "dependencies": { "@babel/core": "^7.23.2", "@babel/plugin-transform-block-scoping": "^7.23.0", @@ -32,6 +34,7 @@ "ember-cli-version-checker": "^5.1.2", "git-repo-info": "^2.1.1", "npm-git-info": "^1.0.3", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "semver": "^7.5.4", "silent-error": "^1.1.1" }, @@ -42,4 +45,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/request-utils/.eslintrc.cjs b/packages/request-utils/.eslintrc.cjs new file mode 100644 index 00000000000..94f092444d8 --- /dev/null +++ b/packages/request-utils/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/request-utils/package.json b/packages/request-utils/package.json index a2ca36e8d27..cf1a8f9ef79 100644 --- a/packages/request-utils/package.json +++ b/packages/request-utils/package.json @@ -21,10 +21,15 @@ "volta": { "extends": "../../package.json" }, + "peerDependencies": { + "@warp-drive/core-types": "workspace:5.5.0-alpha.11" + }, "dependencies": { - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "files": [ + "unstable-preview-types", "addon-main.js", "addon", "README.md", @@ -32,11 +37,19 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + } + }, "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -54,14 +67,25 @@ "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", "@embroider/addon-dev": "^4.1.1", + "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0" }, "ember": { "edition": "octane" + }, + "dependenciesMeta": { + "@warp-drive/core-types": { + "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + } } -} \ No newline at end of file +} diff --git a/packages/request-utils/rollup.config.mjs b/packages/request-utils/rollup.config.mjs index b18f937141b..ac33c58f32b 100644 --- a/packages/request-utils/rollup.config.mjs +++ b/packages/request-utils/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: ['@ember/debug'], + external: external(['@ember/debug']), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/request-utils/src/index.ts b/packages/request-utils/src/index.ts index 4ef2f22395d..0a18cb127f8 100644 --- a/packages/request-utils/src/index.ts +++ b/packages/request-utils/src/index.ts @@ -1,7 +1,12 @@ import { assert } from '@ember/debug'; -import type Store from '@ember-data/store'; -import { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; +import type { Cache } from '@warp-drive/core-types/cache'; +import type { StableDocumentIdentifier } from '@warp-drive/core-types/identifier'; +import type { QueryParamsSerializationOptions, QueryParamsSource, Serializable } from '@warp-drive/core-types/params'; + +type Store = { + cache: Cache; +}; /** * Simple utility function to assist in url building, @@ -316,13 +321,6 @@ export function buildBaseURL(urlOptions: UrlOptions): string { return host ? url : `/${url}`; } -type SerializablePrimitive = string | number | boolean | null; -type Serializable = SerializablePrimitive | SerializablePrimitive[]; -export type QueryParamsSerializationOptions = { - arrayFormat?: 'bracket' | 'indices' | 'repeat' | 'comma'; -}; -export type QueryParamsSource = Record | URLSearchParams; - const DEFAULT_QUERY_PARAMS_SERIALIZATION_OPTIONS: QueryParamsSerializationOptions = { arrayFormat: 'comma', }; @@ -383,7 +381,7 @@ export function filterEmpty(source: Record): Record = paramsIsObject ? params : {}; @@ -413,7 +411,7 @@ export function sortQueryParams(params: QueryParamsSource, options?: QueryParams const value = dictionaryParams[key]; if (Array.isArray(value)) { value.sort(); - switch (options!.arrayFormat) { + switch (opts.arrayFormat) { case 'indices': value.forEach((v, i) => { urlParams.append(`${key}[${i}]`, String(v)); @@ -483,6 +481,8 @@ export interface CacheControlValue { 'stale-while-revalidate'?: number; } +type CacheControlKey = keyof CacheControlValue; + const NUMERIC_KEYS = new Set(['max-age', 's-maxage', 'stale-if-error', 'stale-while-revalidate']); /** @@ -514,10 +514,10 @@ const NUMERIC_KEYS = new Set(['max-age', 's-maxage', 'stale-if-error', 'stale-wh * @returns {CacheControlValue} */ export function parseCacheControl(header: string): CacheControlValue { - let key = ''; + let key: CacheControlKey = '' as CacheControlKey; let value = ''; let isParsingKey = true; - let cacheControlValue: CacheControlValue = {}; + const cacheControlValue: CacheControlValue = {}; function parseCacheControlValue(stringToParse: string): number { const parsedValue = Number.parseInt(stringToParse); @@ -526,7 +526,7 @@ export function parseCacheControl(header: string): CacheControlValue { } for (let i = 0; i < header.length; i++) { - let char = header.charAt(i); + const char = header.charAt(i); if (char === ',') { assert(`Invalid Cache-Control value, expected a value`, !isParsingKey || !NUMERIC_KEYS.has(key)); assert( @@ -534,8 +534,9 @@ export function parseCacheControl(header: string): CacheControlValue { i === 0 || header.charAt(i - 1) !== '=' ); isParsingKey = true; + // @ts-expect-error TS incorrectly thinks that optional keys must have a type that includes undefined cacheControlValue[key] = NUMERIC_KEYS.has(key) ? parseCacheControlValue(value) : true; - key = ''; + key = '' as CacheControlKey; value = ''; continue; } else if (char === '=') { @@ -550,6 +551,7 @@ export function parseCacheControl(header: string): CacheControlValue { } if (i === header.length - 1) { + // @ts-expect-error TS incorrectly thinks that optional keys must have a type that includes undefined cacheControlValue[key] = NUMERIC_KEYS.has(key) ? parseCacheControlValue(value) : true; } } diff --git a/packages/request-utils/tsconfig.json b/packages/request-utils/tsconfig.json new file mode 100644 index 00000000000..8a1d4a8f6d3 --- /dev/null +++ b/packages/request-utils/tsconfig.json @@ -0,0 +1,46 @@ +{ + "include": ["src/**/*"], + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "skipLibCheck": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "noEmit": false, + "allowJs": false, + "checkJs": false, + + "alwaysStrict": true, + "strict": true, + "allowSyntheticDefaultImports": true, + + "noImplicitAny": true, + "noImplicitThis": true, + "strictBindCallApply": true, + "strictFunctionTypes": true, + "strictPropertyInitialization": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "noEmitOnError": false, + "strictNullChecks": true, + "noErrorTruncation": true, + "preserveConstEnums": false, + "experimentalDecorators": true, + "pretty": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "inlineSourceMap": true, + "inlineSources": true, + + "baseUrl": "src", + "types": [ + "ember-source/types" + ] + } +} \ No newline at end of file diff --git a/packages/request/.eslintrc.cjs b/packages/request/.eslintrc.cjs new file mode 100644 index 00000000000..94f092444d8 --- /dev/null +++ b/packages/request/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/request/package.json b/packages/request/package.json index b4134e66b06..0e2188c3cd7 100644 --- a/packages/request/package.json +++ b/packages/request/package.json @@ -15,12 +15,12 @@ "ember-addon" ], "scripts": { + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", "build:types": "tsc --build --force", "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", "build": "pnpm build:client && pnpm build:types", - "start": "rollup --config --watch", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "files": [ "unstable-preview-types", @@ -41,15 +41,25 @@ "default": "./addon/*.js" } }, + "peerDependencies": { + "@warp-drive/core-types": "workspace:5.5.0-alpha.11" + }, "dependencies": { "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@ember/test-waiters": "^3.0.2", "@embroider/macros": "^1.13.2", - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "dependenciesMeta": { "@ember-data/private-build-infra": { "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@warp-drive/internal-config": { + "injected": true } }, "devDependencies": { @@ -64,10 +74,13 @@ "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", "@embroider/addon-dev": "^4.1.1", + "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0" }, @@ -85,4 +98,4 @@ "ember": { "edition": "octane" } -} \ No newline at end of file +} diff --git a/packages/request/rollup.config.mjs b/packages/request/rollup.config.mjs index c091dbcf7a5..8edbc126428 100644 --- a/packages/request/rollup.config.mjs +++ b/packages/request/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: ['@embroider/macros', '@ember/test-waiters'], + external: external(['@embroider/macros', '@ember/test-waiters']), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/request/src/-private/context.ts b/packages/request/src/-private/context.ts index aab863baec4..63c6c0220be 100644 --- a/packages/request/src/-private/context.ts +++ b/packages/request/src/-private/context.ts @@ -1,9 +1,10 @@ import { DEBUG } from '@ember-data/env'; +import type { ImmutableHeaders, ImmutableRequestInfo, RequestInfo, ResponseInfo } from '@warp-drive/core-types/request'; +import { SkipCache } from '@warp-drive/core-types/request'; import { deepFreeze } from './debug'; import { createDeferred } from './future'; -import type { Deferred, GodContext, ImmutableHeaders, ImmutableRequestInfo, RequestInfo, ResponseInfo } from './types'; -import { SkipCache } from './types'; +import type { Deferred, GodContext } from './types'; export function cloneResponseProperties(response: Response): ResponseInfo { const { headers, ok, redirected, status, statusText, type, url } = response; diff --git a/packages/request/src/-private/debug.ts b/packages/request/src/-private/debug.ts index c0a35b87609..4dea2273e12 100644 --- a/packages/request/src/-private/debug.ts +++ b/packages/request/src/-private/debug.ts @@ -1,7 +1,7 @@ import { DEBUG } from '@ember-data/env'; import { Context } from './context'; -import type { ImmutableHeaders, RequestInfo } from './types'; +import type { ImmutableHeaders, RequestInfo } from '@warp-drive/core-types/request'; const BODY_TYPES = { type: 'string', diff --git a/packages/request/src/-private/future.ts b/packages/request/src/-private/future.ts index bc86d9d333a..ca12794b5e9 100644 --- a/packages/request/src/-private/future.ts +++ b/packages/request/src/-private/future.ts @@ -1,5 +1,7 @@ +import { IS_FUTURE, type StructuredDocument } from '@warp-drive/core-types/request'; + import type { ContextOwner } from './context'; -import { IS_FUTURE, type Deferred, type DeferredFuture, type Future, type StructuredDocument } from './types'; +import { type Deferred, type DeferredFuture, type Future } from './types'; import { enhanceReason } from './utils'; export function isFuture(maybe: unknown): maybe is Future { @@ -9,7 +11,7 @@ export function isFuture(maybe: unknown): maybe is Future { export function createDeferred(): Deferred { let resolve!: (v: T) => void; let reject!: (v: unknown) => void; - let promise = new Promise((res, rej) => { + const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); diff --git a/packages/request/src/-private/manager.ts b/packages/request/src/-private/manager.ts index 257de384c75..1d4591c38ec 100644 --- a/packages/request/src/-private/manager.ts +++ b/packages/request/src/-private/manager.ts @@ -405,10 +405,11 @@ For usage of the store's `requestManager` via `store.request()` see the [St import { importSync } from '@embroider/macros'; import { DEBUG, TESTING } from '@ember-data/env'; +import type { RequestInfo } from '@warp-drive/core-types/request'; import { assertValidRequest } from './debug'; import { upgradePromise } from './future'; -import { Future, GenericCreateArgs, Handler, RequestInfo } from './types'; +import type { Future, GenericCreateArgs, Handler } from './types'; import { executeNextHandler } from './utils'; let REQ_ID = 0; @@ -582,7 +583,7 @@ export class RequestManager { if (request.controller) { delete request.controller; } - let promise = executeNextHandler(handlers, request, 0, { + const promise = executeNextHandler(handlers, request, 0, { controller, response: null, stream: null, diff --git a/packages/request/src/-private/types.ts b/packages/request/src/-private/types.ts index 2dc53603977..577a7775c6d 100644 --- a/packages/request/src/-private/types.ts +++ b/packages/request/src/-private/types.ts @@ -1,57 +1,16 @@ /* eslint-disable no-irregular-whitespace */ + +import type { + IS_FUTURE, + RequestContext, + RequestInfo, + ResponseInfo, + StructuredDataDocument, +} from '@warp-drive/core-types/request'; + /** * @module @ember-data/request */ - -// TODO use the real type once it is shipped -interface StableRecordIdentifier { - type: string; - id: string | null; - lid: string; -} - - -// TODO use the real type once it is shipped -type Store = unknown; - -export const IS_FUTURE = Symbol('IS_FUTURE'); -export const STRUCTURED = Symbol('DOC'); -export const SkipCache = Symbol.for('ember-data:skip-cache'); - -export type HTTPMethod = 'GET' | 'OPTIONS' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'; - -interface Request { - controller?: AbortController; - /* Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */ - cache?: RequestCache; - /* Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */ - credentials?: RequestCredentials; - /* Returns the kind of resource requested by request, e.g., "document" or "script". */ - destination?: RequestDestination; - /* Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the "Host" header. */ - headers?: Headers; - /* Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */ - integrity?: string; - /* Returns a boolean indicating whether or not request can outlive the global in which it was created. */ - keepalive?: boolean; - /* Returns request's HTTP method, which is "GET" by default. */ - method?: HTTPMethod; - /* Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */ - mode?: RequestMode; - /* Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */ - redirect?: RequestRedirect; - /* Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and "about:client" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */ - referrer?: string; - /* Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */ - referrerPolicy?: ReferrerPolicy; - /* Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */ - signal?: AbortSignal; - /* Returns the URL of request as a string. */ - url?: string; - body?: BodyInit | null; -} - -export type ImmutableHeaders = Headers & { clone?(): Headers; toJSON(): [string, string][] }; export interface GodContext { controller: AbortController; response: ResponseInfo | null; @@ -59,20 +18,6 @@ export interface GodContext { id: number; } -export interface StructuredDataDocument { - [STRUCTURED]?: true; - request: ImmutableRequestInfo; - response: Response | ResponseInfo | null; - content: T; -} -export interface StructuredErrorDocument extends Error { - [STRUCTURED]?: true; - request: ImmutableRequestInfo; - response: Response | ResponseInfo | null; - error: string | object; - content?: T; -} - export type Deferred = { resolve(v: T): void; reject(v: unknown): void; @@ -126,95 +71,6 @@ export type DeferredFuture = { promise: Future; }; -export interface RequestInfo extends Request { - cacheOptions?: { key?: string; reload?: boolean; backgroundReload?: boolean; [SkipCache]?: true }; - store?: Store; - - op?: string; - records?: StableRecordIdentifier[]; - - disableTestWaiter?: boolean; - /* - * data that a handler should convert into - * the query (GET) or body (POST) - */ - data?: Record; - /* - * options specifically intended for handlers - * to utilize to process the request - */ - options?: Record; -} - -export interface ImmutableRequestInfo { - readonly cacheOptions?: { - key?: string; - reload?: boolean; - backgroundReload?: boolean; - [SkipCache]?: true; - }; - readonly store?: Store; - - readonly op?: string; - readonly records?: StableRecordIdentifier[]; - - readonly disableTestWaiter?: boolean; - /* Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */ - readonly cache?: RequestCache; - /* Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */ - readonly credentials?: RequestCredentials; - /* Returns the kind of resource requested by request, e.g., "document" or "script". */ - readonly destination?: RequestDestination; - /* Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the "Host" header. */ - readonly headers?: Headers & { clone?(): Headers }; - /* Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */ - readonly integrity?: string; - /* Returns a boolean indicating whether or not request can outlive the global in which it was created. */ - readonly keepalive?: boolean; - /* Returns request's HTTP method, which is "GET" by default. */ - readonly method?: HTTPMethod; - /* Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */ - readonly mode?: RequestMode; - /* Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */ - readonly redirect?: RequestRedirect; - /* Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and "about:client" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */ - readonly referrer?: string; - /* Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */ - readonly referrerPolicy?: ReferrerPolicy; - /* Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */ - readonly signal?: AbortSignal; - /* Returns the URL of request as a string. */ - readonly url?: string; - /* - * data that a handler should convert into - * the query (GET) or body (POST) - */ - readonly data?: Record; - /* - * options specifically intended for handlers - * to utilize to process the request - */ - readonly options?: Record; -} - -export interface ResponseInfo { - readonly headers: ImmutableHeaders; // to do, maybe not this? - readonly ok: boolean; - readonly redirected: boolean; - readonly status: number; - readonly statusText: string; - readonly type: string; - readonly url: string; -} - -export interface RequestContext { - request: ImmutableRequestInfo; - id: number; - - setStream(stream: ReadableStream): void; - setResponse(response: Response | ResponseInfo): void; -} - export type NextFn

= (req: RequestInfo) => Future

; /** @@ -348,4 +204,3 @@ export interface RequestResponse { } export type GenericCreateArgs = Record; -export type StructuredDocument = StructuredDataDocument | StructuredErrorDocument; diff --git a/packages/request/src/-private/utils.ts b/packages/request/src/-private/utils.ts index 3dfa271e870..f1ae33e69d5 100644 --- a/packages/request/src/-private/utils.ts +++ b/packages/request/src/-private/utils.ts @@ -1,18 +1,15 @@ import { DEBUG } from '@ember-data/env'; - -import { Context, ContextOwner } from './context'; -import { assertValidRequest } from './debug'; -import { createFuture, isFuture } from './future'; import { - STRUCTURED, - type DeferredFuture, - type Future, - type GodContext, - type Handler, type RequestInfo, + STRUCTURED, type StructuredDataDocument, type StructuredErrorDocument, -} from './types'; +} from '@warp-drive/core-types/request'; + +import { Context, ContextOwner } from './context'; +import { assertValidRequest } from './debug'; +import { createFuture, isFuture } from './future'; +import { type DeferredFuture, type Future, type GodContext, type Handler } from './types'; export function curryFuture(owner: ContextOwner, inbound: Future, outbound: DeferredFuture): Future { owner.setStream(inbound.getStream()); @@ -71,14 +68,16 @@ export function enhanceReason(reason?: string) { return new DOMException(reason || 'The user aborted a request.', 'AbortError'); } -export function handleOutcome(owner: ContextOwner, inbound: Promise>, outbound: DeferredFuture): Future { +export function handleOutcome( + owner: ContextOwner, + inbound: Promise>, + outbound: DeferredFuture +): Future { inbound.then( (content: T | StructuredDataDocument) => { if (owner.controller.signal.aborted) { // the next function did not respect the signal, we handle it here - outbound.reject( - enhanceReason(owner.controller.signal.reason as string) - ); + outbound.reject(enhanceReason(owner.controller.signal.reason as string)); return; } if (isDoc(content)) { diff --git a/packages/request/src/fetch.ts b/packages/request/src/fetch.ts index e97e8b9c1a6..63a51c5d223 100644 --- a/packages/request/src/fetch.ts +++ b/packages/request/src/fetch.ts @@ -12,14 +12,13 @@ * @main @ember-data/request/fetch */ import type { HttpErrorProps } from '-private/utils'; + import { cloneResponseProperties, type Context } from './-private/context'; const _fetch: typeof fetch = typeof fetch !== 'undefined' ? fetch - // @ts-expect-error FastBoot is untyped : typeof FastBoot !== 'undefined' - // @ts-expect-error FastBoot is untyped ? (FastBoot.require('node-fetch') as typeof fetch) : ((() => { throw new Error('No Fetch Implementation Found'); @@ -105,9 +104,9 @@ const Fetch = { (e as unknown as HttpErrorProps).status = 20; (e as unknown as HttpErrorProps).isRequestError = true; } else { - (e as unknown as HttpErrorProps).statusText = 'Unknown Network Error'; - (e as unknown as HttpErrorProps).status = 0; - (e as unknown as HttpErrorProps).isRequestError = true; + (e as HttpErrorProps).statusText = 'Unknown Network Error'; + (e as HttpErrorProps).status = 0; + (e as HttpErrorProps).isRequestError = true; } throw e; } @@ -134,14 +133,17 @@ const Fetch = { // void; } // attempt errors discovery - const errors = - Array.isArray(errorPayload) ? errorPayload - : isDict(errorPayload) && Array.isArray(errorPayload.errors) ? errorPayload.errors + const errors = Array.isArray(errorPayload) + ? errorPayload + : isDict(errorPayload) && Array.isArray(errorPayload.errors) + ? errorPayload.errors : null; const msg = `[${response.status}] ${response.statusText ? response.statusText + ' ' : ''}- ${response.url}`; - const error = (errors ? new AggregateError(errors, msg) : new Error(msg)) as Error & { content: object | undefined } & HttpErrorProps; + const error = (errors ? new AggregateError(errors, msg) : new Error(msg)) as Error & { + content: object | undefined; + } & HttpErrorProps; error.status = response.status; error.statusText = response.statusText || ERROR_STATUS_CODE_FOR.get(response.status) || 'Unknown Request Error'; error.isRequestError = true; diff --git a/packages/request/src/index.ts b/packages/request/src/index.ts index 71efe9e9751..405e94c9ae4 100644 --- a/packages/request/src/index.ts +++ b/packages/request/src/index.ts @@ -1,3 +1,12 @@ export { RequestManager as default } from './-private/manager'; export { createDeferred } from './-private/future'; -export type { Future, Handler, NextFn, RequestContext, ImmutableRequestInfo, RequestInfo, ResponseInfo, StructuredDocument, StructuredErrorDocument, StructuredDataDocument } from './-private/types'; +export type { Future, Handler, NextFn } from './-private/types'; +export type { + RequestContext, + ImmutableRequestInfo, + RequestInfo, + ResponseInfo, + StructuredDocument, + StructuredErrorDocument, + StructuredDataDocument, +} from '@warp-drive/core-types/request'; diff --git a/packages/request/tsconfig.json b/packages/request/tsconfig.json index 1e0f082ec36..713e8aaf873 100644 --- a/packages/request/tsconfig.json +++ b/packages/request/tsconfig.json @@ -1,21 +1,15 @@ { - "include": ["src/**/*"], + "include": ["src/**/*", "../../@types/fastboot"], "compilerOptions": { - "target": "ES2022", - "module": "ES2020", - "moduleResolution": "node", + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", "skipLibCheck": true, "declarationDir": "unstable-preview-types", "emitDeclarationOnly": true, "noEmit": false, - - // Enable faster builds - // but causes us to not rebuild properly - "incremental": false, - "allowJs": false, "checkJs": false, - "alwaysStrict": true, "strict": true, "allowSyntheticDefaultImports": true, @@ -34,8 +28,10 @@ "experimentalDecorators": true, "pretty": true, - // Support generation of source maps. Note: you must *also* enable source - // maps in your `ember-cli-babel` config and/or `babel.config.js`. + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + "declaration": true, "declarationMap": true, "inlineSourceMap": true, diff --git a/packages/rest/.eslintrc.cjs b/packages/rest/.eslintrc.cjs new file mode 100644 index 00000000000..440b732b749 --- /dev/null +++ b/packages/rest/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug', 'ember-inflector', '@ember/string'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/rest/package.json b/packages/rest/package.json index 0c550938667..5aa21dcec74 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -22,22 +22,18 @@ "extends": "../../package.json" }, "dependencies": { - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "peerDependencies": { + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/store": "^4.12.0 || ^5.0.0", "@ember/string": "^3.1.1", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-inflector": "^4.0.2" }, - "dependenciesMeta": { - "@ember/string": { - "injected": true - }, - "@ember-data/store": { - "injected": true - } - }, "files": [ + "unstable-preview-types", "addon-main.js", "addon", "README.md", @@ -45,11 +41,19 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -66,15 +70,50 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", + "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-inflector": "^4.0.2", + "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0" }, "ember": { "edition": "octane" + }, + "dependenciesMeta": { + "@warp-drive/internal-config": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "@ember-data/store": { + "injected": true + }, + "@ember-data/request-utils": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true + } } -} \ No newline at end of file +} diff --git a/packages/rest/rollup.config.mjs b/packages/rest/rollup.config.mjs index 095095d3db1..683b7c9b8b0 100644 --- a/packages/rest/rollup.config.mjs +++ b/packages/rest/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: ['@ember/debug', '@ember-data/request-utils', 'ember-inflector', '@ember/string', '@ember-data/store'], + external: external(['@ember/debug']), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/rest/src/-private/builders/-utils.ts b/packages/rest/src/-private/builders/-utils.ts index 0f41ea281a5..9cae4d3439b 100644 --- a/packages/rest/src/-private/builders/-utils.ts +++ b/packages/rest/src/-private/builders/-utils.ts @@ -1,5 +1,5 @@ import { type UrlOptions } from '@ember-data/request-utils'; -import type { CacheOptions, ConstrainedRequestOptions } from '@ember-data/store/-types/request'; +import type { CacheOptions, ConstrainedRequestOptions } from '@warp-drive/core-types/request'; export function copyForwardUrlOptions(urlOptions: UrlOptions, options: ConstrainedRequestOptions): void { if ('host' in options) { diff --git a/packages/rest/src/-private/builders/find-record.ts b/packages/rest/src/-private/builders/find-record.ts index 7056d1d779e..8a9b02a690e 100644 --- a/packages/rest/src/-private/builders/find-record.ts +++ b/packages/rest/src/-private/builders/find-record.ts @@ -10,7 +10,7 @@ import type { ConstrainedRequestOptions, FindRecordRequestOptions, RemotelyAccessibleIdentifier, -} from '@ember-data/store/-types/request'; +} from '@warp-drive/core-types/request'; import { copyForwardUrlOptions, extractCacheOptions } from './-utils'; @@ -87,7 +87,7 @@ export function findRecord( arg3?: FindRecordOptions ): FindRecordRequestOptions { const identifier: RemotelyAccessibleIdentifier = typeof arg1 === 'string' ? { type: arg1, id: arg2 as string } : arg1; - const options = ((typeof arg1 === 'string' ? arg3 : arg2) || {}) as FindRecordOptions; + const options: FindRecordOptions = (typeof arg1 === 'string' ? arg3 : (arg2 as FindRecordOptions)) || {}; const cacheOptions = extractCacheOptions(options); const urlOptions: FindRecordUrlOptions = { identifier, diff --git a/packages/rest/src/-private/builders/query.ts b/packages/rest/src/-private/builders/query.ts index e66df23a0ff..17fa338a032 100644 --- a/packages/rest/src/-private/builders/query.ts +++ b/packages/rest/src/-private/builders/query.ts @@ -5,8 +5,9 @@ import { camelize } from '@ember/string'; import { pluralize } from 'ember-inflector'; -import { buildBaseURL, buildQueryParams, QueryParamsSource, type QueryUrlOptions } from '@ember-data/request-utils'; -import type { ConstrainedRequestOptions, QueryRequestOptions } from '@ember-data/store/-types/request'; +import { buildBaseURL, buildQueryParams, type QueryUrlOptions } from '@ember-data/request-utils'; +import type { QueryParamsSource } from '@warp-drive/core-types/params'; +import type { ConstrainedRequestOptions, QueryRequestOptions } from '@warp-drive/core-types/request'; import { copyForwardUrlOptions, extractCacheOptions } from './-utils'; diff --git a/packages/rest/src/-private/builders/save-record.ts b/packages/rest/src/-private/builders/save-record.ts index 3454fe480f6..2417dc5d02e 100644 --- a/packages/rest/src/-private/builders/save-record.ts +++ b/packages/rest/src/-private/builders/save-record.ts @@ -1,8 +1,6 @@ import { assert } from '@ember/debug'; import { camelize } from '@ember/string'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { pluralize } from 'ember-inflector'; import { @@ -12,12 +10,13 @@ import { type UpdateRecordUrlOptions, } from '@ember-data/request-utils'; import { recordIdentifierFor } from '@ember-data/store'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { ConstrainedRequestOptions, CreateRequestOptions, DeleteRequestOptions, UpdateRequestOptions, -} from '@ember-data/store/-types/request'; +} from '@warp-drive/core-types/request'; import { copyForwardUrlOptions } from './-utils'; diff --git a/packages/rest/tsconfig.json b/packages/rest/tsconfig.json new file mode 100644 index 00000000000..d8fb47fd0f5 --- /dev/null +++ b/packages/rest/tsconfig.json @@ -0,0 +1,43 @@ +{ + "include": [ + "src/**/*" + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types", + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/schema-record/package.json b/packages/schema-record/package.json index 233d57984b8..67e84ccd700 100644 --- a/packages/schema-record/package.json +++ b/packages/schema-record/package.json @@ -18,7 +18,7 @@ "build": "pnpm build:client", "start": "rollup --config --watch", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -33,7 +33,6 @@ "NCC-1701-a.svg", "NCC-1701-a-blue.svg" ], - "peerDependencies": {}, "dependenciesMeta": { "@ember-data/private-build-infra": { "injected": true @@ -43,7 +42,8 @@ "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.13.2", - "ember-cli-babel": "^8.2.0" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -60,9 +60,9 @@ "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" @@ -77,4 +77,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/schema-record/rollup.config.mjs b/packages/schema-record/rollup.config.mjs index efab9538ee8..fe06fbccc5e 100644 --- a/packages/schema-record/rollup.config.mjs +++ b/packages/schema-record/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,7 +14,7 @@ export default { // You can augment this if you need to. output: addon.output(), - external: ['@embroider/macros'], + external: external(['@embroider/macros']), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/schema-record/src/hooks.ts b/packages/schema-record/src/hooks.ts index b7320999feb..65220ce6303 100644 --- a/packages/schema-record/src/hooks.ts +++ b/packages/schema-record/src/hooks.ts @@ -1,5 +1,5 @@ import type Store from '@ember-data/store'; -import type { StableRecordIdentifier } from "@warp-drive/core"; +import type { StableRecordIdentifier } from "@warp-drive/core-types"; import { Destroy, SchemaRecord } from './record'; export function instantiateRecord(store: Store, identifier: StableRecordIdentifier, createArgs?: Record): SchemaRecord { diff --git a/packages/schema-record/src/record.ts b/packages/schema-record/src/record.ts index e346b13f64b..cef35fd8789 100644 --- a/packages/schema-record/src/record.ts +++ b/packages/schema-record/src/record.ts @@ -1,8 +1,8 @@ import type Store from '@ember-data/store'; -import type { StableRecordIdentifier } from "@warp-drive/core"; +import type { StableRecordIdentifier } from "@warp-drive/core-types"; import type { FieldSchema, SchemaService } from './schema'; import { Cache } from '@ember-data/store/-types/q/cache'; -import { Link, Links, SingleResourceRelationship } from '@ember-data/store/-types/q/ember-data-json-api'; +import { Link, Links, SingleResourceRelationship } from '@warp-drive/core-types/spec/raw'; import { StoreRequestInput } from '@ember-data/store/-private/cache-handler'; import { Future } from '@ember-data/request'; import { DEBUG } from '@ember-data/env'; diff --git a/packages/schema-record/src/schema.ts b/packages/schema-record/src/schema.ts index 1a28f6e4a01..f9a543f0741 100644 --- a/packages/schema-record/src/schema.ts +++ b/packages/schema-record/src/schema.ts @@ -1,5 +1,5 @@ -import type { StableRecordIdentifier } from "@warp-drive/core"; -import type { AttributeSchema, RelationshipSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { StableRecordIdentifier } from "@warp-drive/core-types"; +import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; import type { SchemaRecord } from "./record"; export const Destroy = Symbol('Destroy'); diff --git a/packages/schema/package.json b/packages/schema/package.json index 23f118e401b..c468ff5158c 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -24,7 +24,8 @@ "build:parse": "bun build src/parse.ts --compile --outfile parse", "build:scaffold": "bun build src/scaffold.ts --compile --outfile scaffold", "build": "pnpm run build:parse && pnpm run build:scaffold", - "prepack": "pnpm build" + "prepack": "pnpm build", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "files": [ "README.md", @@ -41,7 +42,8 @@ "typescript": "^5.2.2" }, "dependencies": { - "chalk": "^5.3.0" + "chalk": "^5.3.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "devDependencies": { "bun-types": "1.0.6" @@ -53,4 +55,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/schema/parse b/packages/schema/parse index 997d67d9a01..32b77745d47 100755 Binary files a/packages/schema/parse and b/packages/schema/parse differ diff --git a/packages/schema/scaffold b/packages/schema/scaffold index e1e5e81b764..55903359ffc 100755 Binary files a/packages/schema/scaffold and b/packages/schema/scaffold differ diff --git a/packages/serializer/.eslintrc.cjs b/packages/serializer/.eslintrc.cjs new file mode 100644 index 00000000000..42992c36c96 --- /dev/null +++ b/packages/serializer/.eslintrc.cjs @@ -0,0 +1,34 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: [ + 'ember-inflector', + '@ember/application', + '@ember/service', + '@ember/debug', + '@ember/object', + '@ember/string', + '@ember/object/mixin', + ], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/serializer/package.json b/packages/serializer/package.json index 17fa1337707..c5a86cad176 100644 --- a/packages/serializer/package.json +++ b/packages/serializer/package.json @@ -14,10 +14,12 @@ "author": "", "directories": {}, "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:types": "tsc --build --force", + "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build": "pnpm build:client && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.js", @@ -25,6 +27,7 @@ "version": 1 }, "files": [ + "unstable-preview-types", "blueprints", "addon-main.js", "addon", @@ -33,23 +36,53 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, "peerDependencies": { "@ember/string": "^3.1.1", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-inflector": "^4.0.2" }, "dependenciesMeta": { "@ember-data/private-build-infra": { "injected": true }, + "@warp-drive/internal-config": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, "@ember/string": { "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/store": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true } }, "dependencies": { "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@embroider/macros": "^1.13.2", "ember-cli-babel": "^8.2.0", - "ember-cli-test-info": "^1.0.0" + "ember-cli-test-info": "^1.0.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -62,14 +95,19 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/request": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", + "ember-inflector": "^4.0.2", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" @@ -81,4 +119,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/serializer/rollup.config.mjs b/packages/serializer/rollup.config.mjs index d8a058df59b..4b47deb82c4 100644 --- a/packages/serializer/rollup.config.mjs +++ b/packages/serializer/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,19 +14,16 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [ + external: external([ '@embroider/macros', '@ember/service', '@ember/object', '@ember/application', - '@ember/string', '@ember/debug', '@ember/polyfills', '@ember/array', '@ember/object/mixin', - '@ember/string', - 'ember-inflector', - ], + ]), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/serializer/src/-private/embedded-records-mixin.js b/packages/serializer/src/-private/embedded-records-mixin.js index d16a36de861..3cda0a3945c 100644 --- a/packages/serializer/src/-private/embedded-records-mixin.js +++ b/packages/serializer/src/-private/embedded-records-mixin.js @@ -1,4 +1,3 @@ -import { A } from '@ember/array'; import { warn } from '@ember/debug'; import Mixin from '@ember/object/mixin'; import { camelize } from '@ember/string'; @@ -131,7 +130,7 @@ export default Mixin.create({ @return {Object} the normalized hash **/ normalize(typeClass, hash, prop) { - let normalizedHash = this._super(typeClass, hash, prop); + const normalizedHash = this._super(typeClass, hash, prop); return this._extractEmbeddedRecords(this, this.store, typeClass, normalizedHash); }, @@ -201,16 +200,16 @@ export default Mixin.create({ @param {Object} relationship */ serializeBelongsTo(snapshot, json, relationship) { - let attr = relationship.name; + const attr = relationship.name; if (this.noSerializeOptionSpecified(attr)) { this._super(snapshot, json, relationship); return; } - let includeIds = this.hasSerializeIdsOption(attr); - let includeRecords = this.hasSerializeRecordsOption(attr); - let embeddedSnapshot = snapshot.belongsTo(attr); + const includeIds = this.hasSerializeIdsOption(attr); + const includeRecords = this.hasSerializeRecordsOption(attr); + const embeddedSnapshot = snapshot.belongsTo(attr); if (includeIds) { - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let serializedKey = this._getMappedKey(relationship.name, schema); if (serializedKey === relationship.name && this.keyForRelationship) { serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize'); @@ -231,8 +230,8 @@ export default Mixin.create({ }, _serializeEmbeddedBelongsTo(snapshot, json, relationship) { - let embeddedSnapshot = snapshot.belongsTo(relationship.name); - let schema = this.store.modelFor(snapshot.modelName); + const embeddedSnapshot = snapshot.belongsTo(relationship.name); + const schema = this.store.modelFor(snapshot.modelName); let serializedKey = this._getMappedKey(relationship.name, schema); if (serializedKey === relationship.name && this.keyForRelationship) { serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize'); @@ -389,14 +388,14 @@ export default Mixin.create({ @param {Object} relationship */ serializeHasMany(snapshot, json, relationship) { - let attr = relationship.name; + const attr = relationship.name; if (this.noSerializeOptionSpecified(attr)) { this._super(snapshot, json, relationship); return; } if (this.hasSerializeIdsOption(attr)) { - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let serializedKey = this._getMappedKey(relationship.name, schema); if (serializedKey === relationship.name && this.keyForRelationship) { serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize'); @@ -421,10 +420,10 @@ export default Mixin.create({ TODO: Make the default in Ember-data 3.0?? */ _serializeHasManyAsIdsAndTypes(snapshot, json, relationship) { - let serializedKey = this.keyForAttribute(relationship.name, 'serialize'); - let hasMany = snapshot.hasMany(relationship.name); + const serializedKey = this.keyForAttribute(relationship.name, 'serialize'); + const hasMany = snapshot.hasMany(relationship.name) || []; - json[serializedKey] = A(hasMany).map(function (recordSnapshot) { + json[serializedKey] = hasMany.map(function (recordSnapshot) { // // I'm sure I'm being utterly naive here. Probably id is a configurable property and // type too, and the modelName has to be normalized somehow. @@ -434,7 +433,7 @@ export default Mixin.create({ }, _serializeEmbeddedHasMany(snapshot, json, relationship) { - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let serializedKey = this._getMappedKey(relationship.name, schema); if (serializedKey === relationship.name && this.keyForRelationship) { serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize'); @@ -453,13 +452,12 @@ export default Mixin.create({ Returns an array of embedded records serialized to JSON */ _generateSerializedHasMany(snapshot, relationship) { - let hasMany = snapshot.hasMany(relationship.name); - let manyArray = A(hasMany); - let ret = new Array(manyArray.length); + const hasMany = snapshot.hasMany(relationship.name) || []; + const ret = new Array(hasMany.length); - for (let i = 0; i < manyArray.length; i++) { - let embeddedSnapshot = manyArray[i]; - let embeddedJson = embeddedSnapshot.serialize({ includeId: true }); + for (let i = 0; i < hasMany.length; i++) { + const embeddedSnapshot = hasMany[i]; + const embeddedJson = embeddedSnapshot.serialize({ includeId: true }); this.removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, embeddedJson); ret[i] = embeddedJson; } @@ -486,12 +484,12 @@ export default Mixin.create({ */ removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, json) { if (relationship.kind === 'belongsTo') { - let schema = this.store.modelFor(snapshot.modelName); - let parentRecord = schema.inverseFor(relationship.name, this.store); + const schema = this.store.modelFor(snapshot.modelName); + const parentRecord = schema.inverseFor(relationship.name, this.store); if (parentRecord) { - let name = parentRecord.name; - let embeddedSerializer = this.store.serializerFor(embeddedSnapshot.modelName); - let parentKey = embeddedSerializer.keyForRelationship(name, parentRecord.kind, 'deserialize'); + const name = parentRecord.name; + const embeddedSerializer = this.store.serializerFor(embeddedSnapshot.modelName); + const parentKey = embeddedSerializer.keyForRelationship(name, parentRecord.kind, 'deserialize'); if (parentKey) { delete json[parentKey]; } @@ -503,32 +501,32 @@ export default Mixin.create({ // checks config for attrs option to embedded (always) - serialize and deserialize hasEmbeddedAlwaysOption(attr) { - let option = this.attrsOption(attr); + const option = this.attrsOption(attr); return option && option.embedded === 'always'; }, // checks config for attrs option to serialize ids hasSerializeRecordsOption(attr) { - let alwaysEmbed = this.hasEmbeddedAlwaysOption(attr); - let option = this.attrsOption(attr); + const alwaysEmbed = this.hasEmbeddedAlwaysOption(attr); + const option = this.attrsOption(attr); return alwaysEmbed || (option && option.serialize === 'records'); }, // checks config for attrs option to serialize records hasSerializeIdsOption(attr) { - let option = this.attrsOption(attr); + const option = this.attrsOption(attr); return option && (option.serialize === 'ids' || option.serialize === 'id'); }, // checks config for attrs option to serialize records as objects containing id and types hasSerializeIdsAndTypesOption(attr) { - let option = this.attrsOption(attr); + const option = this.attrsOption(attr); return option && (option.serialize === 'ids-and-types' || option.serialize === 'id-and-type'); }, // checks config for attrs option to serialize records noSerializeOptionSpecified(attr) { - let option = this.attrsOption(attr); + const option = this.attrsOption(attr); return !(option && (option.serialize || option.embedded)); }, @@ -536,13 +534,13 @@ export default Mixin.create({ // a defined option object for a resource is treated the same as // `deserialize: 'records'` hasDeserializeRecordsOption(attr) { - let alwaysEmbed = this.hasEmbeddedAlwaysOption(attr); - let option = this.attrsOption(attr); + const alwaysEmbed = this.hasEmbeddedAlwaysOption(attr); + const option = this.attrsOption(attr); return alwaysEmbed || (option && option.deserialize === 'records'); }, attrsOption(attr) { - let attrs = this.attrs; + const attrs = this.attrs; return attrs && (attrs[camelize(attr)] || attrs[attr]); }, @@ -569,17 +567,17 @@ export default Mixin.create({ @private */ _extractEmbeddedHasMany(store, key, hash, relationshipMeta) { - let relationshipHash = hash.data?.relationships?.[key]?.data; + const relationshipHash = hash.data?.relationships?.[key]?.data; if (!relationshipHash) { return; } - let hasMany = new Array(relationshipHash.length); + const hasMany = new Array(relationshipHash.length); for (let i = 0; i < relationshipHash.length; i++) { - let item = relationshipHash[i]; - let { data, included } = this._normalizeEmbeddedRelationship(store, relationshipMeta, item); + const item = relationshipHash[i]; + const { data, included } = this._normalizeEmbeddedRelationship(store, relationshipMeta, item); hash.included = hash.included || []; hash.included.push(data); if (included) { @@ -589,7 +587,7 @@ export default Mixin.create({ hasMany[i] = { id: data.id, type: data.type }; } - let relationship = { data: hasMany }; + const relationship = { data: hasMany }; hash.data.relationships[key] = relationship; }, @@ -598,20 +596,20 @@ export default Mixin.create({ @private */ _extractEmbeddedBelongsTo(store, key, hash, relationshipMeta) { - let relationshipHash = hash.data?.relationships?.[key]?.data; + const relationshipHash = hash.data?.relationships?.[key]?.data; if (!relationshipHash) { return; } - let { data, included } = this._normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash); + const { data, included } = this._normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash); hash.included = hash.included || []; hash.included.push(data); if (included) { hash.included = hash.included.concat(included); } - let belongsTo = { id: data.id, type: data.type }; - let relationship = { data: belongsTo }; + const belongsTo = { id: data.id, type: data.type }; + const relationship = { data: belongsTo }; hash.data.relationships[key] = relationship; }, @@ -625,8 +623,8 @@ export default Mixin.create({ if (relationshipMeta.options.polymorphic) { modelName = relationshipHash.type; } - let modelClass = store.modelFor(modelName); - let serializer = store.serializerFor(modelName); + const modelClass = store.modelFor(modelName); + const serializer = store.serializerFor(modelName); return serializer.normalize(modelClass, relationshipHash, null); }, diff --git a/packages/serializer/src/-private/transforms/number.ts b/packages/serializer/src/-private/transforms/number.ts index c590e6e9845..96311570358 100644 --- a/packages/serializer/src/-private/transforms/number.ts +++ b/packages/serializer/src/-private/transforms/number.ts @@ -2,7 +2,7 @@ @module @ember-data/serializer */ -function isNumber(value) { +function isNumber(value: number) { return value === value && value !== Infinity && value !== -Infinity; } diff --git a/packages/serializer/src/-private/transforms/transform.ts b/packages/serializer/src/-private/transforms/transform.ts index 8a5ca7b2982..fc416703a13 100644 --- a/packages/serializer/src/-private/transforms/transform.ts +++ b/packages/serializer/src/-private/transforms/transform.ts @@ -3,7 +3,7 @@ */ import EmberObject from '@ember/object'; -import { AttributeSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import { AttributeSchema } from '@warp-drive/core-types/schema'; /** The `Transform` class is used to serialize and deserialize model diff --git a/packages/serializer/src/json-api.js b/packages/serializer/src/json-api.js index a935beccd1a..05e730e7db8 100644 --- a/packages/serializer/src/json-api.js +++ b/packages/serializer/src/json-api.js @@ -144,10 +144,10 @@ const JSONAPISerializer = JSONSerializer.extend({ */ _normalizeDocumentHelper(documentHash) { if (Array.isArray(documentHash.data)) { - let ret = new Array(documentHash.data.length); + const ret = new Array(documentHash.data.length); for (let i = 0; i < documentHash.data.length; i++) { - let data = documentHash.data[i]; + const data = documentHash.data[i]; ret[i] = this._normalizeResourceHelper(data); } @@ -157,10 +157,10 @@ const JSONAPISerializer = JSONSerializer.extend({ } if (Array.isArray(documentHash.included)) { - let ret = new Array(); + const ret = new Array(); for (let i = 0; i < documentHash.included.length; i++) { - let included = documentHash.included[i]; - let normalized = this._normalizeResourceHelper(included); + const included = documentHash.included[i]; + const normalized = this._normalizeResourceHelper(included); if (normalized !== null) { // can be null when unknown type is encountered ret.push(normalized); @@ -194,21 +194,18 @@ const JSONAPISerializer = JSONSerializer.extend({ _normalizeResourceHelper(resourceHash) { assert(this.warnMessageForUndefinedType(), resourceHash.type); - let modelName, usedLookup; - - modelName = this.modelNameFromPayloadKey(resourceHash.type); - usedLookup = 'modelNameFromPayloadKey'; + const modelName = this.modelNameFromPayloadKey(resourceHash.type); if (!this.store.getSchemaDefinitionService().doesTypeExist(modelName)) { - warn(this.warnMessageNoModelForType(modelName, resourceHash.type, usedLookup), false, { + warn(this.warnMessageNoModelForType(modelName, resourceHash.type, 'modelNameFromPayloadKey'), false, { id: 'ds.serializer.model-for-type-missing', }); return null; } - let modelClass = this.store.modelFor(modelName); - let serializer = this.store.serializerFor(modelName); - let { data } = serializer.normalize(modelClass, resourceHash); + const modelClass = this.store.modelFor(modelName); + const serializer = this.store.serializerFor(modelName); + const { data } = serializer.normalize(modelClass, resourceHash); return data; }, @@ -221,7 +218,7 @@ const JSONAPISerializer = JSONSerializer.extend({ @param {Object} payload */ pushPayload(store, payload) { - let normalizedPayload = this._normalizeDocumentHelper(payload); + const normalizedPayload = this._normalizeDocumentHelper(payload); store.push(normalizedPayload); }, @@ -237,12 +234,12 @@ const JSONAPISerializer = JSONSerializer.extend({ @private */ _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) { - let normalizedPayload = this._normalizeDocumentHelper(payload); + const normalizedPayload = this._normalizeDocumentHelper(payload); return normalizedPayload; }, normalizeQueryRecordResponse() { - let normalized = this._super(...arguments); + const normalized = this._super(...arguments); assert( 'Expected the primary data returned by the serializer for a `queryRecord` response to be a single object but instead it was an array.', @@ -253,11 +250,11 @@ const JSONAPISerializer = JSONSerializer.extend({ }, extractAttributes(modelClass, resourceHash) { - let attributes = {}; + const attributes = {}; if (resourceHash.attributes) { modelClass.eachAttribute((key) => { - let attributeKey = this.keyForAttribute(key, 'deserialize'); + const attributeKey = this.keyForAttribute(key, 'deserialize'); if (resourceHash.attributes[attributeKey] !== undefined) { attributes[key] = resourceHash.attributes[attributeKey]; } @@ -287,10 +284,10 @@ const JSONAPISerializer = JSONSerializer.extend({ */ extractRelationship(relationshipHash) { if (Array.isArray(relationshipHash.data)) { - let ret = new Array(relationshipHash.data.length); + const ret = new Array(relationshipHash.data.length); for (let i = 0; i < relationshipHash.data.length; i++) { - let data = relationshipHash.data[i]; + const data = relationshipHash.data[i]; ret[i] = this._normalizeRelationshipDataHelper(data); } @@ -314,13 +311,13 @@ const JSONAPISerializer = JSONSerializer.extend({ @return {Object} */ extractRelationships(modelClass, resourceHash) { - let relationships = {}; + const relationships = {}; if (resourceHash.relationships) { modelClass.eachRelationship((key, relationshipMeta) => { - let relationshipKey = this.keyForRelationship(key, relationshipMeta.kind, 'deserialize'); + const relationshipKey = this.keyForRelationship(key, relationshipMeta.kind, 'deserialize'); if (resourceHash.relationships[relationshipKey] !== undefined) { - let relationshipHash = resourceHash.relationships[relationshipKey]; + const relationshipHash = resourceHash.relationships[relationshipKey]; relationships[key] = this.extractRelationship(relationshipHash); } if (DEBUG) { @@ -391,7 +388,7 @@ const JSONAPISerializer = JSONSerializer.extend({ this.normalizeUsingDeclaredMapping(modelClass, resourceHash.relationships); } - let data = { + const data = { id: this.extractId(modelClass, resourceHash), type: this._extractType(modelClass, resourceHash), attributes: this.extractAttributes(modelClass, resourceHash), @@ -637,25 +634,25 @@ const JSONAPISerializer = JSONSerializer.extend({ @return {Object} json */ serialize(snapshot, options) { - let data = this._super(...arguments); + const data = this._super(...arguments); data.type = this.payloadKeyFromModelName(snapshot.modelName); return { data }; }, serializeAttribute(snapshot, json, key, attribute) { - let type = attribute.type; + const type = attribute.type; if (this._canSerialize(key)) { json.attributes = json.attributes || {}; let value = snapshot.attr(key); if (type) { - let transform = this.transformFor(type); + const transform = this.transformFor(type); value = transform.serialize(value, attribute.options); } - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let payloadKey = this._getMappedKey(key, schema); if (payloadKey === key) { @@ -667,16 +664,16 @@ const JSONAPISerializer = JSONSerializer.extend({ }, serializeBelongsTo(snapshot, json, relationship) { - let name = relationship.name; + const name = relationship.name; if (this._canSerialize(name)) { - let belongsTo = snapshot.belongsTo(name); - let belongsToIsNotNew = belongsTo && !belongsTo.isNew; + const belongsTo = snapshot.belongsTo(name); + const belongsToIsNotNew = belongsTo && !belongsTo.isNew; if (belongsTo === null || belongsToIsNotNew) { json.relationships = json.relationships || {}; - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let payloadKey = this._getMappedKey(name, schema); if (payloadKey === name) { payloadKey = this.keyForRelationship(name, 'belongsTo', 'serialize'); @@ -684,7 +681,7 @@ const JSONAPISerializer = JSONSerializer.extend({ let data = null; if (belongsTo) { - let payloadType = this.payloadKeyFromModelName(belongsTo.modelName); + const payloadType = this.payloadKeyFromModelName(belongsTo.modelName); data = { type: payloadType, @@ -698,26 +695,26 @@ const JSONAPISerializer = JSONSerializer.extend({ }, serializeHasMany(snapshot, json, relationship) { - let name = relationship.name; + const name = relationship.name; if (this.shouldSerializeHasMany(snapshot, name, relationship)) { - let hasMany = snapshot.hasMany(name); + const hasMany = snapshot.hasMany(name); if (hasMany !== undefined) { json.relationships = json.relationships || {}; - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let payloadKey = this._getMappedKey(name, schema); if (payloadKey === name && this.keyForRelationship) { payloadKey = this.keyForRelationship(name, 'hasMany', 'serialize'); } // only serialize has many relationships that are not new - let nonNewHasMany = hasMany.filter((item) => !item.isNew); - let data = new Array(nonNewHasMany.length); + const nonNewHasMany = hasMany.filter((item) => !item.isNew); + const data = new Array(nonNewHasMany.length); for (let i = 0; i < nonNewHasMany.length; i++) { - let item = hasMany[i]; - let payloadType = this.payloadKeyFromModelName(item.modelName); + const item = hasMany[i]; + const payloadType = this.payloadKeyFromModelName(item.modelName); data[i] = { type: payloadType, @@ -741,7 +738,7 @@ if (DEBUG) { !this.isEmbeddedRecordsMixin || this.isEmbeddedRecordsMixinCompatible === true ); - let constructor = this.constructor; + const constructor = this.constructor; warn( `You've defined 'extractMeta' in ${constructor.toString()} which is not used for serializers extending JSONAPISerializer. Read more at https://api.emberjs.com/ember-data/release/classes/JSONAPISerializer on how to customize meta when using JSON API.`, this.extractMeta === JSONSerializer.prototype.extractMeta, diff --git a/packages/serializer/src/json.js b/packages/serializer/src/json.js index c1a271fac66..bd08ff5f04b 100644 --- a/packages/serializer/src/json.js +++ b/packages/serializer/src/json.js @@ -200,15 +200,15 @@ const JSONSerializer = Serializer.extend({ @return {Object} data The transformed data object */ applyTransforms(typeClass, data) { - let attributes = typeClass.attributes; + const attributes = typeClass.attributes; typeClass.eachTransformedAttribute((key, typeClass) => { if (data[key] === undefined) { return; } - let transform = this.transformFor(typeClass); - let transformMeta = attributes.get(key); + const transform = this.transformFor(typeClass); + const transformMeta = attributes.get(key); data[key] = transform.deserialize(data[key], transformMeta.options); }); @@ -522,12 +522,12 @@ const JSONSerializer = Serializer.extend({ @private */ _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) { - let documentHash = { + const documentHash = { data: null, included: [], }; - let meta = this.extractMeta(store, primaryModelClass, payload); + const meta = this.extractMeta(store, primaryModelClass, payload); if (meta) { assert( 'The `meta` returned from `extractMeta` has to be an object, not "' + typeof meta + '".', @@ -537,16 +537,16 @@ const JSONSerializer = Serializer.extend({ } if (isSingle) { - let { data, included } = this.normalize(primaryModelClass, payload); + const { data, included } = this.normalize(primaryModelClass, payload); documentHash.data = data; if (included) { documentHash.included = included; } } else { - let ret = new Array(payload.length); + const ret = new Array(payload.length); for (let i = 0, l = payload.length; i < l; i++) { - let item = payload[i]; - let { data, included } = this.normalize(primaryModelClass, item); + const item = payload[i]; + const { data, included } = this.normalize(primaryModelClass, item); if (included) { documentHash.included = documentHash.included.concat(included); } @@ -633,8 +633,8 @@ const JSONSerializer = Serializer.extend({ @return {String} */ extractId(modelClass, resourceHash) { - let primaryKey = this.primaryKey; - let id = resourceHash[primaryKey]; + const primaryKey = this.primaryKey; + const id = resourceHash[primaryKey]; return coerceId(id); }, @@ -651,7 +651,7 @@ const JSONSerializer = Serializer.extend({ */ extractAttributes(modelClass, resourceHash) { let attributeKey; - let attributes = {}; + const attributes = {}; modelClass.eachAttribute((key) => { attributeKey = this.keyForAttribute(key, 'deserialize'); @@ -688,7 +688,7 @@ const JSONSerializer = Serializer.extend({ relationshipHash.id = coerceId(relationshipHash.id); } - let modelClass = this.store.modelFor(relationshipModelName); + const modelClass = this.store.modelFor(relationshipModelName); if (relationshipHash.type && !modelClass.fields.has('type')) { relationshipHash.type = this.modelNameFromPayloadKey(relationshipHash.type); } @@ -734,14 +734,14 @@ const JSONSerializer = Serializer.extend({ @return {Object} */ extractRelationships(modelClass, resourceHash) { - let relationships = {}; + const relationships = {}; modelClass.eachRelationship((key, relationshipMeta) => { let relationship = null; - let relationshipKey = this.keyForRelationship(key, relationshipMeta.kind, 'deserialize'); + const relationshipKey = this.keyForRelationship(key, relationshipMeta.kind, 'deserialize'); if (resourceHash[relationshipKey] !== undefined) { let data = null; - let relationshipHash = resourceHash[relationshipKey]; + const relationshipHash = resourceHash[relationshipKey]; if (relationshipMeta.kind === 'belongsTo') { if (relationshipMeta.options.polymorphic) { // extracting a polymorphic belongsTo may need more information @@ -761,7 +761,7 @@ const JSONSerializer = Serializer.extend({ data = new Array(relationshipHash.length); if (relationshipMeta.options.polymorphic) { for (let i = 0, l = relationshipHash.length; i < l; i++) { - let item = relationshipHash[i]; + const item = relationshipHash[i]; data[i] = this.extractPolymorphicRelationship(relationshipMeta.type, item, { key, resourceHash, @@ -770,7 +770,7 @@ const JSONSerializer = Serializer.extend({ } } else { for (let i = 0, l = relationshipHash.length; i < l; i++) { - let item = relationshipHash[i]; + const item = relationshipHash[i]; data[i] = this.extractRelationship(relationshipMeta.type, item); } } @@ -779,9 +779,9 @@ const JSONSerializer = Serializer.extend({ relationship = { data }; } - let linkKey = this.keyForLink(key, relationshipMeta.kind); + const linkKey = this.keyForLink(key, relationshipMeta.kind); if (resourceHash.links && resourceHash.links[linkKey] !== undefined) { - let related = resourceHash.links[linkKey]; + const related = resourceHash.links[linkKey]; relationship = relationship || {}; relationship.links = { related }; } @@ -834,12 +834,12 @@ const JSONSerializer = Serializer.extend({ @private */ normalizeUsingDeclaredMapping(modelClass, hash) { - let attrs = this.attrs; + const attrs = this.attrs; let normalizedKey; let payloadKey; if (attrs) { - for (let key in attrs) { + for (const key in attrs) { normalizedKey = payloadKey = this._getMappedKey(key, modelClass); if (hash[payloadKey] === undefined) { @@ -884,7 +884,7 @@ const JSONSerializer = Serializer.extend({ } ); - let attrs = this.attrs; + const attrs = this.attrs; let mappedKey; if (attrs && attrs[key]) { mappedKey = attrs[key]; @@ -911,7 +911,7 @@ const JSONSerializer = Serializer.extend({ @return {boolean} true if the key can be serialized */ _canSerialize(key) { - let attrs = this.attrs; + const attrs = this.attrs; return !attrs || !attrs[key] || attrs[key].serialize !== false; }, @@ -927,7 +927,7 @@ const JSONSerializer = Serializer.extend({ @return {boolean} true if the key must be serialized */ _mustSerialize(key) { - let attrs = this.attrs; + const attrs = this.attrs; return attrs && attrs[key] && attrs[key].serialize === true; }, @@ -947,7 +947,7 @@ const JSONSerializer = Serializer.extend({ */ shouldSerializeHasMany(snapshot, key, relationship) { const schema = this.store.modelFor(snapshot.modelName); - let relationshipType = schema.determineRelationshipType(relationship, this.store); + const relationshipType = schema.determineRelationshipType(relationship, this.store); if (this._mustSerialize(key)) { return true; } @@ -1109,7 +1109,7 @@ const JSONSerializer = Serializer.extend({ @return {Object} json */ serialize(snapshot, options) { - let json = {}; + const json = {}; if (options && options.includeId) { const id = snapshot.id; @@ -1194,16 +1194,16 @@ const JSONSerializer = Serializer.extend({ */ serializeAttribute(snapshot, json, key, attribute) { if (this._canSerialize(key)) { - let type = attribute.type; + const type = attribute.type; let value = snapshot.attr(key); if (type) { - let transform = this.transformFor(type); + const transform = this.transformFor(type); value = transform.serialize(value, attribute.options); } // if provided, use the mapping provided by `attrs` in // the serializer - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let payloadKey = this._getMappedKey(key, schema); if (payloadKey === key && this.keyForAttribute) { @@ -1242,14 +1242,14 @@ const JSONSerializer = Serializer.extend({ @param {Object} relationship */ serializeBelongsTo(snapshot, json, relationship) { - let name = relationship.name; + const name = relationship.name; if (this._canSerialize(name)) { - let belongsToId = snapshot.belongsTo(name, { id: true }); + const belongsToId = snapshot.belongsTo(name, { id: true }); // if provided, use the mapping provided by `attrs` in // the serializer - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let payloadKey = this._getMappedKey(name, schema); if (payloadKey === name && this.keyForRelationship) { payloadKey = this.keyForRelationship(name, 'belongsTo', 'serialize'); @@ -1296,14 +1296,14 @@ const JSONSerializer = Serializer.extend({ @param {Object} relationship */ serializeHasMany(snapshot, json, relationship) { - let name = relationship.name; + const name = relationship.name; if (this.shouldSerializeHasMany(snapshot, name, relationship)) { - let hasMany = snapshot.hasMany(name, { ids: true }); + const hasMany = snapshot.hasMany(name, { ids: true }); if (hasMany !== undefined) { // if provided, use the mapping provided by `attrs` in // the serializer - let schema = this.store.modelFor(snapshot.modelName); + const schema = this.store.modelFor(snapshot.modelName); let payloadKey = this._getMappedKey(name, schema); if (payloadKey === name && this.keyForRelationship) { payloadKey = this.keyForRelationship(name, 'hasMany', 'serialize'); @@ -1379,7 +1379,7 @@ const JSONSerializer = Serializer.extend({ */ extractMeta(store, modelClass, payload) { if (payload && payload['meta'] !== undefined) { - let meta = payload.meta; + const meta = payload.meta; delete payload.meta; return meta; } @@ -1499,7 +1499,7 @@ const JSONSerializer = Serializer.extend({ // for each attr and relationship, make sure that we use // the normalized key typeClass.eachAttribute((name) => { - let key = this.keyForAttribute(name, 'deserialize'); + const key = this.keyForAttribute(name, 'deserialize'); if (key !== name && extracted[key] !== undefined) { extracted[name] = extracted[key]; delete extracted[key]; @@ -1507,7 +1507,7 @@ const JSONSerializer = Serializer.extend({ }); typeClass.eachRelationship((name) => { - let key = this.keyForRelationship(name, 'deserialize'); + const key = this.keyForRelationship(name, 'deserialize'); if (key !== name && extracted[key] !== undefined) { extracted[name] = extracted[key]; delete extracted[key]; @@ -1600,7 +1600,7 @@ const JSONSerializer = Serializer.extend({ @return {Transform} transform */ transformFor(attributeType, skipAssertion) { - let transform = getOwner(this).lookup('transform:' + attributeType); + const transform = getOwner(this).lookup('transform:' + attributeType); assert(`Unable to find the transform for \`attr('${attributeType}')\``, skipAssertion || !!transform); diff --git a/packages/serializer/src/rest.js b/packages/serializer/src/rest.js index 4fd1d23b5d8..c2ee688964c 100644 --- a/packages/serializer/src/rest.js +++ b/packages/serializer/src/rest.js @@ -95,7 +95,7 @@ const RESTSerializer = JSONSerializer.extend({ @return {String} normalized key */ keyForPolymorphicType(key, typeClass, method) { - let relationshipKey = this.keyForRelationship(key); + const relationshipKey = this.keyForRelationship(key); return `${relationshipKey}Type`; }, @@ -181,16 +181,16 @@ const RESTSerializer = JSONSerializer.extend({ @private */ _normalizeArray(store, modelName, arrayHash, prop) { - let documentHash = { + const documentHash = { data: [], included: [], }; - let modelClass = store.modelFor(modelName); - let serializer = store.serializerFor(modelName); + const modelClass = store.modelFor(modelName); + const serializer = store.serializerFor(modelName); makeArray(arrayHash).forEach((hash) => { - let { data, included } = this._normalizePolymorphicRecord(store, hash, prop, modelClass, serializer); + const { data, included } = this._normalizePolymorphicRecord(store, hash, prop, modelClass, serializer); documentHash.data.push(data); if (included) { documentHash.included = documentHash.included.concat(included); @@ -204,11 +204,11 @@ const RESTSerializer = JSONSerializer.extend({ let serializer = primarySerializer; let modelClass = primaryModelClass; - let primaryHasTypeAttribute = primaryModelClass.fields.has('type'); + const primaryHasTypeAttribute = primaryModelClass.fields.has('type'); if (!primaryHasTypeAttribute && hash.type) { // Support polymorphic records in async relationships - let modelName = this.modelNameFromPayloadKey(hash.type); + const modelName = this.modelNameFromPayloadKey(hash.type); if (store.getSchemaDefinitionService().doesTypeExist(modelName)) { serializer = store.serializerFor(modelName); @@ -231,12 +231,12 @@ const RESTSerializer = JSONSerializer.extend({ @private */ _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) { - let documentHash = { + const documentHash = { data: null, included: [], }; - let meta = this.extractMeta(store, primaryModelClass, payload); + const meta = this.extractMeta(store, primaryModelClass, payload); if (meta) { assert( 'The `meta` returned from `extractMeta` has to be an object, not "' + typeof meta + '".', @@ -245,7 +245,7 @@ const RESTSerializer = JSONSerializer.extend({ documentHash.meta = meta; } - let keys = Object.keys(payload); + const keys = Object.keys(payload); for (var i = 0, length = keys.length; i < length; i++) { var prop = keys[i]; @@ -309,7 +309,7 @@ const RESTSerializer = JSONSerializer.extend({ ``` */ if (isPrimary && !Array.isArray(value)) { - let { data, included } = this._normalizePolymorphicRecord(store, value, prop, primaryModelClass, this); + const { data, included } = this._normalizePolymorphicRecord(store, value, prop, primaryModelClass, this); documentHash.data = data; if (included) { documentHash.included = documentHash.included.concat(included); @@ -317,7 +317,7 @@ const RESTSerializer = JSONSerializer.extend({ continue; } - let { data, included } = this._normalizeArray(store, typeName, value, prop); + const { data, included } = this._normalizeArray(store, typeName, value, prop); if (included) { documentHash.included = documentHash.included.concat(included); @@ -334,8 +334,8 @@ const RESTSerializer = JSONSerializer.extend({ 2. If it's a newly created record without an ID, the first record in the array */ - let isUpdatedRecord = isPrimary && coerceId(resource.id) === id; - let isFirstCreatedRecord = isPrimary && !id && !documentHash.data; + const isUpdatedRecord = isPrimary && coerceId(resource.id) === id; + const isFirstCreatedRecord = isPrimary && !id && !documentHash.data; if (isFirstCreatedRecord || isUpdatedRecord) { documentHash.data = resource; @@ -394,7 +394,7 @@ const RESTSerializer = JSONSerializer.extend({ @param {Object} payload */ pushPayload(store, payload) { - let documentHash = { + const documentHash = { data: [], included: [], }; @@ -411,7 +411,7 @@ const RESTSerializer = JSONSerializer.extend({ var typeSerializer = store.serializerFor(type.modelName); makeArray(payload[prop]).forEach((hash) => { - let { data, included } = typeSerializer.normalize(type, hash, prop); + const { data, included } = typeSerializer.normalize(type, hash, prop); documentHash.data.push(data); if (included) { documentHash.included = documentHash.included.concat(included); @@ -671,7 +671,7 @@ const RESTSerializer = JSONSerializer.extend({ @param {Object} options */ serializeIntoHash(hash, typeClass, snapshot, options) { - let normalizedRootKey = this.payloadKeyFromModelName(typeClass.modelName); + const normalizedRootKey = this.payloadKeyFromModelName(typeClass.modelName); hash[normalizedRootKey] = this.serialize(snapshot, options); }, @@ -738,9 +738,9 @@ const RESTSerializer = JSONSerializer.extend({ @param {Object} relationship */ serializePolymorphicType(snapshot, json, relationship) { - let name = relationship.name; - let typeKey = this.keyForPolymorphicType(name, relationship.type, 'serialize'); - let belongsTo = snapshot.belongsTo(name); + const name = relationship.name; + const typeKey = this.keyForPolymorphicType(name, relationship.type, 'serialize'); + const belongsTo = snapshot.belongsTo(name); if (!belongsTo) { json[typeKey] = null; @@ -761,7 +761,7 @@ const RESTSerializer = JSONSerializer.extend({ @return {Object} */ extractPolymorphicRelationship(relationshipType, relationshipHash, relationshipOptions) { - let { key, resourceHash, relationshipMeta } = relationshipOptions; + const { key, resourceHash, relationshipMeta } = relationshipOptions; // A polymorphic belongsTo relationship can be present in the payload // either in the form where the `id` and the `type` are given: @@ -780,11 +780,11 @@ const RESTSerializer = JSONSerializer.extend({ // The next code checks if the latter case is present and returns the // corresponding JSON-API representation. The former case is handled within // the base class JSONSerializer. - let isPolymorphic = relationshipMeta.options.polymorphic; - let typeProperty = this.keyForPolymorphicType(key, relationshipType, 'deserialize'); + const isPolymorphic = relationshipMeta.options.polymorphic; + const typeProperty = this.keyForPolymorphicType(key, relationshipType, 'deserialize'); if (isPolymorphic && resourceHash[typeProperty] !== undefined && typeof relationshipHash !== 'object') { - let type = this.modelNameFromPayloadKey(resourceHash[typeProperty]); + const type = this.modelNameFromPayloadKey(resourceHash[typeProperty]); return { id: coerceId(relationshipHash), type: type, diff --git a/packages/serializer/tsconfig.json b/packages/serializer/tsconfig.json new file mode 100644 index 00000000000..40fa2ef9707 --- /dev/null +++ b/packages/serializer/tsconfig.json @@ -0,0 +1,44 @@ +{ + "include": [ + "src/**/*" + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "experimentalDecorators": true, + "allowJs": true, + "noEmit": false, + "noImplicitOverride": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "emitDeclarationOnly": true, + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types", + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/store/.eslintrc.cjs b/packages/store/.eslintrc.cjs new file mode 100644 index 00000000000..4f4e31ba48d --- /dev/null +++ b/packages/store/.eslintrc.cjs @@ -0,0 +1,26 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: ['@ember/debug', '@ember/object', '@ember/string'], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/store/package.json b/packages/store/package.json index 2a80e03a48e..a87af2f6f96 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -11,20 +11,9 @@ "directory": "packages/store" }, "license": "MIT", - "author": "", - "directories": {}, - "scripts": { - "build": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "start": "rollup --config --watch", - "prepack": "pnpm build", - "prepare": "pnpm build" - }, - "ember-addon": { - "main": "addon-main.js", - "type": "addon", - "version": 1 - }, + "author": "Chris Thoburn ", "files": [ + "unstable-preview-types", "addon-main.js", "addon", "README.md", @@ -32,23 +21,55 @@ "ember-data-logo-dark.svg", "ember-data-logo-light.svg" ], - "peerDependencies": { - "@ember-data/tracking": "workspace:5.5.0-alpha.11", - "@ember/string": "^3.1.1", - "@glimmer/tracking": "^1.1.2" + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./addon/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./addon/*.js" + } + }, + "scripts": { + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", + "build:runtime": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", + "build:types": "tsc --build --force", + "build": "pnpm build:runtime && pnpm build:types", + "prepack": "pnpm build", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" + }, + "dependencies": { + "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", + "@embroider/macros": "^1.13.2", + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "dependenciesMeta": { "@ember-data/private-build-infra": { "injected": true }, + "@ember-data/tracking": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@warp-drive/internal-config": { + "injected": true + }, "@ember/string": { "injected": true } }, - "dependencies": { - "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", - "@embroider/macros": "^1.13.2", - "ember-cli-babel": "^8.2.0" + "peerDependencies": { + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11" }, "devDependencies": { "@babel/cli": "^7.23.0", @@ -61,13 +82,17 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember/string": "^3.1.1", "@embroider/addon-dev": "^4.1.1", "@glimmer/component": "^1.1.2", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", "ember-source": "~5.3.0", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0", "webpack": "^5.89.0" @@ -78,5 +103,13 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.0", + "ember-addon": { + "main": "addon-main.js", + "type": "addon", + "version": 1 + }, + "ember": { + "edition": "octane" + } +} diff --git a/packages/store/rollup.config.mjs b/packages/store/rollup.config.mjs index 9533cf348df..c1a48d6af45 100644 --- a/packages/store/rollup.config.mjs +++ b/packages/store/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,15 +14,13 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [ + external: external([ '@embroider/macros', '@ember-data/tracking/-private', - '@ember-data/private-build-infra/current-deprecations', // to eliminate '@ember/runloop', - '@ember/string', // investigate why these are present '@ember/application', @@ -34,7 +34,7 @@ export default { // test/debug only '@ember/test', '@ember/debug', - ], + ]), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/store/src/-private/cache-handler.ts b/packages/store/src/-private/cache-handler.ts index 60816ca1d72..f892a1fdfb8 100644 --- a/packages/store/src/-private/cache-handler.ts +++ b/packages/store/src/-private/cache-handler.ts @@ -1,25 +1,25 @@ import { assert } from '@ember/debug'; -import type { - Future, - Handler, +import type { Future, Handler, NextFn } from '@ember-data/request/-private/types'; +import type { StableDocumentIdentifier } from '@warp-drive/core-types/identifier'; +import type { CreateRequestOptions, DeleteRequestOptions, UpdateRequestOptions } from '@warp-drive/core-types/request'; +import { + EnableHydration, ImmutableRequestInfo, - NextFn, RequestContext, + SkipCache, StructuredDataDocument, StructuredErrorDocument, -} from '@ember-data/request/-private/types'; - +} from '@warp-drive/core-types/request'; import type { CollectionResourceDataDocument, ResourceDataDocument, ResourceErrorDocument, -} from '../-types/cache/document'; -import type { StableDocumentIdentifier } from '../-types/cache/identifier'; -import type { ResourceIdentifierObject } from '../-types/q/ember-data-json-api'; -import type { JsonApiError } from '../-types/q/record-data-json-api'; +} from '@warp-drive/core-types/spec/document'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; +import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; + import type { RecordInstance } from '../-types/q/record-instance'; -import type { CreateRequestOptions, DeleteRequestOptions, UpdateRequestOptions } from '../-types/request'; import { Document } from './document'; import type Store from './store-service'; @@ -37,9 +37,11 @@ export type LooseStoreRequestInfo = Omit( } } -const MUTATION_OPS = new Set(['createRecord', 'updateRecord', 'deleteRecord']); - function calcShouldFetch( store: Store, request: StoreRequestInfo, @@ -201,8 +201,7 @@ function fetchContentAndHydrate( shouldBackgroundFetch: boolean ): Promise { const { store } = context.request; - const shouldHydrate: boolean = - (context.request[Symbol.for('ember-data:enable-hydration')] as boolean | undefined) || false; + const shouldHydrate: boolean = (context.request[EnableHydration] as boolean | undefined) || false; let isMut = false; if (isMutation(context.request)) { @@ -257,7 +256,7 @@ function fetchContentAndHydrate( typeof error.content === 'object' && 'errors' in error.content && Array.isArray(error.content.errors) - ? (error.content.errors as JsonApiError[]) + ? (error.content.errors as ApiError[]) : undefined; store.cache.commitWasRejected(context.request.data.record, errors); // re-throw the original error to preserve `errors` property. @@ -306,9 +305,6 @@ function cloneError(error: Error & { error: string | object }) { return cloned; } -export const SkipCache = Symbol.for('ember-data:skip-cache'); -export const EnableHydration = Symbol.for('ember-data:enable-hydration'); - export const CacheHandler: Handler = { request(context: StoreRequestContext, next: NextFn): Promise> | Future { // if we have no cache or no cache-key skip cache handling @@ -328,7 +324,7 @@ export const CacheHandler: Handler = { // if we have not skipped cache, determine if we should update behind the scenes if (calcShouldBackgroundFetch(store, context.request, false, identifier)) { - let promise = fetchContentAndHydrate(next, context, identifier, false, true); + const promise = fetchContentAndHydrate(next, context, identifier, false, true); store.requestManager._pending.set(context.id, promise); } diff --git a/packages/store/src/-private/caches/cache-utils.ts b/packages/store/src/-private/caches/cache-utils.ts index fbdb488002c..52647659de8 100644 --- a/packages/store/src/-private/caches/cache-utils.ts +++ b/packages/store/src/-private/caches/cache-utils.ts @@ -1,6 +1,6 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { Cache } from '../../-types/q/cache'; import type { RecordInstance } from '../../-types/q/record-instance'; diff --git a/packages/store/src/-private/caches/identifier-cache.ts b/packages/store/src/-private/caches/identifier-cache.ts index 57cf85a6fda..504c2d8e9e5 100644 --- a/packages/store/src/-private/caches/identifier-cache.ts +++ b/packages/store/src/-private/caches/identifier-cache.ts @@ -4,26 +4,24 @@ import { assert, warn } from '@ember/debug'; import { getOwnConfig, macroCondition } from '@embroider/macros'; -import type { - Identifier, - IdentifierBucket, - RecordIdentifier, - StableIdentifier, - StableRecordIdentifier, -} from '@warp-drive/core/identifier'; + +import { LOG_IDENTIFIERS } from '@ember-data/debugging'; +import { DEBUG } from '@ember-data/env'; import { CACHE_OWNER, DEBUG_CLIENT_ORIGINATED, DEBUG_IDENTIFIER_BUCKET, DEBUG_STALE_CACHE_OWNER, -} from '@warp-drive/core/identifier'; - -import { LOG_IDENTIFIERS } from '@ember-data/debugging'; -import { DEBUG } from '@ember-data/env'; -import { ImmutableRequestInfo } from '@ember-data/request/-private/types'; + type Identifier, + type IdentifierBucket, + type RecordIdentifier, + type StableDocumentIdentifier, + type StableIdentifier, + type StableRecordIdentifier, +} from '@warp-drive/core-types/identifier'; +import type { ImmutableRequestInfo } from '@warp-drive/core-types/request'; +import type { ExistingResourceObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; -import { StableDocumentIdentifier } from '../../-types/cache/identifier'; -import type { ExistingResourceObject, ResourceIdentifierObject } from '../../-types/q/ember-data-json-api'; import type { ForgetMethod, GenerationMethod, @@ -433,8 +431,8 @@ export class IdentifierCache { @public */ createIdentifierForNewRecord(data: { type: string; id?: string | null }): StableRecordIdentifier { - let newLid = this._generate(data, 'record'); - let identifier = /*#__NOINLINE__*/ makeStableRecordIdentifier( + const newLid = this._generate(data, 'record'); + const identifier = /*#__NOINLINE__*/ makeStableRecordIdentifier( { id: data.id || null, type: data.type, lid: newLid, [CACHE_OWNER]: this._id }, 'record', true @@ -499,7 +497,7 @@ export class IdentifierCache { } if (existingIdentifier) { - let generatedIdentifier = identifier; + const generatedIdentifier = identifier; identifier = this._mergeRecordIdentifiers(keyInfo, generatedIdentifier, existingIdentifier, data); // make sure that the `lid` on the data we are processing matches the lid we kept @@ -516,7 +514,7 @@ export class IdentifierCache { } } - let id = identifier.id; + const id = identifier.id; /*#__NOINLINE__*/ performRecordIdentifierUpdate(identifier, keyInfo, data, this._update); const newId = identifier.id; @@ -654,7 +652,7 @@ function makeStableRecordIdentifier( return (recordIdentifier as StableRecordIdentifier)[DEBUG_STALE_CACHE_OWNER]; }, set [DEBUG_STALE_CACHE_OWNER](value: number | undefined) { - recordIdentifier[DEBUG_STALE_CACHE_OWNER] = value; + (recordIdentifier as StableRecordIdentifier)[DEBUG_STALE_CACHE_OWNER] = value; }, }; Object.defineProperty(wrapper, 'toString', { @@ -692,7 +690,7 @@ function performRecordIdentifierUpdate( const { id, type } = keyInfo; // get the mutable instance behind our proxy wrapper - let wrapper = identifier; + const wrapper = identifier; identifier = DEBUG_MAP.get(wrapper)!; if (hasLid(data)) { diff --git a/packages/store/src/-private/caches/instance-cache.ts b/packages/store/src/-private/caches/instance-cache.ts index 8280f7a3390..fe12166b8db 100644 --- a/packages/store/src/-private/caches/instance-cache.ts +++ b/packages/store/src/-private/caches/instance-cache.ts @@ -1,15 +1,14 @@ import { assert, warn } from '@ember/debug'; -import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { LOG_INSTANCE_CACHE } from '@ember-data/debugging'; import { DEBUG } from '@ember-data/env'; -import type Model from '@ember-data/model'; +import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import { Value } from '@warp-drive/core-types/json/raw'; +import type { RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { ExistingResourceIdentifierObject, NewResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; import type { Cache } from '../../-types/q/cache'; -import type { ExistingResourceIdentifierObject, NewResourceIdentifierObject } from '../../-types/q/ember-data-json-api'; import type { JsonApiRelationship, JsonApiResource } from '../../-types/q/record-data-json-api'; -import type { RelationshipSchema } from '../../-types/q/record-data-schemas'; import type { RecordInstance } from '../../-types/q/record-instance'; import RecordReference from '../legacy-model-support/record-reference'; import { CacheCapabilitiesManager } from '../managers/cache-capabilities-manager'; @@ -19,6 +18,16 @@ import type Store from '../store-service'; import { ensureStringId } from '../utils/coerce-id'; import { CacheForIdentifierCache, removeRecordDataFor, setCacheFor } from './cache-utils'; +type Destroyable = { + isDestroyed: boolean; + isDestroying: boolean; + destroy(): void; +}; + +function isDestroyable(record: RecordInstance): record is Destroyable { + return Boolean(record && typeof record === 'object' && typeof (record as Destroyable).destroy === 'function'); +} + /** @module @ember-data/store */ @@ -115,11 +124,11 @@ export class InstanceCache { keptIdentifier = // @ts-expect-error TODO this needs to be fixed 'type' in resourceData && identifier.type === resourceData.type ? identifier : matchedIdentifier; } - let staleIdentifier = identifier === keptIdentifier ? matchedIdentifier : identifier; + const staleIdentifier = identifier === keptIdentifier ? matchedIdentifier : identifier; // check for duplicate entities - let keptHasRecord = this.__instances.record.has(keptIdentifier); - let staleHasRecord = this.__instances.record.has(staleIdentifier); + const keptHasRecord = this.__instances.record.has(keptIdentifier); + const staleHasRecord = this.__instances.record.has(staleIdentifier); // we cannot merge entities when both have records // (this may not be strictly true, we could probably swap the cache data the record points at) @@ -198,7 +207,7 @@ export class InstanceCache { } getReference(identifier: StableRecordIdentifier) { - let cache = this.__instances.reference; + const cache = this.__instances.reference; let reference = cache.get(identifier); if (!reference) { @@ -234,7 +243,7 @@ export class InstanceCache { const record = this.__instances.record.get(identifier); assert( 'Cannot destroy record while it is still materialized', - !record || (record as Model).isDestroyed || (record as Model).isDestroying + !isDestroyable(record) || record.isDestroyed || record.isDestroying ); this.store._graph?.remove(identifier); @@ -313,7 +322,7 @@ export class InstanceCache { }); } else { const typeCache = cache.resourcesByType; - let identifiers = typeCache[type]?.lid; + const identifiers = typeCache[type]?.lid; if (identifiers) { identifiers.forEach((identifier) => { // if (rds.has(identifier)) { @@ -328,7 +337,7 @@ export class InstanceCache { // TODO this should move into something coordinating operations setRecordId(identifier: StableRecordIdentifier, id: string) { const { type, lid } = identifier; - let oldId = identifier.id; + const oldId = identifier.id; // ID absolutely can't be missing if the oldID is empty (missing Id in response for a new record) assert( @@ -358,7 +367,7 @@ export class InstanceCache { console.log(`InstanceCache: updating id to '${id}' for record ${String(identifier)}`); } - let existingIdentifier = this.store.identifierCache.peekRecordIdentifier({ type, id }); + const existingIdentifier = this.store.identifierCache.peekRecordIdentifier({ type, id }); assert( `'${type}' was saved to the server, but the response returned the new id '${id}', which has already been used with another record.'`, !existingIdentifier || existingIdentifier === identifier @@ -396,15 +405,15 @@ export function resourceIsFullyDeleted(instanceCache: InstanceCache, identifier: models. */ type PreloadRelationshipValue = RecordInstance | string; -export function preloadData(store: Store, identifier: StableRecordIdentifier, preload: Record) { - let jsonPayload: JsonApiResource = {}; +export function preloadData(store: Store, identifier: StableRecordIdentifier, preload: Record) { + const jsonPayload: JsonApiResource = {}; //TODO(Igor) consider the polymorphic case const schemas = store.getSchemaDefinitionService(); const relationships = schemas.relationshipsDefinitionFor(identifier); Object.keys(preload).forEach((key) => { - let preloadValue = preload[key]; + const preloadValue = preload[key]; - let relationshipMeta = relationships[key]; + const relationshipMeta = relationships[key]; if (relationshipMeta) { if (!jsonPayload.relationships) { jsonPayload.relationships = {}; diff --git a/packages/store/src/-private/document.ts b/packages/store/src/-private/document.ts index 998c63cbb39..1fc833c0996 100644 --- a/packages/store/src/-private/document.ts +++ b/packages/store/src/-private/document.ts @@ -1,10 +1,10 @@ import { assert } from '@ember/debug'; -import { RequestInfo } from '@ember-data/request/-private/types'; import { defineSignal } from '@ember-data/tracking/-private'; +import type { StableDocumentIdentifier } from '@warp-drive/core-types/identifier'; +import type { RequestInfo } from '@warp-drive/core-types/request'; +import type { Link, PaginationLinks } from '@warp-drive/core-types/spec/raw'; -import { StableDocumentIdentifier } from '../-types/cache/identifier'; -import { Link, PaginationLinks } from '../-types/q/ember-data-json-api'; import type Store from './store-service'; function urlFromLink(link: Link): string { diff --git a/packages/store/src/-private/legacy-model-support/record-reference.ts b/packages/store/src/-private/legacy-model-support/record-reference.ts index f5859425f66..299d976b8f8 100644 --- a/packages/store/src/-private/legacy-model-support/record-reference.ts +++ b/packages/store/src/-private/legacy-model-support/record-reference.ts @@ -1,13 +1,12 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { defineSignal } from '@ember-data/tracking/-private'; - +import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; /** @module @ember-data/store */ -import type { SingleResourceDocument } from '../../-types/q/ember-data-json-api'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; + import type { RecordInstance } from '../../-types/q/record-instance'; import type { NotificationType } from '../managers/notification-manager'; import type Store from '../store-service'; diff --git a/packages/store/src/-private/legacy-model-support/shim-model-class.ts b/packages/store/src/-private/legacy-model-support/shim-model-class.ts index 73a385c3b31..113d5509429 100644 --- a/packages/store/src/-private/legacy-model-support/shim-model-class.ts +++ b/packages/store/src/-private/legacy-model-support/shim-model-class.ts @@ -1,5 +1,6 @@ +import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; + import type { ModelSchema } from '../../-types/q/ds-model'; -import type { AttributeSchema, RelationshipSchema } from '../../-types/q/record-data-schemas'; import type Store from '../store-service'; type GenericRecord = Record; @@ -26,7 +27,7 @@ export function getShimClass(store: Store, modelName: string): ShimModelClass(hash: Record): Map { const map: Map = new Map(); - for (let i in hash) { + for (const i in hash) { if (Object.prototype.hasOwnProperty.call(hash, i)) { map.set(i, hash[i]); } @@ -44,26 +45,30 @@ export default class ShimModelClass implements ModelSchema } get fields(): Map { - let attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); - let relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName }); - let fields = new Map(); + const attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); + const relationships = this.__store + .getSchemaDefinitionService() + .relationshipsDefinitionFor({ type: this.modelName }); + const fields = new Map(); Object.keys(attrs).forEach((key) => fields.set(key as keyof T & string, 'attribute')); Object.keys(relationships).forEach((key) => fields.set(key as keyof T & string, relationships[key]!.kind)); return fields; } get attributes(): Map { - let attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); + const attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); return mapFromHash(attrs as Record); } get relationshipsByName(): Map { - let relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName }); + const relationships = this.__store + .getSchemaDefinitionService() + .relationshipsDefinitionFor({ type: this.modelName }); return mapFromHash(relationships as Record); } eachAttribute(callback: (key: K, attribute: AttributeSchema) => void, binding?: T) { - let attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); + const attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); Object.keys(attrDefs).forEach((key) => { callback.call(binding, key as K, attrDefs[key]); }); @@ -73,7 +78,7 @@ export default class ShimModelClass implements ModelSchema callback: (key: K, relationship: RelationshipSchema) => void, binding?: T ) { - let relationshipDefs = this.__store + const relationshipDefs = this.__store .getSchemaDefinitionService() .relationshipsDefinitionFor({ type: this.modelName }); Object.keys(relationshipDefs).forEach((key) => { diff --git a/packages/store/src/-private/managers/cache-capabilities-manager.ts b/packages/store/src/-private/managers/cache-capabilities-manager.ts index e91570cf1e6..2802b9cf3cf 100644 --- a/packages/store/src/-private/managers/cache-capabilities-manager.ts +++ b/packages/store/src/-private/managers/cache-capabilities-manager.ts @@ -1,8 +1,7 @@ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableDocumentIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import { StableDocumentIdentifier } from '../../-types/cache/identifier'; import type { CacheCapabilitiesManager as StoreWrapper } from '../../-types/q/cache-store-wrapper'; import { SchemaService } from '../../-types/q/schema-service'; import { IdentifierCache, isDocumentIdentifier, isStableIdentifier } from '../caches/identifier-cache'; @@ -56,7 +55,7 @@ export class CacheCapabilitiesManager implements StoreWrapper { return; } - let pending = this._pendingNotifies; + const pending = this._pendingNotifies; this._pendingNotifies = new Map(); this._willNotify = false; diff --git a/packages/store/src/-private/managers/cache-manager.ts b/packages/store/src/-private/managers/cache-manager.ts index ab7aa26ba0a..960338a021e 100644 --- a/packages/store/src/-private/managers/cache-manager.ts +++ b/packages/store/src/-private/managers/cache-manager.ts @@ -1,15 +1,15 @@ -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; - -import type { LocalRelationshipOperation } from '@ember-data/graph/-private/-operations'; -import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; - -import type { RelationshipDiff } from '../../-types/cache/cache'; -import type { Change } from '../../-types/cache/change'; -import type { ResourceDocument, SingleResourceDataDocument } from '../../-types/cache/document'; -import type { StableDocumentIdentifier } from '../../-types/cache/identifier'; -import type { Cache, ChangedAttributesHash, MergeOperation } from '../../-types/q/cache'; -import type { CollectionResourceRelationship, SingleResourceRelationship } from '../../-types/q/ember-data-json-api'; -import type { JsonApiError, JsonApiResource } from '../../-types/q/record-data-json-api'; +import type { Cache, ChangedAttributesHash, RelationshipDiff } from '@warp-drive/core-types/cache'; +import type { Change } from '@warp-drive/core-types/cache/change'; +import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; +import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; +import type { StableDocumentIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { Value } from '@warp-drive/core-types/json/raw'; +import type { StructuredDataDocument, StructuredDocument } from '@warp-drive/core-types/request'; +import type { ResourceDocument, SingleResourceDataDocument } from '@warp-drive/core-types/spec/document'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; + +import type { MergeOperation } from '../../-types/q/cache'; +import type { JsonApiResource } from '../../-types/q/record-data-json-api'; import type { StoreRequestContext } from '../cache-handler'; /** @@ -324,7 +324,7 @@ export class CacheManager implements Cache { * @param identifier * @param errors */ - commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void { + commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void { this.#cache.commitWasRejected(identifier, errors); } @@ -365,7 +365,7 @@ export class CacheManager implements Cache { * @param propertyName * @param value */ - setAttr(identifier: StableRecordIdentifier, propertyName: string, value: unknown): void { + setAttr(identifier: StableRecordIdentifier, propertyName: string, value: Value): void { this.#cache.setAttr(identifier, propertyName, value); } @@ -479,7 +479,7 @@ export class CacheManager implements Cache { getRelationship( identifier: StableRecordIdentifier, propertyName: string - ): SingleResourceRelationship | CollectionResourceRelationship { + ): ResourceRelationship | CollectionRelationship { return this.#cache.getRelationship(identifier, propertyName); } @@ -507,7 +507,7 @@ export class CacheManager implements Cache { * @param identifier * @returns */ - getErrors(identifier: StableRecordIdentifier): JsonApiError[] { + getErrors(identifier: StableRecordIdentifier): ApiError[] { return this.#cache.getErrors(identifier); } @@ -558,7 +558,6 @@ export class CacheManager implements Cache { * @param identifier * @returns {boolean} */ - isDel; isDeletionCommitted(identifier: StableRecordIdentifier): boolean { return this.#cache.isDeletionCommitted(identifier); } diff --git a/packages/store/src/-private/managers/notification-manager.ts b/packages/store/src/-private/managers/notification-manager.ts index 7f4910ced9e..b5446b178e4 100644 --- a/packages/store/src/-private/managers/notification-manager.ts +++ b/packages/store/src/-private/managers/notification-manager.ts @@ -5,12 +5,10 @@ import { assert } from '@ember/debug'; // eslint-disable-next-line no-restricted-imports import { _backburner } from '@ember/runloop'; -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { LOG_NOTIFICATIONS } from '@ember-data/debugging'; import { DEBUG } from '@ember-data/env'; +import type { StableDocumentIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import { StableDocumentIdentifier } from '../../-types/cache/identifier'; import { isDocumentIdentifier, isStableIdentifier } from '../caches/identifier-cache'; import type Store from '../store-service'; @@ -55,7 +53,7 @@ function _unsubscribe( Map > ) { - let identifier = tokens.get(token); + const identifier = tokens.get(token); if (LOG_NOTIFICATIONS) { if (!identifier) { // eslint-disable-next-line no-console @@ -149,7 +147,7 @@ export default class NotificationManager { this._cache.set(identifier, map); } - let unsubToken = DEBUG ? { _tokenRef: tokenId++ } : {}; + const unsubToken = DEBUG ? { _tokenRef: tokenId++ } : {}; map.set(unsubToken, callback); this._tokens.set(unsubToken, identifier); return unsubToken; @@ -276,7 +274,7 @@ export default class NotificationManager { // TODO for documents this will need to switch based on Identifier kind if (isCacheOperationValue(value)) { - let callbackMap = this._cache.get(isDocumentIdentifier(identifier) ? 'document' : 'resource') as Map< + const callbackMap = this._cache.get(isDocumentIdentifier(identifier) ? 'document' : 'resource') as Map< UnsubscribeToken, ResourceOperationCallback | DocumentOperationCallback >; @@ -288,7 +286,7 @@ export default class NotificationManager { } } - let callbackMap = this._cache.get(identifier); + const callbackMap = this._cache.get(identifier); if (!callbackMap || !callbackMap.size) { return false; } diff --git a/packages/store/src/-private/managers/record-array-manager.ts b/packages/store/src/-private/managers/record-array-manager.ts index c2fcc2015b5..23fd430e6cc 100644 --- a/packages/store/src/-private/managers/record-array-manager.ts +++ b/packages/store/src/-private/managers/record-array-manager.ts @@ -1,12 +1,11 @@ /** @module @ember-data/store */ -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; - -import { ImmutableRequestInfo } from '@ember-data/request/-private/types'; import { addTransactionCB } from '@ember-data/tracking/-private'; +import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import { ImmutableRequestInfo } from '@warp-drive/core-types/request'; +import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/raw'; -import type { CollectionResourceDocument } from '../../-types/q/ember-data-json-api'; import IdentifierArray, { ARRAY_SIGNAL, Collection, @@ -60,7 +59,7 @@ const SLICE_BATCH_SIZE = 1200; */ export function fastPush(target: T[], source: T[]) { let startLength = 0; - let newLength = source.length; + const newLength = source.length; while (newLength - startLength > SLICE_BATCH_SIZE) { // eslint-disable-next-line prefer-spread target.push.apply(target, source.slice(startLength, startLength + SLICE_BATCH_SIZE)); @@ -141,8 +140,8 @@ class RecordArrayManager { */ liveArrayFor(type: string): IdentifierArray { let array = this._live.get(type); - let identifiers: StableRecordIdentifier[] = []; - let staged = this._staged.get(type); + const identifiers: StableRecordIdentifier[] = []; + const staged = this._staged.get(type); if (staged) { staged.forEach((value, key) => { if (value === 'add') { @@ -173,7 +172,7 @@ class RecordArrayManager { identifiers?: StableRecordIdentifier[]; doc?: CollectionResourceDocument; }): Collection { - let options: CollectionCreateOptions = { + const options: CollectionCreateOptions = { type: config.type, links: config.doc?.links || null, meta: config.doc?.meta || null, @@ -184,7 +183,7 @@ class RecordArrayManager { store: this.store, manager: this, }; - let array = new Collection(options); + const array = new Collection(options); this._managed.add(array); this._set.set(array, new Set(options.identifiers || [])); if (config.identifiers) { @@ -198,7 +197,7 @@ class RecordArrayManager { if (array === FAKE_ARR) { return; } - let tag = array[ARRAY_SIGNAL]; + const tag = array[ARRAY_SIGNAL]; if (!tag.shouldReset) { tag.shouldReset = true; addTransactionCB(array[NOTIFY]); @@ -216,12 +215,12 @@ class RecordArrayManager { return; } - let liveArray = this._live.get(identifier.type); + const liveArray = this._live.get(identifier.type); const allPending = this._pending; - let pending: Map = new Map(); + const pending: Map = new Map(); if (includeManaged) { - let managed = this._identifiers.get(identifier); + const managed = this._identifiers.get(identifier); if (managed) { managed.forEach((arr) => { let changes = allPending.get(arr); @@ -282,10 +281,10 @@ class RecordArrayManager { } identifierAdded(identifier: StableRecordIdentifier): void { - let changeSets = this._getPendingFor(identifier, false); + const changeSets = this._getPendingFor(identifier, false); if (changeSets) { changeSets.forEach((changes, array) => { - let existing = changes.get(identifier); + const existing = changes.get(identifier); if (existing === 'del') { changes.delete(identifier); } else { @@ -298,10 +297,10 @@ class RecordArrayManager { } identifierRemoved(identifier: StableRecordIdentifier): void { - let changeSets = this._getPendingFor(identifier, true, true); + const changeSets = this._getPendingFor(identifier, true, true); if (changeSets) { changeSets.forEach((changes, array) => { - let existing = changes.get(identifier); + const existing = changes.get(identifier); if (existing === 'add') { changes.delete(identifier); } else { @@ -314,7 +313,7 @@ class RecordArrayManager { } identifierChanged(identifier: StableRecordIdentifier): void { - let newState = this.store._instanceCache.recordIsLoaded(identifier, true); + const newState = this.store._instanceCache.recordIsLoaded(identifier, true); // if the change matches the most recent direct added/removed // state, then we can ignore it @@ -355,7 +354,7 @@ function associate( identifiers: StableRecordIdentifier[] ) { for (let i = 0; i < identifiers.length; i++) { - let identifier = identifiers[i]; + const identifier = identifiers[i]; let cache = ArraysCache.get(identifier); if (!cache) { cache = new Set(); @@ -380,7 +379,7 @@ export function disassociateIdentifier( array: Collection, identifier: StableRecordIdentifier ) { - let cache = ArraysCache.get(identifier); + const cache = ArraysCache.get(identifier); if (cache) { cache.delete(array); } @@ -391,7 +390,7 @@ function sync( changes: Map, arraySet: Set ) { - let state = array[SOURCE]; + const state = array[SOURCE]; const adds: StableRecordIdentifier[] = []; const removes: StableRecordIdentifier[] = []; changes.forEach((value, key) => { diff --git a/packages/store/src/-private/network/request-cache.ts b/packages/store/src/-private/network/request-cache.ts index 08fcd10b275..f08f2baeb02 100644 --- a/packages/store/src/-private/network/request-cache.ts +++ b/packages/store/src/-private/network/request-cache.ts @@ -3,9 +3,8 @@ */ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { DEBUG } from '@ember-data/env'; +import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { FindOptions } from '../../-types/q/store'; import Store from '../store-service'; @@ -82,14 +81,14 @@ export default class RequestStateService { } _enqueue(promise: Promise, queryRequest: Request): Promise { - let query = queryRequest.data[0]; + const query = queryRequest.data[0]; if (hasRecordIdentifier(query)) { const identifier = query.recordIdentifier; - let type = query.op === 'saveRecord' ? ('mutation' as const) : ('query' as const); + const type = query.op === 'saveRecord' ? ('mutation' as const) : ('query' as const); if (!this._pending.has(identifier)) { this._pending.set(identifier, []); } - let request: InternalRequest = { + const request: InternalRequest = { state: 'pending', request: queryRequest, type, @@ -101,7 +100,7 @@ export default class RequestStateService { return promise.then( (result) => { this._dequeue(identifier, request); - let finalizedRequest = { + const finalizedRequest = { state: 'fulfilled', request: queryRequest, type, @@ -114,7 +113,7 @@ export default class RequestStateService { }, (error) => { this._dequeue(identifier, request); - let finalizedRequest = { + const finalizedRequest = { state: 'rejected', request: queryRequest, type, @@ -171,7 +170,7 @@ export default class RequestStateService { _addDone(request: InternalRequest) { request[Touching].forEach((identifier) => { // TODO add support for multiple - let requestDataOp = request.request.data[0].op; + const requestDataOp = request.request.data[0].op; let requests = this._done.get(identifier); if (requests) { @@ -251,7 +250,7 @@ export default class RequestStateService { * @returns {RequestState | null} the state of the most recent request for the given identifier */ getLastRequestForRecord(identifier: StableRecordIdentifier): RequestState | null { - let requests = this._done.get(identifier); + const requests = this._done.get(identifier); if (requests) { return requests[requests.length - 1]; } diff --git a/packages/store/src/-private/record-arrays/identifier-array.ts b/packages/store/src/-private/record-arrays/identifier-array.ts index 9ff30b5aa1d..92356d19f5a 100644 --- a/packages/store/src/-private/record-arrays/identifier-array.ts +++ b/packages/store/src/-private/record-arrays/identifier-array.ts @@ -3,9 +3,6 @@ */ import { assert } from '@ember/debug'; -import type { StableRecordIdentifier } from '@warp-drive/core/identifier'; - -import { ImmutableRequestInfo } from '@ember-data/request/-private/types'; import { compat } from '@ember-data/tracking'; import { addToTransaction, @@ -15,8 +12,10 @@ import { Signal, subscribe, } from '@ember-data/tracking/-private'; +import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { ImmutableRequestInfo } from '@warp-drive/core-types/request'; +import type { Links, PaginationLinks } from '@warp-drive/core-types/spec/raw'; -import { Links, PaginationLinks } from '../../-types/q/ember-data-json-api'; import type { RecordInstance } from '../../-types/q/record-instance'; import { recordIdentifierFor } from '../caches/instance-cache'; import type RecordArrayManager from '../managers/record-array-manager'; @@ -49,12 +48,15 @@ const ARRAY_GETTER_METHODS = new Set([ ]); const ARRAY_SETTER_METHODS = new Set(['push', 'pop', 'unshift', 'shift', 'splice', 'sort']); const SYNC_PROPS = new Set(['[]', 'length', 'links', 'meta']); -function isArrayGetter(prop: KeyType): boolean { +function isArrayGetter(prop: KeyType): prop is keyof Array { return ARRAY_GETTER_METHODS.has(prop); } -function isArraySetter(prop: KeyType): boolean { +function isArraySetter(prop: KeyType): prop is keyof Array { return ARRAY_SETTER_METHODS.has(prop); } +function isSelfProp(self: T, prop: KeyType): prop is keyof T { + return prop in self; +} export const ARRAY_SIGNAL = Symbol('#signal'); export const SOURCE = Symbol('#source'); @@ -201,7 +203,7 @@ class IdentifierArray { constructor(options: IdentifierArrayCreateOptions) { // eslint-disable-next-line @typescript-eslint/no-this-alias - let self = this; + const self = this; this.modelName = options.type; this.store = options.store; this._manager = options.manager; @@ -221,10 +223,10 @@ class IdentifierArray { // and forward them as one const proxy = new Proxy(this[SOURCE], { - get(target: StableRecordIdentifier[], prop: KeyType, receiver: IdentifierArray): unknown { - let index = convertToInt(prop); + get(target: StableRecordIdentifier[], prop: keyof R, receiver: R): unknown { + const index = convertToInt(prop); if (_SIGNAL.shouldReset && (index !== null || SYNC_PROPS.has(prop) || isArrayGetter(prop))) { - options.manager._syncArray(receiver as unknown as IdentifierArray); + options.manager._syncArray(receiver); _SIGNAL.t = false; _SIGNAL.shouldReset = false; } @@ -249,7 +251,7 @@ class IdentifierArray { fn = function () { subscribe(_SIGNAL); transaction = true; - let result = safeForEach(receiver, target, store, arguments[0] as ForEachCB, arguments[1]); + const result = safeForEach(receiver, target, store, arguments[0] as ForEachCB, arguments[1]); transaction = false; return result; }; @@ -259,7 +261,7 @@ class IdentifierArray { // array functions must run through Reflect to work properly // binding via other means will not work. transaction = true; - let result = Reflect.apply(target[prop] as ProxiedMethod, receiver, arguments) as unknown; + const result = Reflect.apply(target[prop] as ProxiedMethod, receiver, arguments) as unknown; transaction = false; return result; }; @@ -285,7 +287,7 @@ class IdentifierArray { const args: unknown[] = Array.prototype.slice.call(arguments); assert(`Cannot start a new array transaction while a previous transaction is underway`, !transaction); transaction = true; - let result: unknown = Reflect.apply(target[prop] as ProxiedMethod, receiver, args); + const result: unknown = Reflect.apply(target[prop] as ProxiedMethod, receiver, args); self[MUTATE]!(prop as string, args, result); addToTransaction(_SIGNAL); // TODO handle cache updates @@ -299,7 +301,7 @@ class IdentifierArray { return fn; } - if (prop in self) { + if (isSelfProp(self, prop)) { if (prop === NOTIFY || prop === ARRAY_SIGNAL || prop === SOURCE) { return self[prop]; } @@ -307,7 +309,7 @@ class IdentifierArray { let fn = boundFns.get(prop); if (fn) return fn; - let outcome: unknown = self[prop]; + const outcome: unknown = self[prop]; if (typeof outcome === 'function') { fn = function () { @@ -324,7 +326,7 @@ class IdentifierArray { return subscribe(_SIGNAL), outcome; } - return target[prop]; + return target[prop as keyof StableRecordIdentifier[]]; }, set(target: StableRecordIdentifier[], prop: KeyType, value: unknown /*, receiver */): boolean { @@ -350,10 +352,10 @@ class IdentifierArray { PrivateState.meta = (value || null) as Record | null; return true; } - let index = convertToInt(prop); + const index = convertToInt(prop); if (index === null || index > target.length) { - if (prop in self) { + if (isSelfProp(self, prop)) { self[prop] = value; return true; } @@ -365,8 +367,8 @@ class IdentifierArray { return false; } - let original: StableRecordIdentifier | undefined = target[index]; - let newIdentifier = extractIdentifierFromRecord(value); + const original: StableRecordIdentifier | undefined = target[index]; + const newIdentifier = extractIdentifierFromRecord(value); (target as unknown as Record)[index] = newIdentifier; if (!transaction) { self[MUTATE]!('replace cell', [index, original, newIdentifier]); @@ -423,7 +425,7 @@ class IdentifierArray { this.isUpdating = true; - let updatingPromise = this._update(); + const updatingPromise = this._update(); void updatingPromise.finally(() => { this._updatingPromise = null; if (this.isDestroying || this.isDestroyed) { @@ -465,7 +467,7 @@ class IdentifierArray { @return {Promise} promise */ save(): Promise { - let promise = Promise.all(this.map((record) => this.store.saveRecord(record))).then(() => this); + const promise = Promise.all(this.map((record) => this.store.saveRecord(record))).then(() => this); return promise; } diff --git a/packages/store/src/-private/store-service.ts b/packages/store/src/-private/store-service.ts index 33cbab1b743..31ef22d3dc5 100644 --- a/packages/store/src/-private/store-service.ts +++ b/packages/store/src/-private/store-service.ts @@ -5,36 +5,33 @@ import { assert } from '@ember/debug'; import EmberObject from '@ember/object'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { LOG_PAYLOADS, LOG_REQUESTS } from '@ember-data/debugging'; import { DEBUG, TESTING } from '@ember-data/env'; -import type { Graph } from '@ember-data/graph/-private/graph'; import type RequestManager from '@ember-data/request'; import type { Future } from '@ember-data/request/-private/types'; - -import { ResourceDocument } from '../-types/cache/document'; -import { StableDocumentIdentifier } from '../-types/cache/identifier'; -import type { Cache, CacheV1 } from '../-types/q/cache'; -import type { CacheCapabilitiesManager } from '../-types/q/cache-store-wrapper'; -import { ModelSchema } from '../-types/q/ds-model'; +import type { Graph } from '@warp-drive/core-types/graph'; +import type { + StableDocumentIdentifier, + StableExistingRecordIdentifier, + StableRecordIdentifier, +} from '@warp-drive/core-types/identifier'; +import { EnableHydration, SkipCache } from '@warp-drive/core-types/request'; +import type { ResourceDocument } from '@warp-drive/core-types/spec/document'; import type { CollectionResourceDocument, EmptyResourceDocument, JsonApiDocument, ResourceIdentifierObject, SingleResourceDocument, -} from '../-types/q/ember-data-json-api'; +} from '@warp-drive/core-types/spec/raw'; + +import type { Cache, CacheV1 } from '../-types/q/cache'; +import type { CacheCapabilitiesManager } from '../-types/q/cache-store-wrapper'; +import { ModelSchema } from '../-types/q/ds-model'; import type { RecordInstance } from '../-types/q/record-instance'; import type { SchemaService } from '../-types/q/schema-service'; import type { FindOptions } from '../-types/q/store'; -import { - EnableHydration, - type LifetimesService, - SkipCache, - StoreRequestContext, - type StoreRequestInput, -} from './cache-handler'; +import { type LifetimesService, StoreRequestContext, type StoreRequestInput } from './cache-handler'; import { IdentifierCache } from './caches/identifier-cache'; import { InstanceCache, @@ -364,7 +361,7 @@ class Store extends EmberObject { // we lazily set the cache handler when we issue the first request // because constructor doesn't allow for this to run after // the user has had the chance to set the prop. - let opts: { + const opts: { store: Store; disableTestWaiter?: boolean; [EnableHydration]: true; @@ -662,8 +659,8 @@ class Store extends EmberObject { // to remove this, we would need to move to a new `async` API. let record!: RecordInstance; this._join(() => { - let normalizedModelName = normalizeModelName(modelName); - let properties = { ...inputProperties }; + const normalizedModelName = normalizeModelName(modelName); + const properties = { ...inputProperties }; // If the passed properties do not include a primary key, // give the adapter an opportunity to generate one. Typically, @@ -672,7 +669,7 @@ class Store extends EmberObject { if (properties.id === null || properties.id === undefined) { upgradeStore(this); - let adapter = this.adapterFor?.(modelName, true); + const adapter = this.adapterFor?.(modelName, true); if (adapter && adapter.generateIdForRecord) { properties.id = adapter.generateIdForRecord(this, modelName, properties); @@ -1250,7 +1247,7 @@ class Store extends EmberObject { isMaybeIdentifier(resourceIdentifier) ); - let identifier: StableRecordIdentifier = this.identifierCache.getOrCreateRecordIdentifier(resourceIdentifier); + const identifier: StableRecordIdentifier = this.identifierCache.getOrCreateRecordIdentifier(resourceIdentifier); return this._instanceCache.getReference(identifier); } @@ -1512,7 +1509,11 @@ class Store extends EmberObject { @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter.queryRecord @return {Promise} promise which resolves with the found record or `null` */ - queryRecord(modelName: string, query: Record, options?): Promise { + queryRecord( + modelName: string, + query: Record, + options?: { adapterOptions: Record } + ): Promise { if (DEBUG) { assertDestroyingStore(this, 'queryRecord'); } @@ -1781,7 +1782,7 @@ class Store extends EmberObject { typeof modelName === 'string' ); - let type = normalizeModelName(modelName); + const type = normalizeModelName(modelName); return this.recordArrayManager.liveArrayFor(type); } @@ -1821,7 +1822,7 @@ class Store extends EmberObject { this.recordArrayManager.clear(); this._instanceCache.clear(); } else { - let normalizedModelName = normalizeModelName(modelName); + const normalizedModelName = normalizeModelName(modelName); this._instanceCache.clear(normalizedModelName); } }); @@ -1985,10 +1986,10 @@ class Store extends EmberObject { if (DEBUG) { assertDestroyingStore(this, 'push'); } - let pushed = this._push(data, false); + const pushed = this._push(data, false); if (Array.isArray(pushed)) { - let records = pushed.map((identifier) => this._instanceCache.getRecord(identifier)); + const records = pushed.map((identifier) => this._instanceCache.getRecord(identifier)); return records; } @@ -2017,7 +2018,7 @@ class Store extends EmberObject { } if (LOG_PAYLOADS) { try { - let data: unknown = JSON.parse(JSON.stringify(jsonApiDoc)) as unknown; + const data: unknown = JSON.parse(JSON.stringify(jsonApiDoc)) as unknown; // eslint-disable-next-line no-console console.log('EmberData | Payload - push', data); } catch (e) { @@ -2053,7 +2054,7 @@ class Store extends EmberObject { assertDestroyingStore(this, 'saveRecord'); } assert(`Unable to initate save for a record in a disconnected state`, storeFor(record)); - let identifier = recordIdentifierFor(record); + const identifier = recordIdentifierFor(record); const cache = this.cache; if (!identifier) { @@ -2202,15 +2203,15 @@ function normalizeProperties( const { type } = identifier; // convert relationship Records to RecordDatas before passing to RecordData - let defs = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type }); + const defs = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type }); if (defs !== null) { - let keys = Object.keys(properties); + const keys = Object.keys(properties); let relationshipValue; for (let i = 0; i < keys.length; i++) { - let prop = keys[i]; - let def = defs[prop]; + const prop = keys[i]; + const def = defs[prop]; if (def !== undefined) { if (def.kind === 'hasMany') { diff --git a/packages/store/src/-private/utils/construct-resource.ts b/packages/store/src/-private/utils/construct-resource.ts index afb5bd7b8f0..f6ce3b4b4c4 100644 --- a/packages/store/src/-private/utils/construct-resource.ts +++ b/packages/store/src/-private/utils/construct-resource.ts @@ -1,6 +1,7 @@ import { assert } from '@ember/debug'; -import type { ExistingResourceIdentifierObject, ResourceIdentifierObject } from '../../-types/q/ember-data-json-api'; +import type { ExistingResourceIdentifierObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; + import { isStableIdentifier } from '../caches/identifier-cache'; import coerceId from './coerce-id'; import isNonEmptyString from './is-non-empty-string'; @@ -20,7 +21,7 @@ function constructResource( lid?: string | null ): ResourceIdentifierObject | ExistingResourceIdentifierObject { if (typeof type === 'object' && type !== null) { - let resource = type; + const resource = type; if (isStableIdentifier(resource)) { return resource; } diff --git a/packages/store/src/-private/utils/uuid-polyfill.ts b/packages/store/src/-private/utils/uuid-polyfill.ts index e4e1a3d0fb9..702a037b76c 100644 --- a/packages/store/src/-private/utils/uuid-polyfill.ts +++ b/packages/store/src/-private/utils/uuid-polyfill.ts @@ -15,7 +15,7 @@ export default function installPolyfill() { // we might be able to optimize this by requesting more bytes than we need at a time const rng = function (): Uint8Array { // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto - let rnds8 = new Uint8Array(16); + const rnds8 = new Uint8Array(16); if (!CRYPTO.getRandomValues && !isFastBoot) { throw new Error(`Unable to generate bytes for UUID`); @@ -36,7 +36,7 @@ export default function installPolyfill() { } const bytesToUuid = function (buf: Uint8Array): UUIDv4 { - let bth = byteToHex; + const bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 return [ bth[buf[0]], @@ -63,7 +63,7 @@ export default function installPolyfill() { }; CRYPTO.randomUUID = function uuidv4(): UUIDv4 { - let rnds = rng(); + const rnds = rng(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` rnds[6] = (rnds[6] & 0x0f) | 0x40; diff --git a/packages/store/src/-types/cache/identifier.ts b/packages/store/src/-types/cache/identifier.ts deleted file mode 100644 index 4a3fe7836b3..00000000000 --- a/packages/store/src/-types/cache/identifier.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type StableDocumentIdentifier = { - lid: string; -}; diff --git a/packages/store/src/-types/q/cache-store-wrapper.ts b/packages/store/src/-types/q/cache-store-wrapper.ts index 668d86c21a0..4022bedb7c5 100644 --- a/packages/store/src/-types/q/cache-store-wrapper.ts +++ b/packages/store/src/-types/q/cache-store-wrapper.ts @@ -1,9 +1,7 @@ -import { StableRecordIdentifier } from '@warp-drive/core'; +import { StableDocumentIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import { IdentifierCache } from '@ember-data/store/-private/caches/identifier-cache'; -import { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; - -import { StableDocumentIdentifier } from '../cache/identifier'; +import { IdentifierCache } from '../../-private/caches/identifier-cache'; +import { NotificationType } from '../../-private/managers/notification-manager'; import { SchemaService } from './schema-service'; /** diff --git a/packages/store/src/-types/q/cache.ts b/packages/store/src/-types/q/cache.ts index a6076bbae6d..08c69ac6520 100644 --- a/packages/store/src/-types/q/cache.ts +++ b/packages/store/src/-types/q/cache.ts @@ -1,20 +1,13 @@ -import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { Cache, ChangedAttributesHash } from '@warp-drive/core-types/cache'; +import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; +import type { CollectionResourceRelationship, SingleResourceRelationship } from '@warp-drive/core-types/spec/raw'; -import { Cache } from '../cache/cache'; -import type { CollectionResourceRelationship, SingleResourceRelationship } from './ember-data-json-api'; -import type { JsonApiError, JsonApiResource } from './record-data-json-api'; +import type { JsonApiResource } from './record-data-json-api'; /** @module @ember-data/store */ -/** - * A hash of changed attributes with the key being the attribute name and the value being an - * array of `[oldValue, newValue]`. - * - * @internal - */ -export type ChangedAttributesHash = Record; - export interface MergeOperation { op: 'mergeIdentifiers'; record: StableRecordIdentifier; // existing @@ -36,7 +29,7 @@ export interface CacheV1 { willCommit(): void; didCommit(data: JsonApiResource | null): void; - commitWasRejected(recordIdentifier?: RecordIdentifier, errors?: JsonApiError[]): void; + commitWasRejected(recordIdentifier?: RecordIdentifier, errors?: ApiError[]): void; unloadRecord(): void; @@ -61,7 +54,7 @@ export interface CacheV1 { // State // ============= setIsDeleted(isDeleted: boolean): void; - getErrors(identifier: StableRecordIdentifier): JsonApiError[]; + getErrors(identifier: StableRecordIdentifier): ApiError[]; isEmpty?(identifier: StableRecordIdentifier): boolean; // needs rfc isNew(identifier: StableRecordIdentifier): boolean; isDeleted(identifier: StableRecordIdentifier): boolean; diff --git a/packages/store/src/-types/q/ds-model.ts b/packages/store/src/-types/q/ds-model.ts index 3c7d3d4525f..c739217fa15 100644 --- a/packages/store/src/-types/q/ds-model.ts +++ b/packages/store/src/-types/q/ds-model.ts @@ -1,4 +1,4 @@ -import { AttributeSchema, RelationshipSchema } from './record-data-schemas'; +import { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; type GenericRecord = Record; export interface ModelSchema { diff --git a/packages/store/src/-types/q/identifier.ts b/packages/store/src/-types/q/identifier.ts index d4ff87d7aef..4ee8bc62113 100644 --- a/packages/store/src/-types/q/identifier.ts +++ b/packages/store/src/-types/q/identifier.ts @@ -2,11 +2,9 @@ @module @ember-data/store */ -import { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; - import { ImmutableRequestInfo } from '@ember-data/request'; - -import type { ExistingResourceObject, ResourceIdentifierObject } from './ember-data-json-api'; +import { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { ExistingResourceObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; export type ResourceData = ResourceIdentifierObject | ExistingResourceObject; diff --git a/packages/store/src/-types/q/record-data-json-api.ts b/packages/store/src/-types/q/record-data-json-api.ts index 0220c46dfd3..c1896bd1ab1 100644 --- a/packages/store/src/-types/q/record-data-json-api.ts +++ b/packages/store/src/-types/q/record-data-json-api.ts @@ -1,16 +1,17 @@ +import type { Value } from '@warp-drive/core-types/json/raw'; import type { CollectionResourceRelationship, Link, Links, Meta, SingleResourceRelationship, -} from './ember-data-json-api'; +} from '@warp-drive/core-types/spec/raw'; /** @module @ember-data/store */ -export type AttributesHash = Record; +export type AttributesHash = Record; export interface JsonApiResource { id?: string | null; diff --git a/packages/store/src/-types/q/record-instance.ts b/packages/store/src/-types/q/record-instance.ts index 9a2b2fa901a..159391d910a 100644 --- a/packages/store/src/-types/q/record-instance.ts +++ b/packages/store/src/-types/q/record-instance.ts @@ -1,4 +1,3 @@ -import type Model from '@ember-data/model'; /** @module @ember-data/store */ @@ -14,4 +13,4 @@ import type Model from '@ember-data/model'; The type belows allows for anything extending object. */ -export type RecordInstance = Model | unknown; +export type RecordInstance = unknown; diff --git a/packages/store/src/-types/q/schema-service.ts b/packages/store/src/-types/q/schema-service.ts index a36c910c069..0ed969eea61 100644 --- a/packages/store/src/-types/q/schema-service.ts +++ b/packages/store/src/-types/q/schema-service.ts @@ -2,9 +2,8 @@ @module @ember-data/store */ -import type { RecordIdentifier } from '@warp-drive/core/identifier'; - -import type { AttributesSchema, RelationshipsSchema } from './record-data-schemas'; +import type { RecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; /** * A SchemaDefinitionService implementation provides the ability diff --git a/packages/store/src/-types/q/store.ts b/packages/store/src/-types/q/store.ts index 54fd3f92d60..9034d434c65 100644 --- a/packages/store/src/-types/q/store.ts +++ b/packages/store/src/-types/q/store.ts @@ -1,7 +1,9 @@ +import type { Value } from '@warp-drive/core-types/json/raw'; + export interface FindOptions { reload?: boolean; backgroundReload?: boolean; include?: string; adapterOptions?: Record; - preload?: Record; + preload?: Record; } diff --git a/packages/store/src/-types/request.ts b/packages/store/src/-types/request.ts deleted file mode 100644 index 6b2f528baa0..00000000000 --- a/packages/store/src/-types/request.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { StableRecordIdentifier } from '@warp-drive/core'; - -import { QueryParamsSerializationOptions } from '@ember-data/request-utils'; - -import type { ResourceIdentifierObject } from './q/ember-data-json-api'; - -export type CacheOptions = { - key?: string; - reload?: boolean; - backgroundReload?: boolean; -}; -export type FindRecordRequestOptions = { - url: string; - method: 'GET'; - headers: Headers; - cacheOptions: CacheOptions; - op: 'findRecord'; - records: [ResourceIdentifierObject]; -}; - -export type QueryRequestOptions = { - url: string; - method: 'GET'; - headers: Headers; - cacheOptions: CacheOptions; - op: 'query'; -}; - -export type PostQueryRequestOptions = { - url: string; - method: 'POST' | 'QUERY'; - headers: Headers; - body: string; - cacheOptions: CacheOptions & { key: string }; - op: 'query'; -}; - -export type DeleteRequestOptions = { - url: string; - method: 'DELETE'; - headers: Headers; - op: 'deleteRecord'; - data: { - record: StableRecordIdentifier; - }; -}; - -export type UpdateRequestOptions = { - url: string; - method: 'PATCH' | 'PUT'; - headers: Headers; - op: 'updateRecord'; - data: { - record: StableRecordIdentifier; - }; -}; - -export type CreateRequestOptions = { - url: string; - method: 'POST'; - headers: Headers; - op: 'createRecord'; - data: { - record: StableRecordIdentifier; - }; -}; - -export type RemotelyAccessibleIdentifier = { - id: string; - type: string; - lid?: string; -}; - -export type ConstrainedRequestOptions = { - reload?: boolean; - backgroundReload?: boolean; - host?: string; - namespace?: string; - resourcePath?: string; - urlParamsSettings?: QueryParamsSerializationOptions; -}; - -export type FindRecordOptions = ConstrainedRequestOptions & { - include?: string | string[]; -}; diff --git a/packages/store/tsconfig.json b/packages/store/tsconfig.json new file mode 100644 index 00000000000..1589994bec1 --- /dev/null +++ b/packages/store/tsconfig.json @@ -0,0 +1,44 @@ +{ + "include": [ + "src/**/*", + "../../@types/**/*", + ], + "baseUrl": ".", + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "noEmit": false, + "experimentalDecorators": true, + + // Enable faster builds + // but causes us to not rebuild properly + "incremental": false, + + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "declarationDir": "unstable-preview-types", + "inlineSourceMap": true, + "inlineSources": true, + "types": [ + "ember-source/types" + ], + + "paths": { + "@ember-data/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], + "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], + "@ember-data/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], + "@ember-data/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], + "@ember-data/env": ["../private-build-infra/virtual-packages/env.d.ts"], + } + }, +} diff --git a/packages/tracking/.eslintrc.cjs b/packages/tracking/.eslintrc.cjs new file mode 100644 index 00000000000..c31848a9c2c --- /dev/null +++ b/packages/tracking/.eslintrc.cjs @@ -0,0 +1,31 @@ +const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); +const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); +const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); +const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); +const node = require('@warp-drive/internal-config/eslint/node.cjs'); +const base = require('@warp-drive/internal-config/eslint/base.cjs'); +const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs'); + +module.exports = { + ...parser.defaults(), + + plugins: [...base.plugins(), ...imports.plugins()], + extends: [...base.extend()], + rules: Object.assign( + base.rules(), + imports.rules(), + isolation.rules({ + allowedImports: [ + '@glimmer/tracking/primitives/cache', + '@ember/debug', + '@ember/-internals/metal', + '@glimmer/validator', + ], + }), + {} + ), + + ignorePatterns: ignore.ignoreRules(), + + overrides: [node.defaults(), typescript.defaults()], +}; diff --git a/packages/tracking/package.json b/packages/tracking/package.json index 0d8c9fd1e44..3d8e3c15000 100644 --- a/packages/tracking/package.json +++ b/packages/tracking/package.json @@ -24,18 +24,21 @@ "dependenciesMeta": { "@ember-data/private-build-infra": { "injected": true + }, + "@warp-drive/internal-config": { + "injected": true } }, "dependencies": { "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@embroider/macros": "^1.13.2", - "ember-cli-babel": "^8.2.0", "ember-cached-decorator-polyfill": "^1.0.2", - "@glimmer/validator": "^0.84.3" + "ember-cli-babel": "^8.2.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "files": [ "unstable-preview-types", - "addon-main.js", + "addon-main.cjs", "addon", "README.md", "LICENSE.md", @@ -53,11 +56,12 @@ } }, "scripts": { + "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", "build:runtime": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", "build:types": "tsc --build --force", "build": "pnpm build:runtime && pnpm build:types", "prepack": "pnpm build", - "prepare": "pnpm build" + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.cjs", @@ -76,16 +80,17 @@ "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", "@embroider/addon-dev": "^4.1.1", + "@glimmer/component": "^1.1.2", + "@glimmer/validator": "^0.84.3", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/internal-config": "workspace:5.5.0-alpha.11", "ember-source": "~5.3.0", - "@glimmer/component": "^1.1.2", "rollup": "^4.1.4", - "tslib": "^2.6.2", "typescript": "^5.2.2", "walk-sync": "^3.0.0" }, "ember": { "edition": "octane" } -} \ No newline at end of file +} diff --git a/packages/tracking/rollup.config.mjs b/packages/tracking/rollup.config.mjs index 08c5e026fe8..6da8def2ad0 100644 --- a/packages/tracking/rollup.config.mjs +++ b/packages/tracking/rollup.config.mjs @@ -2,6 +2,8 @@ import { Addon } from '@embroider/addon-dev/rollup'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { external } from '@warp-drive/internal-config/rollup/external.js'; + const addon = new Addon({ srcDir: 'src', destDir: 'addon', @@ -12,14 +14,14 @@ export default { // You can augment this if you need to. output: addon.output(), - external: [ + external: external([ '@ember/debug', '@embroider/macros', '@glimmer/validator', '@ember/-internals/metal', '@glimmer/tracking/primitives/cache', '@ember/object/compat', - ], + ]), plugins: [ // These are the modules that users should be able to import from your diff --git a/packages/tracking/src/-private.ts b/packages/tracking/src/-private.ts index 1f2af17b9db..a64501f11b5 100644 --- a/packages/tracking/src/-private.ts +++ b/packages/tracking/src/-private.ts @@ -1,5 +1,4 @@ import { tagForProperty } from '@ember/-internals/metal'; -// eslint-disable-next-line no-restricted-imports import { consumeTag, dirtyTag } from '@glimmer/validator'; import { DEPRECATE_COMPUTED_CHAINS } from '@ember-data/deprecations'; @@ -30,7 +29,7 @@ type Transaction = { let TRANSACTION: Transaction | null = null; function createTransaction() { - let transaction: Transaction = { + const transaction: Transaction = { cbs: new Set(), props: new Set(), sub: new Set(), @@ -44,7 +43,6 @@ function createTransaction() { function maybeConsume(tag: ReturnType | null): void { if (tag) { - // @ts-expect-error - we are using Ember's Tag not Glimmer's consumeTag(tag); } } @@ -64,7 +62,6 @@ export function subscribe(obj: Tag | Signal): void { maybeConsume(obj['[]']); maybeConsume(obj['@length']); } - // @ts-expect-error - we are using Ember's Tag not Glimmer's consumeTag(obj.tag); } else { obj.ref; @@ -140,7 +137,7 @@ function updateRef(obj: Tag | Signal): void { } function flushTransaction() { - let transaction = TRANSACTION!; + const transaction = TRANSACTION!; TRANSACTION = transaction.parent; transaction.cbs.forEach((cb) => { cb(); @@ -156,7 +153,6 @@ function flushTransaction() { maybeConsume(obj['[]']); maybeConsume(obj['@length']); } - // @ts-expect-error - we are using Ember's Tag not Glimmer's consumeTag(obj.tag); } else { obj.ref; @@ -164,7 +160,7 @@ function flushTransaction() { }); } async function untrack() { - let transaction = TRANSACTION!; + const transaction = TRANSACTION!; TRANSACTION = transaction.parent; // defer writes diff --git a/packages/tracking/src/index.ts b/packages/tracking/src/index.ts index cccf546b1f3..ea3605d8d92 100644 --- a/packages/tracking/src/index.ts +++ b/packages/tracking/src/index.ts @@ -1,5 +1,3 @@ -import 'ember-source/types'; - import { assert } from '@ember/debug'; import { createCache, getValue } from '@glimmer/tracking/primitives/cache'; diff --git a/packages/tracking/tsconfig.json b/packages/tracking/tsconfig.json index 1c52cba3005..7e2ff92eb37 100644 --- a/packages/tracking/tsconfig.json +++ b/packages/tracking/tsconfig.json @@ -4,7 +4,6 @@ ], "baseUrl": ".", "compilerOptions": { - // "composite": true, "lib": ["DOM", "ESNext"], "module": "esnext", "target": "esnext", @@ -29,6 +28,9 @@ "declarationMap": true, "inlineSourceMap": true, "inlineSources": true, + "types": [ + "ember-source/types", + ], "paths": { "@ember-data/deprecations": ["./node_modules/@ember-data/private-build-infra/virtual-packages/deprecations.d.ts"], diff --git a/packages/unpublished-eslint-rules/package.json b/packages/unpublished-eslint-rules/package.json index 74a6e3d3711..9d1bae9c8c0 100644 --- a/packages/unpublished-eslint-rules/package.json +++ b/packages/unpublished-eslint-rules/package.json @@ -10,5 +10,11 @@ }, "volta": { "extends": "../../package.json" + }, + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + }, + "scripts": { + "_syncPnpm": "pnpm sync-dependencies-meta-injected" } -} \ No newline at end of file +} diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/assert-notification.ts b/packages/unpublished-test-infra/addon-test-support/asserts/assert-notification.ts index 6eed302c3d5..16ee6396ab8 100644 --- a/packages/unpublished-test-infra/addon-test-support/asserts/assert-notification.ts +++ b/packages/unpublished-test-infra/addon-test-support/asserts/assert-notification.ts @@ -1,6 +1,6 @@ import { TestContext } from '@ember/test-helpers'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type Assert from 'ember-data-qunit-asserts'; diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/index.ts b/packages/unpublished-test-infra/addon-test-support/asserts/index.ts index 4bb6a8a3641..c31f28c1c38 100644 --- a/packages/unpublished-test-infra/addon-test-support/asserts/index.ts +++ b/packages/unpublished-test-infra/addon-test-support/asserts/index.ts @@ -1,6 +1,6 @@ import { TestContext } from '@ember/test-helpers'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Diagnostic } from '@warp-drive/diagnostic/-types'; import type Assert from 'ember-data-qunit-asserts'; diff --git a/packages/unpublished-test-infra/package.json b/packages/unpublished-test-infra/package.json index f726a9f2ab4..e5f6c4f6d72 100644 --- a/packages/unpublished-test-infra/package.json +++ b/packages/unpublished-test-infra/package.json @@ -18,7 +18,8 @@ "test": "tests" }, "scripts": { - "test": "ember test" + "test:infra": "ember test", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "peerDependencies": { "qunit": "^2.20.0" @@ -32,19 +33,24 @@ "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.13.2", + "@ember/test-helpers": "^3.2.0", "broccoli-merge-trees": "^4.2.0", + "chalk": "^4.1.2", "ember-auto-import": "^2.6.3", "ember-cli-babel": "^8.2.0", "ember-cli-blueprint-test-helpers": "^0.19.2", "ember-get-config": "^2.1.1", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "semver": "^7.5.4", "testem": "^3.10.1", - "webpack": "^5.89.0", - "chalk": "^4.1.2" + "webpack": "^5.89.0" }, "dependenciesMeta": { "@ember-data/private-build-infra": { - "injected": "true" + "injected": true + }, + "@ember/string": { + "injected": true } }, "devDependencies": { @@ -52,7 +58,6 @@ "@babel/runtime": "^7.23.2", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", - "@ember/test-helpers": "^3.2.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", @@ -69,8 +74,8 @@ "ember-resolver": "^11.0.1", "ember-source": "~5.3.0", "loader.js": "^4.7.0", - "webpack": "^5.89.0", - "qunit": "^2.20.0" + "qunit": "^2.20.0", + "webpack": "^5.89.0" }, "engines": { "node": ">= 18.18.2" @@ -85,4 +90,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/packages/unpublished-test-infra/src/failed-test-log.txt b/packages/unpublished-test-infra/src/failed-test-log.txt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b2e58df7b9..180a22386ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,7 @@ overrides: '@embroider/macros': ^1.12.2 broccoli-funnel: ^3.0.8 broccoli-merge-trees: ^4.2.0 + '@glimmer/validator': ^0.84.3 ember-cli-babel: ^8.1.0 ember-cli-htmlbars: ^6.3.0 ember-cli-typescript: ^5.2.1 @@ -17,7 +18,7 @@ overrides: ember-compatibility-helpers: ^1.2.6 testem@<3.10.1: ~3.10.1 -packageExtensionsChecksum: 412ea1f7b0456edcf429c4fd07d165d2 +packageExtensionsChecksum: ac8b19f4ca6ecfbe7962863e7b49cda1 patchedDependencies: ember-compatibility-helpers@1.2.6: @@ -33,49 +34,14 @@ patchedDependencies: importers: .: + dependencies: + turbo: + specifier: ^1.10.15 + version: 1.10.16 devDependencies: - '@babel/core': - specifier: ^7.23.2 - version: 7.23.2(supports-color@8.1.1) - '@babel/eslint-parser': - specifier: ^7.22.15 - version: 7.22.15(@babel/core@7.23.2)(eslint@8.51.0) - '@babel/plugin-proposal-decorators': - specifier: ^7.23.2 - version: 7.23.2(@babel/core@7.23.2) - '@babel/plugin-transform-typescript': - specifier: ^7.22.15 - version: 7.22.15(@babel/core@7.23.2) - '@babel/runtime': - specifier: ^7.23.2 - version: 7.23.2 - '@ember/edition-utils': - specifier: ^1.2.0 - version: 1.2.0 - '@ember/optional-features': - specifier: ^2.0.0 - version: 2.0.0 - '@ember/string': - specifier: 3.1.1 - version: 3.1.1(@babel/core@7.23.2) - '@ember/test-helpers': - specifier: ^3.2.0 - version: 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) - '@glimmer/component': - specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.23.2) - '@types/jquery': - specifier: ^3.5.22 - version: 3.5.22 - '@types/qunit': - specifier: ^2.19.6 - version: 2.19.6 - '@typescript-eslint/eslint-plugin': - specifier: ^6.8.0 - version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/parser': - specifier: ^6.8.0 - version: 6.8.0(eslint@8.51.0)(typescript@5.2.2) + bun-types: + specifier: ^1.0.7 + version: 1.0.7 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -91,42 +57,6 @@ importers: debug: specifier: ^4.3.4 version: 4.3.4(supports-color@8.1.1) - ember-cli: - specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) - ember-source: - specifier: ~5.3.0 - version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) - eslint: - specifier: ^8.51.0 - version: 8.51.0 - eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.51.0) - eslint-plugin-ember: - specifier: ^11.11.1 - version: 11.11.1(eslint@8.51.0) - eslint-plugin-ember-data-internal: - specifier: link:packages/unpublished-eslint-rules - version: link:packages/unpublished-eslint-rules - eslint-plugin-import: - specifier: ^2.28.1 - version: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.51.0) - eslint-plugin-mocha: - specifier: ^10.2.0 - version: 10.2.0(eslint@8.51.0) - eslint-plugin-node: - specifier: ^11.1.0 - version: 11.1.0(eslint@8.51.0) - eslint-plugin-prettier: - specifier: 5.0.1 - version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3) - eslint-plugin-qunit: - specifier: ^8.0.1 - version: 8.0.1(eslint@8.51.0) - eslint-plugin-simple-import-sort: - specifier: ^10.0.0 - version: 10.0.0(eslint@8.51.0) execa: specifier: ^5.1.1 version: 5.1.1 @@ -139,15 +69,15 @@ importers: git-repo-version: specifier: ^1.0.2 version: 1.0.2 + globby: + specifier: ^13.2.2 + version: 13.2.2 lerna-changelog: specifier: ^2.2.0 version: 2.2.0 - loader.js: - specifier: ^4.7.0 - version: 4.7.0 - prettier: - specifier: ^3.0.3 - version: 3.0.3 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -157,15 +87,9 @@ importers: silent-error: specifier: ^1.1.1 version: 1.1.1 - typescript: - specifier: ~5.2.2 - version: 5.2.2 url: specifier: ^0.11.3 version: 0.11.3 - webpack: - specifier: ^5.89.0 - version: 5.89.0 yuidocjs: specifier: ^0.10.2 version: 0.10.2 @@ -173,41 +97,83 @@ importers: specifier: 1.0.5 version: 1.0.5 + config: + dependencies: + '@babel/core': + specifier: ^7.23.2 + version: 7.23.2(supports-color@8.1.1) + '@babel/eslint-parser': + specifier: ^7.22.15 + version: 7.22.15(@babel/core@7.23.2)(eslint@8.52.0) + '@babel/plugin-proposal-decorators': + specifier: ^7.12.13 + version: 7.23.2(@babel/core@7.23.2) + '@typescript-eslint/eslint-plugin': + specifier: ^6.8.0 + version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': + specifier: ^6.8.0 + version: 6.8.0(eslint@8.52.0)(typescript@5.2.2) + eslint: + specifier: ^8.52.0 + version: 8.52.0 + eslint-config-prettier: + specifier: ^9.0.0 + version: 9.0.0(eslint@8.52.0) + eslint-plugin-import: + specifier: ^2.28.1 + version: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.52.0) + eslint-plugin-prettier: + specifier: ^5.0.1 + version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3) + eslint-plugin-simple-import-sort: + specifier: ^10.0.0 + version: 10.0.0(eslint@8.52.0) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 + prettier: + specifier: ^3.0.3 + version: 3.0.3 + typescript: + specifier: ~5.2.2 + version: 5.2.2 + packages/-ember-data: dependencies: '@ember-data/adapter': specifier: workspace:5.5.0-alpha.11 - version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) '@ember-data/debug': specifier: workspace:5.5.0-alpha.11 version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core) + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.5.0-alpha.11 - version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@packages+core) + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/model': specifier: workspace:5.5.0-alpha.11 - version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@packages+core)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/serializer': specifier: workspace:5.5.0-alpha.11 - version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) @@ -216,10 +182,10 @@ importers: version: 1.2.0 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': + version: 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: link:../core + version: file:packages/core-types(@babel/core@7.23.2) broccoli-merge-trees: specifier: ^4.2.0 version: 4.2.0 @@ -228,10 +194,16 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-inflector: specifier: ^4.0.2 version: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 + typescript: + specifier: ^5.2.2 + version: 5.2.2 webpack: specifier: ^5.89.0 version: 5.89.0 @@ -248,9 +220,15 @@ importers: '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: link:../../config ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) + eslint: + specifier: ^8.51.0 + version: 8.52.0 dependenciesMeta: '@ember-data/adapter': injected: true @@ -278,12 +256,19 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/core-types': + injected: true + ember-inflector: + injected: true packages/active-record: dependencies: ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -312,21 +297,48 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.23.2) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.23.2)(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.23.2) + ember-source: + specifier: ~5.3.0 + version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -334,11 +346,19 @@ importers: specifier: ^3.0.0 version: 3.0.0 dependenciesMeta: + '@ember-data/request': + injected: true + '@ember-data/request-utils': + injected: true '@ember-data/store': injected: true + '@ember-data/tracking': + injected: true '@ember/string': injected: true - '@warp-drive/core': + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': injected: true ember-inflector: injected: true @@ -350,13 +370,16 @@ importers: version: file:packages/private-build-infra '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-test-info: specifier: ^1.0.0 version: 1.0.0 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -388,6 +411,30 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/graph': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -400,15 +447,24 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@types/jquery': + specifier: ^3.5.24 + version: 3.5.24 + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.23.2) ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -419,19 +475,42 @@ importers: specifier: ^5.89.0 version: 5.89.0 dependenciesMeta: + '@ember-data/graph': + injected: true + '@ember-data/json-api': + injected: true + '@ember-data/legacy-compat': + injected: true '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true + '@ember-data/request-utils': + injected: true + '@ember-data/store': + injected: true + '@ember-data/tracking': + injected: true '@ember/string': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true + ember-inflector: + injected: true - packages/core: + packages/core-types: dependencies: '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -463,9 +542,6 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 - '@ember-data/store': - specifier: workspace:5.5.0-alpha.11 - version: link:../store '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -478,15 +554,15 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -499,6 +575,8 @@ importers: dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@warp-drive/internal-config': + injected: true packages/debug: dependencies: @@ -513,23 +591,59 @@ importers: version: 1.2.0 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-auto-import: specifier: ^2.6.3 version: 2.6.3(webpack@5.89.0) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 webpack: specifier: ^5.89.0 version: 5.89.0 + devDependencies: + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.23.2) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-source: + specifier: ~5.3.0 + version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true '@ember-data/store': injected: true + '@ember-data/tracking': + injected: true '@ember/string': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true packages/diagnostic: dependencies: @@ -539,6 +653,9 @@ importers: debug: specifier: ^4.3.4 version: 4.3.4(supports-color@8.1.1) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 tmp: specifier: ^0.2.1 version: 0.2.1 @@ -561,35 +678,51 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember/test-helpers': + specifier: ^3.2.0 + version: 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.23.2) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.23.2)(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config bun-types: specifier: ^1.0.6 version: 1.0.6 ember-cli-test-loader: specifier: ^3.1.0 version: 3.1.0(@babel/core@7.23.2) + ember-source: + specifier: ~5.3.0 + version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 walk-sync: specifier: ^3.0.0 version: 3.0.0 + dependenciesMeta: + '@warp-drive/internal-config': + injected: true - packages/eslint-plugin-ember-data: {} + packages/eslint-plugin-ember-data: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 packages/graph: dependencies: @@ -601,10 +734,13 @@ importers: version: 1.2.0 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -636,6 +772,18 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -648,15 +796,18 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -669,8 +820,18 @@ importers: dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true '@ember-data/store': injected: true + '@ember-data/tracking': + injected: true + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true packages/holodeck: dependencies: @@ -682,10 +843,13 @@ importers: version: 4.1.2 hono: specifier: ^3.8.0 - version: 3.8.1 + version: 3.8.2 pm2: specifier: ^5.3.0 version: 5.3.0 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -707,7 +871,7 @@ importers: version: 7.23.2 '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -717,12 +881,15 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -732,6 +899,10 @@ importers: dependenciesMeta: '@ember-data/request': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true packages/json-api: dependencies: @@ -743,10 +914,13 @@ importers: version: 1.2.0 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -778,6 +952,24 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/graph': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -790,15 +982,21 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) - ember-source: - specifier: ~5.3.0 + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.23.2) + ember-source: + specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -813,12 +1011,21 @@ importers: injected: true '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true '@ember-data/request-utils': injected: true - optional: true '@ember-data/store': injected: true - '@warp-drive/core': + '@ember-data/tracking': + injected: true + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true + ember-inflector: injected: true packages/legacy-compat: @@ -828,10 +1035,13 @@ importers: version: file:packages/private-build-infra '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -863,21 +1073,54 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/graph': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.23.2) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.23.2)(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.23.2) + ember-source: + specifier: ~5.3.0 + version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -893,6 +1136,20 @@ importers: injected: true '@ember-data/request': injected: true + '@ember-data/request-utils': + injected: true + '@ember-data/store': + injected: true + '@ember-data/tracking': + injected: true + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true + ember-inflector: + injected: true packages/model: dependencies: @@ -904,10 +1161,10 @@ importers: version: 1.2.0 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-string-utils: specifier: ^1.1.0 version: 1.1.0 @@ -917,6 +1174,9 @@ importers: inflection: specifier: ~3.0.0 version: 3.0.0 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -948,6 +1208,33 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/debug': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) + '@ember-data/graph': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -960,15 +1247,21 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.23.2) ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -979,6 +1272,8 @@ importers: specifier: ^5.89.0 version: 5.89.0 dependenciesMeta: + '@ember-data/debug': + injected: true '@ember-data/graph': injected: true '@ember-data/json-api': @@ -987,12 +1282,22 @@ importers: injected: true '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true + '@ember-data/request-utils': + injected: true '@ember-data/store': injected: true '@ember-data/tracking': injected: true '@ember/string': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true + ember-inflector: + injected: true packages/private-build-infra: dependencies: @@ -1010,7 +1315,7 @@ importers: version: 1.2.0 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) babel-import-util: specifier: ^2.0.1 version: 2.0.1 @@ -1040,7 +1345,7 @@ importers: version: 4.1.2 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-path-utils: specifier: ^1.0.0 version: 1.0.0 @@ -1056,6 +1361,9 @@ importers: npm-git-info: specifier: ^1.0.3 version: 1.0.3 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 semver: specifier: ^7.5.4 version: 7.5.4 @@ -1073,10 +1381,13 @@ importers: version: 3.0.2(@babel/core@7.23.2) '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -1111,18 +1422,27 @@ importers: '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.23.2) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.23.2)(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-source: + specifier: ~5.3.0 + version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -1132,12 +1452,19 @@ importers: dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true packages/request-utils: dependencies: ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -1169,30 +1496,47 @@ importers: '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.23.2) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.23.2)(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-source: + specifier: ~5.3.0 + version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 walk-sync: specifier: ^3.0.0 version: 3.0.0 + dependenciesMeta: + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true packages/rest: dependencies: ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -1221,21 +1565,48 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) + '@glimmer/component': + specifier: ^1.1.2 + version: 1.1.2(@babel/core@7.23.2) '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.23.2)(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.23.2) + ember-source: + specifier: ~5.3.0 + version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -1243,16 +1614,31 @@ importers: specifier: ^3.0.0 version: 3.0.0 dependenciesMeta: + '@ember-data/request': + injected: true + '@ember-data/request-utils': + injected: true '@ember-data/store': injected: true + '@ember-data/tracking': + injected: true '@ember/string': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true + ember-inflector: + injected: true packages/schema: dependencies: chalk: specifier: ^5.3.0 version: 5.3.0 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: bun-types: specifier: 1.0.6 @@ -1268,10 +1654,13 @@ importers: version: 1.2.0 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -1315,15 +1704,15 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: link:../../config ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -1344,13 +1733,16 @@ importers: version: file:packages/private-build-infra '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-test-info: specifier: ^1.0.0 version: 1.0.0 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -1382,9 +1774,18 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: link:../store + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -1397,15 +1798,21 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.23.2) ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -1418,8 +1825,20 @@ importers: dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true + '@ember-data/store': + injected: true + '@ember-data/tracking': + injected: true '@ember/string': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true + ember-inflector: + injected: true packages/store: dependencies: @@ -1428,10 +1847,13 @@ importers: version: file:packages/private-build-infra '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -1463,6 +1885,15 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.23.2) '@embroider/addon-dev': specifier: ^4.1.1 version: 4.1.1(rollup@4.1.4) @@ -1475,15 +1906,18 @@ importers: '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -1496,8 +1930,16 @@ importers: dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true + '@ember-data/tracking': + injected: true '@ember/string': injected: true + '@warp-drive/core-types': + injected: true + '@warp-drive/internal-config': + injected: true packages/tracking: dependencies: @@ -1506,16 +1948,16 @@ importers: version: file:packages/private-build-infra '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) - '@glimmer/validator': - specifier: ^0.84.3 - version: 0.84.3 + version: 1.13.2(@babel/core@7.23.2) ember-cached-decorator-polyfill: specifier: ^1.0.2 version: 1.0.2(@babel/core@7.23.2)(ember-source@5.3.0) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/cli': specifier: ^7.23.0 @@ -1553,21 +1995,24 @@ importers: '@glimmer/component': specifier: ^1.1.2 version: 1.1.2(@babel/core@7.23.2) + '@glimmer/validator': + specifier: ^0.84.3 + version: 0.84.3 '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.23.2)(rollup@4.1.4) '@rollup/plugin-node-resolve': specifier: ^15.2.3 version: 15.2.3(rollup@4.1.4) + '@warp-drive/internal-config': + specifier: workspace:5.5.0-alpha.11 + version: file:config ember-source: specifier: ~5.3.0 version: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) rollup: specifier: ^4.1.4 version: 4.1.4 - tslib: - specifier: ^2.6.2 - version: 2.6.2 typescript: specifier: ^5.2.2 version: 5.2.2 @@ -1577,8 +2022,14 @@ importers: dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@warp-drive/internal-config': + injected: true - packages/unpublished-eslint-rules: {} + packages/unpublished-eslint-rules: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 packages/unpublished-test-infra: dependencies: @@ -1588,9 +2039,12 @@ importers: '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 + '@ember/test-helpers': + specifier: ^3.2.0 + version: 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) broccoli-merge-trees: specifier: ^4.2.0 version: 4.2.0 @@ -1602,19 +2056,22 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-blueprint-test-helpers: specifier: ^0.19.2 - version: 0.19.2 + version: 0.19.2(ember-cli@5.3.0) ember-get-config: specifier: ^2.1.1 version: 2.1.1(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 semver: specifier: ^7.5.4 version: 7.5.4 testem: specifier: ^3.10.1 - version: 3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm)(debug@4.3.4) + version: 3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm) webpack: specifier: ^5.89.0 version: 5.89.0 @@ -1631,9 +2088,6 @@ importers: '@ember/string': specifier: 3.1.1 version: 3.1.1(@babel/core@7.23.2) - '@ember/test-helpers': - specifier: ^3.2.0 - version: 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) '@glimmer/component': specifier: ^1.1.2 version: 1.1.2(@babel/core@7.23.2) @@ -1642,13 +2096,13 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 + version: 4.0.7 '@types/semver': specifier: ^7.5.3 - version: 7.5.3 + version: 7.5.4 ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -1687,37 +2141,58 @@ importers: version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) dependenciesMeta: '@ember-data/private-build-infra': - injected: 'true' + injected: true + '@ember/string': + injected: true tests/blueprints: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 version: 7.23.2(supports-color@8.1.1) '@ember-data/adapter': specifier: workspace:5.5.0-alpha.11 - version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + '@ember-data/debug': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) + '@ember-data/graph': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.5.0-alpha.11 - version: link:../../packages/legacy-compat + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/model': specifier: workspace:5.5.0-alpha.11 - version: file:packages/model(@babel/core@7.23.2)(@ember-data/legacy-compat@packages+legacy-compat)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/serializer': specifier: workspace:5.5.0-alpha.11 - version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/string': specifier: 3.1.1 version: 3.1.1(@babel/core@7.23.2) @@ -1727,15 +2202,15 @@ importers: '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 - '@warp-drive/core': + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-blueprint-test-helpers: specifier: ^0.19.2 - version: 0.19.2 + version: 0.19.2(ember-cli@5.3.0) ember-inflector: specifier: ^4.0.2 version: 4.0.2(@babel/core@7.23.2) @@ -1751,10 +2226,22 @@ importers: dependenciesMeta: '@ember-data/adapter': injected: true + '@ember-data/debug': + injected: true + '@ember-data/graph': + injected: true + '@ember-data/json-api': + injected: true + '@ember-data/legacy-compat': + injected: true '@ember-data/model': injected: true '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true + '@ember-data/request-utils': + injected: true '@ember-data/serializer': injected: true '@ember-data/store': @@ -1763,10 +2250,22 @@ importers: injected: true '@ember-data/unpublished-test-infra': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true + ember-cli: + injected: true + ember-cli-blueprint-test-helpers: + injected: true + ember-inflector: injected: true tests/builders: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -1776,40 +2275,43 @@ importers: version: 7.23.2 '@ember-data/active-record': specifier: workspace:5.5.0-alpha.11 - version: file:packages/active-record(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/active-record(@babel/core@7.23.2)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/debug': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: link:../../packages/graph + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.5.0-alpha.11 - version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/model': specifier: workspace:5.5.0-alpha.11 - version: file:packages/model(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/rest': specifier: workspace:5.5.0-alpha.11 - version: file:packages/rest(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/rest(@babel/core@7.23.2)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 - version: link:../../packages/tracking + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -1833,10 +2335,10 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 - '@warp-drive/core': + version: 4.0.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/diagnostic': specifier: workspace:5.5.0-alpha.11 version: file:packages/diagnostic(@ember/test-helpers@3.2.0)(@embroider/addon-shim@1.8.6)(ember-cli-test-loader@3.1.0) @@ -1845,10 +2347,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -1894,6 +2396,10 @@ importers: dependenciesMeta: '@ember-data/active-record': injected: true + '@ember-data/debug': + injected: true + '@ember-data/graph': + injected: true '@ember-data/json-api': injected: true '@ember-data/legacy-compat': @@ -1910,14 +2416,24 @@ importers: injected: true '@ember-data/store': injected: true + '@ember-data/tracking': + injected: true '@ember-data/unpublished-test-infra': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': injected: true + ember-inflector: + injected: true tests/docs: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: qunit: specifier: 2.19.4 @@ -1936,34 +2452,34 @@ importers: version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.5.0-alpha.11 - version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/model': specifier: workspace:5.5.0-alpha.11 - version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/serializer': specifier: workspace:5.5.0-alpha.11 - version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/optional-features': specifier: ^2.0.0 version: 2.0.0 @@ -1984,10 +2500,10 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 - '@warp-drive/core': + version: 4.0.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/diagnostic': specifier: workspace:5.5.0-alpha.11 version: file:packages/diagnostic(@ember/test-helpers@3.2.0)(@embroider/addon-shim@1.8.6)(ember-cli-test-loader@3.1.0) @@ -1996,10 +2512,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -2030,6 +2546,9 @@ importers: loader.js: specifier: ^4.7.0 version: 4.7.0 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 webpack: specifier: ^5.89.0 version: 5.89.0 @@ -2056,12 +2575,20 @@ importers: injected: true '@ember-data/unpublished-test-infra': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': injected: true + ember-inflector: + injected: true tests/ember-data__graph: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -2069,36 +2596,39 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/debug': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.5.0-alpha.11 - version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/model': specifier: workspace:5.5.0-alpha.11 - version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -2116,7 +2646,7 @@ importers: version: 1.8.6 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) '@glimmer/component': specifier: ^1.1.2 version: 1.1.2(@babel/core@7.23.2) @@ -2125,10 +2655,10 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 - '@warp-drive/core': + version: 4.0.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/diagnostic': specifier: workspace:5.5.0-alpha.11 version: file:packages/diagnostic(@ember/test-helpers@3.2.0)(@embroider/addon-shim@1.8.6)(ember-cli-test-loader@3.1.0) @@ -2137,13 +2667,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) - ember-cli-blueprint-test-helpers: - specifier: ^0.19.2 - version: 0.19.2 + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -2190,6 +2717,8 @@ importers: specifier: ^5.89.0 version: 5.89.0 dependenciesMeta: + '@ember-data/debug': + injected: true '@ember-data/graph': injected: true '@ember-data/json-api': @@ -2210,12 +2739,20 @@ importers: injected: true '@ember-data/unpublished-test-infra': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': injected: true + ember-inflector: + injected: true tests/ember-data__json-api: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -2225,25 +2762,28 @@ importers: version: 7.23.2 '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -2261,7 +2801,7 @@ importers: version: 1.8.6 '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) '@glimmer/component': specifier: ^1.1.2 version: 1.1.2(@babel/core@7.23.2) @@ -2270,10 +2810,10 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 - '@warp-drive/core': + version: 4.0.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/diagnostic': specifier: workspace:5.5.0-alpha.11 version: file:packages/diagnostic(@ember/test-helpers@3.2.0)(@embroider/addon-shim@1.8.6)(ember-cli-test-loader@3.1.0) @@ -2282,13 +2822,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) - ember-cli-blueprint-test-helpers: - specifier: ^0.19.2 - version: 0.19.2 + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -2341,6 +2878,8 @@ importers: injected: true '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true '@ember-data/request-utils': injected: true '@ember-data/store': @@ -2349,12 +2888,20 @@ importers: injected: true '@ember-data/unpublished-test-infra': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': injected: true + ember-inflector: + injected: true tests/ember-data__model: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -2364,16 +2911,31 @@ importers: version: 7.23.2 '@ember-data/adapter': specifier: workspace:5.5.0-alpha.11 - version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + '@ember-data/graph': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/serializer': specifier: workspace:5.5.0-alpha.11 - version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) @@ -2397,10 +2959,10 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 - '@warp-drive/core': + version: 4.0.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/diagnostic': specifier: workspace:5.5.0-alpha.11 version: file:packages/diagnostic(@ember/test-helpers@3.2.0)(@embroider/addon-shim@1.8.6)(ember-cli-test-loader@3.1.0) @@ -2409,10 +2971,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -2449,20 +3011,38 @@ importers: dependenciesMeta: '@ember-data/adapter': injected: true + '@ember-data/graph': + injected: true + '@ember-data/json-api': + injected: true + '@ember-data/legacy-compat': + injected: true '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true + '@ember-data/request-utils': + injected: true '@ember-data/serializer': injected: true '@ember-data/store': injected: true '@ember-data/tracking': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': injected: true + ember-inflector: + injected: true tests/ember-data__request: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -2475,7 +3055,7 @@ importers: version: file:packages/private-build-infra '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -2499,13 +3079,16 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 + version: 4.0.7 + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/diagnostic': specifier: workspace:5.5.0-alpha.11 version: file:packages/diagnostic(@ember/test-helpers@3.2.0)(@embroider/addon-shim@1.8.6)(ember-cli-test-loader@3.1.0) '@warp-drive/holodeck': specifier: workspace:5.5.0-alpha.11 - version: file:packages/holodeck + version: file:packages/holodeck(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) bun-types: specifier: ^1.0.6 version: 1.0.6 @@ -2514,13 +3097,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) - ember-cli-blueprint-test-helpers: - specifier: ^0.19.2 - version: 0.19.2 + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -2577,12 +3157,22 @@ importers: injected: true '@ember-data/request': injected: true + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true '@warp-drive/diagnostic': injected: true '@warp-drive/holodeck': injected: true + ember-inflector: + injected: true tests/ember-data__serializer: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -2592,34 +3182,37 @@ importers: version: 7.23.2 '@ember-data/adapter': specifier: workspace:5.5.0-alpha.11 - version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + '@ember-data/debug': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.5.0-alpha.11 - version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/model': specifier: workspace:5.5.0-alpha.11 - version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/optional-features': specifier: ^2.0.0 version: 2.0.0 @@ -2637,19 +3230,19 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 - '@warp-drive/core': + version: 4.0.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) ember-auto-import: specifier: ^2.6.3 version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -2692,6 +3285,8 @@ importers: dependenciesMeta: '@ember-data/adapter': injected: true + '@ember-data/debug': + injected: true '@ember-data/graph': injected: true '@ember-data/json-api': @@ -2710,7 +3305,11 @@ importers: injected: true '@ember-data/unpublished-test-infra': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true + ember-inflector: injected: true tests/embroider-basic-compat: @@ -2723,10 +3322,13 @@ importers: version: 2.6.3(webpack@5.89.0) ember-data: specifier: workspace:5.5.0-alpha.11 - version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(ember-source@5.3.0) + version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-source@5.3.0) ember-inflector: specifier: ^4.0.2 version: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 webpack: specifier: ^5.89.0 version: 5.89.0 @@ -2739,7 +3341,7 @@ importers: version: 7.23.2 '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/optional-features': specifier: ^2.0.0 version: 2.0.0 @@ -2763,25 +3365,25 @@ importers: version: 1.1.2 '@types/ember': specifier: ^4.0.6 - version: 4.0.6(@babel/core@7.23.2) + version: 4.0.8(@babel/core@7.23.2) '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 + version: 4.0.7 ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) ember-cli-fastboot: specifier: ^4.1.1 - version: 4.1.1(@babel/core@7.23.2) + version: 4.1.1(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0) ember-cli-fastboot-testing: specifier: ^0.6.1 - version: 0.6.1(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) + version: 0.6.1(@babel/core@7.23.2)(@ember/test-helpers@3.2.0)(ember-cli-fastboot@4.1.1)(ember-cli@5.3.0)(ember-source@5.3.0)(webpack@5.89.0) ember-cli-htmlbars: specifier: ^6.3.0 version: 6.3.0 @@ -2821,14 +3423,18 @@ importers: dependenciesMeta: '@ember-data/unpublished-test-infra': injected: true + '@ember/string': + injected: true ember-data: injected: true + ember-inflector: + injected: true tests/fastboot: dependencies: '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/string': specifier: 3.1.1 version: 3.1.1(@babel/core@7.23.2) @@ -2837,10 +3443,13 @@ importers: version: 2.6.3(webpack@5.89.0) ember-data: specifier: workspace:5.5.0-alpha.11 - version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(ember-source@5.3.0) + version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-source@5.3.0) ember-inflector: specifier: ^4.0.2 version: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 webpack: specifier: ^5.89.0 version: 5.89.0 @@ -2865,25 +3474,25 @@ importers: version: 1.1.2 '@types/ember': specifier: ^4.0.6 - version: 4.0.6(@babel/core@7.23.2) + version: 4.0.8(@babel/core@7.23.2) '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 + version: 4.0.7 ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) ember-cli-fastboot: specifier: ^4.1.1 - version: 4.1.1(@babel/core@7.23.2) + version: 4.1.1(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0) ember-cli-fastboot-testing: specifier: ^0.6.1 - version: 0.6.1(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) + version: 0.6.1(@babel/core@7.23.2)(@ember/test-helpers@3.2.0)(ember-cli-fastboot@4.1.1)(ember-cli@5.3.0)(ember-source@5.3.0)(webpack@5.89.0) ember-cli-htmlbars: specifier: ^6.3.0 version: 6.3.0 @@ -2926,10 +3535,18 @@ importers: dependenciesMeta: '@ember-data/unpublished-test-infra': injected: true + '@ember/string': + injected: true ember-data: injected: true + ember-inflector: + injected: true tests/full-data-asset-size-app: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -2957,10 +3574,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -2972,7 +3589,7 @@ importers: version: 4.0.2 ember-data: specifier: workspace:5.5.0-alpha.11 - version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(ember-source@5.3.0) + version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-source@5.3.0) ember-load-initializers: specifier: ^2.1.2 version: 2.1.2(@babel/core@7.23.2) @@ -2997,10 +3614,16 @@ importers: dependenciesMeta: '@ember-data/private-build-infra': injected: true + '@ember/string': + injected: true ember-data: injected: true tests/main: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -3011,12 +3634,45 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/adapter': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/adapter(@babel/core@7.23.2)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + '@ember-data/debug': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) + '@ember-data/graph': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@packages+request-utils)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/model': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra + '@ember-data/request': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': + specifier: workspace:5.5.0-alpha.11 + version: link:../../packages/request-utils + '@ember-data/serializer': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/store': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/tracking': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -3031,7 +3687,7 @@ importers: version: 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) '@embroider/macros': specifier: ^1.12.2 - version: 1.13.1(@babel/core@7.23.2) + version: 1.13.2(@babel/core@7.23.2) '@glimmer/component': specifier: ^1.1.2 version: 1.1.2(@babel/core@7.23.2) @@ -3040,25 +3696,28 @@ importers: version: 1.1.2 '@types/ember': specifier: ^4.0.6 - version: 4.0.6(@babel/core@7.23.2) + version: 4.0.8(@babel/core@7.23.2) '@types/ember__debug': specifier: ^4.0.5 - version: 4.0.5(@babel/core@7.23.2) + version: 4.0.6(@babel/core@7.23.2) '@types/ember__object': specifier: ^4.0.8 - version: 4.0.8(@babel/core@7.23.2) + version: 4.0.9(@babel/core@7.23.2) '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 + version: 4.0.7 '@types/ember__utils': specifier: ^4.0.4 - version: 4.0.4(@babel/core@7.23.2) + version: 4.0.5(@babel/core@7.23.2) '@types/qunit': specifier: ^2.19.6 - version: 2.19.6 + version: 2.19.7 + '@warp-drive/core-types': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/holodeck': specifier: workspace:5.5.0-alpha.11 - version: file:packages/holodeck + version: file:packages/holodeck(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) broccoli-concat: specifier: ^4.2.5 version: 4.2.5 @@ -3085,10 +3744,10 @@ importers: version: 1.0.2(@babel/core@7.23.2)(ember-source@5.3.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -3106,7 +3765,7 @@ importers: version: 3.1.0(@babel/core@7.23.2) ember-data: specifier: workspace:5.5.0-alpha.11 - version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(ember-source@5.3.0) + version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-source@5.3.0) ember-decorators-polyfill: specifier: ^1.1.5 version: 1.1.5(@babel/core@7.23.2) @@ -3179,6 +3838,8 @@ importers: injected: true '@ember-data/private-build-infra': injected: true + '@ember-data/request': + injected: true '@ember-data/serializer': injected: true '@ember-data/store': @@ -3187,10 +3848,16 @@ importers: injected: true '@ember-data/unpublished-test-infra': injected: true + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true '@warp-drive/holodeck': injected: true ember-data: injected: true + ember-inflector: + injected: true tests/performance: dependencies: @@ -3202,7 +3869,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-data: specifier: workspace:5.5.0-alpha.11 - version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(ember-source@5.3.0) + version: file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-source@5.3.0) + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 webpack: specifier: ^5.89.0 version: 5.89.0 @@ -3236,13 +3906,13 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 + version: 4.0.7 ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -3271,10 +3941,16 @@ importers: specifier: 1.0.5 version: 1.0.5 dependenciesMeta: + '@ember/string': + injected: true ember-data: injected: true tests/recommended-json-api: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -3282,36 +3958,39 @@ importers: '@babel/runtime': specifier: ^7.23.2 version: 7.23.2 + '@ember-data/debug': + specifier: workspace:5.5.0-alpha.11 + version: file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.5.0-alpha.11 - version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/model': specifier: workspace:5.5.0-alpha.11 - version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4) + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -3344,25 +4023,22 @@ importers: version: 4.0.2(@babel/core@7.23.2) '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 + version: 4.0.7 '@types/morgan': specifier: ^1.9.6 - version: 1.9.6 - '@warp-drive/core': + version: 1.9.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) ember-auto-import: specifier: ^2.6.3 version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) - ember-cli-blueprint-test-helpers: - specifier: ^0.19.2 - version: 0.19.2 + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -3439,6 +4115,8 @@ importers: specifier: ^5.89.0 version: 5.89.0 dependenciesMeta: + '@ember-data/debug': + injected: true '@ember-data/graph': injected: true '@ember-data/json-api': @@ -3459,12 +4137,24 @@ importers: injected: true '@ember-data/unpublished-test-infra': injected: true - '@warp-drive/core': + '@ember/string': + injected: true + '@warp-drive/core-types': + injected: true + ember-inflector: injected: true - tests/warp-drive__schema: {} + tests/warp-drive__schema: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 tests/warp-drive__schema-record: + dependencies: + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -3474,28 +4164,28 @@ importers: version: 7.23.2 '@ember-data/graph': specifier: workspace:5.5.0-alpha.11 - version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + version: file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/json-api': specifier: workspace:5.5.0-alpha.11 - version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': specifier: workspace:5.5.0-alpha.11 version: file:packages/private-build-infra '@ember-data/request': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request(@babel/core@7.23.2) + version: file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/request-utils': specifier: workspace:5.5.0-alpha.11 - version: file:packages/request-utils(@babel/core@7.23.2) + version: file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/store': specifier: workspace:5.5.0-alpha.11 - version: file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + version: file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': specifier: workspace:5.5.0-alpha.11 version: file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.5.0-alpha.11 - version: link:../../packages/unpublished-test-infra + version: file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -3516,10 +4206,10 @@ importers: version: 1.1.2 '@types/ember__owner': specifier: ^4.0.6 - version: 4.0.6 - '@warp-drive/core': + version: 4.0.7 + '@warp-drive/core-types': specifier: workspace:5.5.0-alpha.11 - version: file:packages/core(@babel/core@7.23.2) + version: file:packages/core-types(@babel/core@7.23.2) '@warp-drive/schema-record': specifier: workspace:5.5.0-alpha.11 version: file:packages/schema-record(@babel/core@7.23.2) @@ -3528,10 +4218,10 @@ importers: version: 2.6.3(webpack@5.89.0) ember-cli: specifier: ~5.3.0 - version: 5.3.0(debug@4.3.4) + version: 5.3.0 ember-cli-babel: specifier: ^8.1.0 - version: 8.1.0(@babel/core@7.23.2) + version: 8.2.0(@babel/core@7.23.2) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.3.0) @@ -3591,10 +4281,6 @@ importers: injected: true '@ember-data/json-api': injected: true - '@ember-data/legacy-compat': - injected: true - '@ember-data/model': - injected: true '@ember-data/private-build-infra': injected: true '@ember-data/request': @@ -3605,24 +4291,29 @@ importers: injected: true '@ember-data/tracking': injected: true - '@warp-drive/core': + '@ember-data/unpublished-test-infra': + injected: true + '@ember/string': + injected: true + '@warp-drive/core-types': injected: true '@warp-drive/schema-record': injected: true + ember-inflector: + injected: true packages: /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 /@babel/cli@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-17E1oSkGk2IwNILM4jtfAvgjt+ohmpfBky8aLerUfYZhiPNg7ca+CRCxZn8QDxwNhV/upsc2VHBCqGFIR+iBfA==} @@ -3632,7 +4323,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 commander: 4.1.1 convert-source-map: 2.0.0 fs-readdir-recursive: 1.1.0 @@ -3648,13 +4339,9 @@ packages: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.13 + '@babel/highlight': 7.22.20 chalk: 2.4.2 - /@babel/compat-data@7.22.20: - resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} - engines: {node: '>=6.9.0'} - /@babel/compat-data@7.23.2: resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} engines: {node: '>=6.9.0'} @@ -3681,7 +4368,7 @@ packages: transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.51.0): + /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.52.0): resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -3690,10 +4377,9 @@ packages: dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.51.0 + eslint: 8.52.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - dev: true /@babel/generator@7.23.0: resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} @@ -3701,7 +4387,7 @@ packages: dependencies: '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: @@ -3720,9 +4406,9 @@ packages: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.22.20 + '@babel/compat-data': 7.23.2 '@babel/helper-validator-option': 7.22.15 - browserslist: 4.21.10 + browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 @@ -3736,7 +4422,7 @@ packages: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 @@ -3754,20 +4440,6 @@ packages: regexpu-core: 5.3.2 semver: 6.3.1 - /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.23.2): - resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.4 - transitivePeerDependencies: - - supports-color - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.2): resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: @@ -3778,10 +4450,9 @@ packages: '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.4 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} @@ -3800,8 +4471,8 @@ packages: dependencies: '@babel/types': 7.23.0 - /@babel/helper-member-expression-to-functions@7.22.15: - resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==} + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.0 @@ -3845,18 +4516,6 @@ packages: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 - dev: true - - /@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.23.2): - resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.10 /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} @@ -3866,7 +4525,7 @@ packages: dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 /@babel/helper-simple-access@7.22.5: @@ -3891,10 +4550,6 @@ packages: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.15: - resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} - engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -3903,14 +4558,6 @@ packages: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.22.10: - resolution: {integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - /@babel/helper-wrap-function@7.22.20: resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} @@ -3918,7 +4565,6 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.22.15 '@babel/types': 7.23.0 - dev: true /@babel/helpers@7.23.2(supports-color@8.1.1): resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} @@ -3930,8 +4576,8 @@ packages: transitivePeerDependencies: - supports-color - /@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 @@ -3976,19 +4622,6 @@ packages: '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-proposal-decorators@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-kYsT+f5ARWF6AdFmqoEEp+hpqxEB8vGmRWfw2aj78M2vTwS2uHW91EF58iFm1Z9U8Y/RrLu2XKJn46P9ca1b0w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.2) - /@babel/plugin-proposal-decorators@7.23.2(@babel/core@7.23.2): resolution: {integrity: sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg==} engines: {node: '>=6.9.0'} @@ -4001,7 +4634,6 @@ packages: '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) '@babel/helper-split-export-declaration': 7.22.6 '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.2) - dev: true /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.2): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} @@ -4223,18 +4855,6 @@ packages: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-async-generator-functions@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.2): resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==} engines: {node: '>=6.9.0'} @@ -4246,7 +4866,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - dev: true /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.2): resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} @@ -4257,7 +4876,7 @@ packages: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.23.2) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2): resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} @@ -4268,15 +4887,6 @@ packages: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-block-scoping@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} engines: {node: '>=6.9.0'} @@ -4334,15 +4944,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 - /@babel/plugin-transform-destructuring@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} engines: {node: '>=6.9.0'} @@ -4351,7 +4952,6 @@ packages: dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.2): resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} @@ -4460,16 +5060,6 @@ packages: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} engines: {node: '>=6.9.0'} @@ -4479,7 +5069,6 @@ packages: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) '@babel/helper-plugin-utils': 7.22.5 - dev: true /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} @@ -4492,18 +5081,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 - /@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} engines: {node: '>=6.9.0'} @@ -4515,7 +5092,6 @@ packages: '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 - dev: true /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.2): resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} @@ -4599,17 +5175,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) - /@babel/plugin-transform-optional-chaining@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) - /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.2): resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} engines: {node: '>=6.9.0'} @@ -4680,22 +5245,6 @@ packages: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-runtime@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.23.2) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.23.2) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.23.2) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - /@babel/plugin-transform-runtime@7.23.2(@babel/core@7.23.2): resolution: {integrity: sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==} engines: {node: '>=6.9.0'} @@ -4711,7 +5260,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2): resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} @@ -4763,232 +5311,52 @@ packages: resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) - - /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2): - resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.22.5 - - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) - '@babel/helper-plugin-utils': 7.22.5 - - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) - '@babel/helper-plugin-utils': 7.22.5 - - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) - '@babel/helper-plugin-utils': 7.22.5 - - /@babel/preset-env@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.20 - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-async-generator-functions': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-destructuring': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.2) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.2) - '@babel/types': 7.23.0 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.23.2) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.23.2) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.23.2) - core-js-compat: 3.32.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - /@babel/preset-env@7.22.20(@babel/core@7.23.2): - resolution: {integrity: sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.20 - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-async-generator-functions': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-destructuring': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.2) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.2) - '@babel/types': 7.23.0 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.23.2) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.23.2) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.23.2) - core-js-compat: 3.32.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2(supports-color@8.1.1) + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) + + /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2): + resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 /@babel/preset-env@7.23.2(@babel/core@7.23.2): resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==} @@ -5075,11 +5443,10 @@ packages: babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2) babel-plugin-polyfill-corejs3: 0.8.5(@babel/core@7.23.2) babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2) - core-js-compat: 3.32.1 + core-js-compat: 3.33.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.2): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} @@ -5127,23 +5494,6 @@ packages: '@babel/parser': 7.23.0 '@babel/types': 7.23.0 - /@babel/traverse@7.23.0: - resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - debug: 4.3.4(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/traverse@7.23.2(supports-color@8.1.1): resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} @@ -5161,14 +5511,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types@7.22.15: - resolution: {integrity: sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.15 - to-fast-properties: 2.0.0 - /@babel/types@7.23.0: resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} @@ -5215,7 +5557,7 @@ packages: resolution: {integrity: sha512-UbXJ+k3QOrYN4SRPHgXCqYIJ+yWWUg1+vr0H4DhdQPTy8LJfyqwZ2tc5uqpSSnEXE+/1KopHBE5J8GDagAg5cg==} engines: {node: 12.* || 14.* || >= 16} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color @@ -5227,12 +5569,12 @@ packages: ember-source: '*' dependencies: '@ember/test-waiters': 3.0.2(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) '@simple-dom/interface': 1.4.0 broccoli-debug: 0.6.5 broccoli-funnel: 3.0.8 ember-auto-import: 2.6.3(webpack@5.89.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-htmlbars: 6.3.0 ember-source: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) transitivePeerDependencies: @@ -5246,7 +5588,7 @@ packages: engines: {node: 10.* || 12.* || >= 14.*} dependencies: calculate-cache-key-for-tree: 2.0.0 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-version-checker: 5.1.2 semver: 7.5.4 transitivePeerDependencies: @@ -5260,7 +5602,7 @@ packages: dependencies: '@embroider/core': 3.3.0 '@rollup/pluginutils': 4.2.1 - content-tag: 1.0.1 + content-tag: 1.1.2 fs-extra: 10.1.0 minimatch: 3.1.2 rollup-plugin-copy-assets: 2.0.3(rollup@4.1.4) @@ -5313,11 +5655,11 @@ packages: '@babel/plugin-transform-runtime': 7.23.2(@babel/core@7.23.2) '@babel/preset-env': 7.23.2(@babel/core@7.23.2) '@babel/runtime': 7.23.2 - '@babel/traverse': 7.23.0 + '@babel/traverse': 7.23.2(supports-color@8.1.1) '@embroider/core': 3.3.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@types/babel__code-frame': 7.0.3 - '@types/yargs': 17.0.24 + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@types/babel__code-frame': 7.0.5 + '@types/yargs': 17.0.29 assert-never: 1.2.1 babel-import-util: 2.0.1 babel-plugin-ember-template-compilation: 2.2.0 @@ -5341,7 +5683,7 @@ packages: jsdom: 16.7.0(supports-color@8.1.1) lodash: 4.17.21 pkg-up: 3.1.0 - resolve: 1.22.4 + resolve: 1.22.8 resolve-package-path: 4.0.3 semver: 7.5.4 symlink-or-copy: 1.3.1 @@ -5363,8 +5705,8 @@ packages: dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/parser': 7.23.0 - '@babel/traverse': 7.23.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@babel/traverse': 7.23.2(supports-color@8.1.1) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) '@embroider/shared-internals': 2.5.0(supports-color@8.1.1) assert-never: 1.2.1 babel-plugin-ember-template-compilation: 2.2.0 @@ -5374,14 +5716,14 @@ packages: broccoli-source: 3.0.1 debug: 4.3.4(supports-color@8.1.1) 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 js-string-escape: 1.0.1 jsdom: 16.7.0(supports-color@8.1.1) lodash: 4.17.21 - resolve: 1.22.4 + resolve: 1.22.8 resolve-package-path: 4.0.3 typescript-memoize: 1.1.1 walk-sync: 3.0.0 @@ -5407,8 +5749,8 @@ packages: webpack: 5.89.0 dev: true - /@embroider/macros@1.13.1(@babel/core@7.23.2): - resolution: {integrity: sha512-4htraP/rNIht8uCxXoc59Bw2EsBFfc4YUQD9XSpzJ4xUr1V0GQf9wL/noeSuYSxIhwRfZOErnJhsdyf1hH+I/A==} + /@embroider/macros@1.13.2(@babel/core@7.23.2): + resolution: {integrity: sha512-AUgJ71xG8kjuTx8XB1AQNBiebJuXRfhcHr318dCwnQz9VRXdYSnEEqf38XRvGYIoCvIyn/3c72LrSwzaJqknOA==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@glint/template': ^1.0.0 @@ -5416,34 +5758,18 @@ packages: '@glint/template': optional: true dependencies: - '@embroider/shared-internals': 2.4.0 + '@embroider/shared-internals': 2.5.0(supports-color@8.1.1) assert-never: 1.2.1 - babel-import-util: 2.0.0 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + babel-import-util: 2.0.1 + ember-cli-babel: 8.2.0(@babel/core@7.23.2) find-up: 5.0.0 lodash: 4.17.21 - resolve: 1.22.4 + resolve: 1.22.8 semver: 7.5.4 transitivePeerDependencies: - '@babel/core' - 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(supports-color@8.1.1) - 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(supports-color@8.1.1): resolution: {integrity: sha512-7qzrb7GVIyNqeY0umxoeIvjDC+ay1b+wb2yCVuYTUYrFfLAkLEy9FNI3iWCi3RdQ9OFjgcAxAnwsAiPIMZZ3pQ==} engines: {node: 12.* || 14.* || >= 16} @@ -5475,7 +5801,7 @@ packages: '@embroider/core': 3.3.0 '@embroider/hbs-loader': 3.0.2(@embroider/core@3.3.0)(webpack@5.89.0) '@embroider/shared-internals': 2.5.0(supports-color@8.1.1) - '@types/supports-color': 8.1.1 + '@types/supports-color': 8.1.2 assert-never: 1.2.1 babel-loader: 8.3.0(@babel/core@7.23.2)(webpack@5.89.0) babel-preset-env: 1.7.0(supports-color@8.1.1) @@ -5491,7 +5817,7 @@ packages: source-map-url: 0.4.1 style-loader: 2.0.0(webpack@5.89.0) supports-color: 8.1.1 - terser: 5.19.4 + terser: 5.22.0 thread-loader: 3.0.4(webpack@5.89.0) webpack: 5.89.0 transitivePeerDependencies: @@ -5500,20 +5826,18 @@ packages: - utf-8-validate dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.52.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} + /@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 /@eslint/eslintrc@2.1.2: resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} @@ -5522,7 +5846,7 @@ packages: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 - globals: 13.21.0 + globals: 13.23.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -5530,12 +5854,10 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.52.0: + resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -5559,7 +5881,7 @@ packages: '@glimmer/util': 0.44.0 broccoli-file-creator: 2.1.1 broccoli-merge-trees: 4.2.0 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-get-component-path-option: 1.0.0 ember-cli-is-package-missing: 1.0.0 ember-cli-normalize-entity-name: 1.0.0 @@ -5625,7 +5947,7 @@ packages: '@glimmer/interfaces': 0.84.2 '@glimmer/reference': 0.84.2 '@glimmer/util': 0.84.2 - '@glimmer/validator': 0.84.2 + '@glimmer/validator': 0.84.3 /@glimmer/node@0.84.2: resolution: {integrity: sha512-kefGxH+0N0xNyb6QovdPzmIBefZwu8TID45qsASgVbFx7mfFiXjQiyaxbRUyam4MAEb8Nzzx1Byxn1FQCYyLdA==} @@ -5669,17 +5991,7 @@ packages: '@glimmer/global-context': 0.84.2 '@glimmer/interfaces': 0.84.2 '@glimmer/util': 0.84.2 - '@glimmer/validator': 0.84.2 - - /@glimmer/reference@0.84.3: - resolution: {integrity: sha512-lV+p/aWPVC8vUjmlvYVU7WQJsLh319SdXuAWoX/SE3pq340BJlAJiEcAc6q52y9JNhT57gMwtjMX96W5Xcx/qw==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.84.3 - '@glimmer/interfaces': 0.84.3 - '@glimmer/util': 0.84.3 '@glimmer/validator': 0.84.3 - dev: true /@glimmer/runtime@0.84.2: resolution: {integrity: sha512-mUefYwq8l4df61iWYsRKVYQUqAeCgeZ3fuYNRNbvKDudnT9bQXayJLqr6ZxwTVaDoeKjg+7lMjkDSDSvqoxfsA==} @@ -5693,7 +6005,7 @@ packages: '@glimmer/program': 0.84.2 '@glimmer/reference': 0.84.2 '@glimmer/util': 0.84.2 - '@glimmer/validator': 0.84.2 + '@glimmer/validator': 0.84.3 '@glimmer/vm': 0.84.2 '@glimmer/wire-format': 0.84.2 '@simple-dom/interface': 1.4.0 @@ -5720,7 +6032,7 @@ packages: resolution: {integrity: sha512-cyV32zsHh+CnftuRX84ALZpd2rpbDrhLhJnTXn9W//QpqdRZ5rdMsxSY9fOsj0CKEc706tmEU299oNnDc0d7tA==} dependencies: '@glimmer/env': 0.1.7 - '@glimmer/validator': 0.44.0 + '@glimmer/validator': 0.84.3 /@glimmer/util@0.44.0: resolution: {integrity: sha512-duAsm30uVK9jSysElCbLyU6QQYO2X9iLDLBIBUcCqck9qN1o3tK2qWiHbGK5d6g8E2AJ4H88UrfElkyaJlGrwg==} @@ -5739,15 +6051,6 @@ packages: '@glimmer/interfaces': 0.84.3 '@simple-dom/interface': 1.4.0 - /@glimmer/validator@0.44.0: - resolution: {integrity: sha512-i01plR0EgFVz69GDrEuFgq1NheIjZcyTy3c7q+w7d096ddPVeVcRzU3LKaqCfovvLJ+6lJx40j45ecycASUUyw==} - - /@glimmer/validator@0.84.2: - resolution: {integrity: sha512-9tpSmwiktsJDqriNEiFfyP+9prMSdk08THA6Ik71xS/sudBKxoDpul678uvyEYST/+Z23F8MxwKccC+QxCMXNA==} - dependencies: - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.84.2 - /@glimmer/validator@0.84.3: resolution: {integrity: sha512-RTBV4TokUB0vI31UC7ikpV7lOYpWUlyqaKV//pRC4pexYMlmqnVhkFrdiimB/R1XyNdUOQUmnIAcdic39NkbhQ==} dependencies: @@ -5773,6 +6076,10 @@ packages: '@glimmer/interfaces': 0.84.2 '@glimmer/util': 0.84.2 + /@gwhitney/detect-indent@7.0.1: + resolution: {integrity: sha512-7bQW+gkKa2kKZPeJf6+c6gFK9ARxQfn+FKy9ScTBppyKRWH2KzsmweXUoklqeEiHiNVWaeP5csIdsNq6w7QhzA==} + engines: {node: '>=12.20'} + /@handlebars/parser@2.0.0: resolution: {integrity: sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==} @@ -5788,7 +6095,7 @@ packages: broccoli-funnel: 3.0.8 broccoli-merge-trees: 4.2.0 broccoli-rollup: 5.0.0 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-htmlbars: 6.3.0 ember-cli-version-checker: 5.1.2 ember-raf-scheduler: 0.3.0(@babel/core@7.23.2) @@ -5797,25 +6104,22 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -5835,7 +6139,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -5849,20 +6153,22 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - /@ljharb/through@2.3.9: - resolution: {integrity: sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==} + /@ljharb/through@2.3.11: + resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 /@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3: resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -5874,7 +6180,6 @@ packages: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: eslint-scope: 5.1.1 - dev: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -5954,7 +6259,6 @@ packages: open: 9.1.0 picocolors: 1.0.0 tslib: 2.6.2 - dev: true /@pm2/agent@2.0.3: resolution: {integrity: sha512-xkqqCoTf5VsciMqN0vb9jthW7olVAi4KRFNddCc7ZkeJZ3i8QwZANr4NSH2H5DvseRFHq7MiPspRY/EWAFWWTg==} @@ -6015,16 +6319,141 @@ packages: transitivePeerDependencies: - supports-color + /@pnpm/cli-meta@5.0.1: + resolution: {integrity: sha512-s7rVArn3s78w2ZDWC2/NzMaYBzq39QBmo1BQ4+qq1liX+ltSErDyAx3M/wvvJQgc+Ur3dZJYuc9t96roPnW3XQ==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/types': 9.1.0 + load-json-file: 6.2.0 + + /@pnpm/cli-utils@2.0.9(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-mNujOPCopIi4r7D2HJ96hHKPEr/UPuZGruQvPVvjoc/pCP0l+y38xZAT72W2WhEM4Fo/zP8L+6g/zf88qUSbbg==} + engines: {node: '>=16.14'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + dependencies: + '@pnpm/cli-meta': 5.0.1 + '@pnpm/config': 18.4.0(@pnpm/logger@5.0.0) + '@pnpm/default-reporter': 12.2.3(@pnpm/logger@5.0.0) + '@pnpm/error': 5.0.1 + '@pnpm/logger': 5.0.0 + '@pnpm/manifest-utils': 5.0.1(@pnpm/logger@5.0.0) + '@pnpm/package-is-installable': 8.0.2(@pnpm/logger@5.0.0) + '@pnpm/read-project-manifest': 5.0.1 + '@pnpm/types': 9.1.0 + chalk: 4.1.2 + load-json-file: 6.2.0 + + /@pnpm/config.env-replace@1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + /@pnpm/config@18.4.0(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-8B4Pw7cnMvO3kYUBZYYIjg6BcGhHwxEEkmBAcqAeF9NM6LmG6F0lFNsOf6XPfHZMx2vUTpZxaWo0FQo1uU2AAw==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/constants': 7.1.0 + '@pnpm/error': 5.0.1 + '@pnpm/git-utils': 1.0.0 + '@pnpm/matcher': 5.0.0 + '@pnpm/npm-conf': 2.2.0 + '@pnpm/pnpmfile': 5.0.7(@pnpm/logger@5.0.0) + '@pnpm/read-project-manifest': 5.0.1 + '@pnpm/types': 9.1.0 + better-path-resolve: 1.0.0 + camelcase: 6.3.0 + camelcase-keys: 6.2.2 + can-write-to-dir: 1.1.1 + is-subdir: 1.2.0 + is-windows: 1.0.2 + normalize-registry-url: 2.0.0 + path-absolute: 1.0.1 + path-name: 1.0.0 + ramda: /@pnpm/ramda@0.28.1 + read-ini-file: 4.0.0 + realpath-missing: 1.1.0 + which: 3.0.1 + transitivePeerDependencies: + - '@pnpm/logger' + + /@pnpm/constants@7.1.0: + resolution: {integrity: sha512-PzpiPtGF+bIrmkNaHgOIfBZw669+rkUtt/5UFzHukiETwI4/+BTYz8FAr+m5Dfuns531Y+fYRFOpB0PdbAU0+w==} + engines: {node: '>=16.14'} + /@pnpm/constants@7.1.1: resolution: {integrity: sha512-31pZqMtjwV+Vaq7MaPrT1EoDFSYwye3dp6BiHIGRJmVThCQwySRKM7hCvqqI94epNkqFAAYoWrNynWoRYosGdw==} engines: {node: '>=16.14'} + /@pnpm/core-loggers@9.0.1(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-qP/kk6OeLSxqhvA4n6u4XB6evqD9h1w9p4qtdBOVbkZloCK7L9btkSmKNolBoQ3wrOz7WRFfjRekYUSKphMMCg==} + engines: {node: '>=16.14'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + dependencies: + '@pnpm/logger': 5.0.0 + '@pnpm/types': 9.1.0 + + /@pnpm/dedupe.issues-renderer@1.0.0: + resolution: {integrity: sha512-vlo2t1ERLH3vsL1PtlCue6qfpWofN2Pt2bvGIPtN6Y4siCZVwjy9GU3yXJk1wS2+a7qj9plPiobebadJgV/VHw==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/dedupe.types': 1.0.0 + archy: 1.0.0 + chalk: 4.1.2 + + /@pnpm/dedupe.types@1.0.0: + resolution: {integrity: sha512-WGZ5E7aMPwaM+WMFYszTCP3Sms/gE0nLgI37gFnNbaKgAh5R7GojSHCxLgXqjiz0Jwx+Qi9BmdDgN1cJs5XBsg==} + engines: {node: '>=16.14'} + + /@pnpm/default-reporter@12.2.3(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-ALV6AQOcRPJ5bZlcCHDFQ4cEqH2B/2Luu0VYoAoofINgbhNDOKCrV6PkqLvnMQps98k1f7mtn4w/u4r99+qr7g==} + engines: {node: '>=16.14'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + dependencies: + '@pnpm/config': 18.4.0(@pnpm/logger@5.0.0) + '@pnpm/core-loggers': 9.0.1(@pnpm/logger@5.0.0) + '@pnpm/dedupe.issues-renderer': 1.0.0 + '@pnpm/dedupe.types': 1.0.0 + '@pnpm/error': 5.0.1 + '@pnpm/logger': 5.0.0 + '@pnpm/render-peer-issues': 4.0.1 + '@pnpm/types': 9.1.0 + ansi-diff: 1.1.1 + boxen: 5.1.2 + chalk: 4.1.2 + normalize-path: 3.0.0 + pretty-bytes: 5.6.0 + pretty-ms: 7.0.1 + ramda: /@pnpm/ramda@0.28.1 + right-pad: 1.0.1 + rxjs: 7.8.1 + semver: 7.5.4 + stacktracey: 2.1.8 + string-length: 4.0.2 + strip-ansi: 6.0.1 + + /@pnpm/error@5.0.1: + resolution: {integrity: sha512-JQSOeSEqrV6k6+kKgrlSJ7gddJRcjxtNCxSVJRIqwckkGSdSTNpXmKEdGgLlaDuEwElPAZUmLDGSqk5InJ5pMA==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/constants': 7.1.0 + /@pnpm/error@5.0.2: resolution: {integrity: sha512-0TEm+tWNYm+9uh6DSKyRbv8pv/6b4NL0PastLvMxIoqZbBZ5Zj1cYi332R9xsSUi31ZOsu2wpgn/bC7DA9hrjg==} engines: {node: '>=16.14'} dependencies: '@pnpm/constants': 7.1.1 + /@pnpm/fetcher-base@14.0.1: + resolution: {integrity: sha512-DXPZ33CrmDQXnYzwvqyP7I0BF0MQELo4ah2JGpXhLhgOdzU+vj7zdKFo2x82L8anrK861IRi01V8o14oATq1vA==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/resolver-base': 10.0.1 + '@pnpm/types': 9.1.0 + '@types/ssri': 7.1.3 + /@pnpm/find-workspace-dir@6.0.2: resolution: {integrity: sha512-JSrpQUFCs4vY1D5tOmj7qBb+oE2j/lO6341giEdUpvYf3FijY8CY13l8rPjfHV2y3m//utzl0An+q+qx14S6Nw==} engines: {node: '>=16.14'} @@ -6032,6 +6461,237 @@ packages: '@pnpm/error': 5.0.2 find-up: 5.0.0 + /@pnpm/find-workspace-packages@6.0.9(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-80t6m6w3EfOg5k88CR8Eya6aOJi2uXyYGFSv2Y+3DqGAWD2x6CFLM3kop2Zi1nL9THMYpYF3hLnBRbqcJ8rmRg==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/cli-utils': 2.0.9(@pnpm/logger@5.0.0) + '@pnpm/constants': 7.1.0 + '@pnpm/fs.find-packages': 2.0.1 + '@pnpm/types': 9.1.0 + '@pnpm/util.lex-comparator': 1.0.0 + read-yaml-file: 2.1.0 + transitivePeerDependencies: + - '@pnpm/logger' + + /@pnpm/fs.find-packages@2.0.1: + resolution: {integrity: sha512-QxG4YrnqnFdi9zmGxzUUH7YF6hgFqtPjDmiMlUvPbASSFRIr6mIT1rTynos2cbg0bRGXpLpp+0XtyOMdDGnBnQ==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/read-project-manifest': 5.0.1 + '@pnpm/types': 9.1.0 + '@pnpm/util.lex-comparator': 1.0.0 + fast-glob: 3.3.1 + p-filter: 2.1.0 + + /@pnpm/fs.hard-link-dir@2.0.1(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-ZsNyKG9YV9rZRhubj8bLxnysLg1LUwh0rdlVnp6ScIT9CtAA+C74kx2KK9E4TNofgb3qAbRqU4aKOaAoLmTSjg==} + engines: {node: '>=16.14'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + dependencies: + '@pnpm/logger': 5.0.0 + + /@pnpm/git-utils@1.0.0: + resolution: {integrity: sha512-lUI+XrzOJN4zdPGOGnFUrmtXAXpXi8wD8OI0nWOZmlh+raqbLzC3VkXu1zgaduOK6YonOcnQW88O+ojav1rAdA==} + engines: {node: '>=16.14'} + dependencies: + execa: /safe-execa@0.1.2 + + /@pnpm/graceful-fs@3.0.0: + resolution: {integrity: sha512-72kkqIL2sacOVr6Y6B6xDGjRC4QgTLeIGkw/5XYyeMgMeL9mDE0lonZEOL9JuLS0XPOXQoyDtRCSmUrzAA57LQ==} + engines: {node: '>=16.14'} + dependencies: + graceful-fs: 4.2.11 + + /@pnpm/graceful-fs@3.2.0: + resolution: {integrity: sha512-vRoXJxscDpHak7YE9SqCkzfrayn+Lw+YueOeHIPEqkgokrHeYgYeONoc2kGh0ObHaRtNSsonozVfJ456kxLNvA==} + engines: {node: '>=16.14'} + dependencies: + graceful-fs: 4.2.11 + + /@pnpm/hooks.types@1.0.1: + resolution: {integrity: sha512-Zx2hzwxBKv1RmFzyu4pEVY7QeIGUb54smSSYt8GcJgByn+uMXgwJ7ydv9t2Koc90QTqk8J3P2J+RDrZVIQpVQw==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/lockfile-types': 5.1.0 + '@pnpm/types': 9.1.0 + + /@pnpm/lockfile-types@5.1.0: + resolution: {integrity: sha512-14eYp9iOdJ7SyOIVXomXhbVnc14DEhzMLS3eKqxYxi9LkANUfxx1/pwRiRY/lTiP9RFS+OkIcTm2QiLsmNEctw==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/types': 9.1.0 + + /@pnpm/logger@5.0.0: + resolution: {integrity: sha512-YfcB2QrX+Wx1o6LD1G2Y2fhDhOix/bAY/oAnMpHoNLsKkWIRbt1oKLkIFvxBMzLwAEPqnYWguJrYC+J6i4ywbw==} + engines: {node: '>=12.17'} + dependencies: + bole: 5.0.9 + ndjson: 2.0.0 + + /@pnpm/manifest-utils@5.0.1(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-vQUmd0NQNv1yWEeFA4pjuBCs4AqhaHW4bVpuaD19lHE5J9SCs7iNRDpjnxjTm/qgDgO/hqu/spuAXEbPxR8u0A==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/core-loggers': 9.0.1(@pnpm/logger@5.0.0) + '@pnpm/error': 5.0.1 + '@pnpm/types': 9.1.0 + transitivePeerDependencies: + - '@pnpm/logger' + + /@pnpm/matcher@5.0.0: + resolution: {integrity: sha512-uh+JBmW8XHGwz9x0K0Ok+TtMiu3ghEaqHHm7dqIubitBP8y9Y0LLP6D2fxWblogjpVzSlH3DpDR1Vicuhw9/cQ==} + engines: {node: '>=16.14'} + dependencies: + escape-string-regexp: 4.0.0 + + /@pnpm/network.ca-file@1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + dependencies: + graceful-fs: 4.2.10 + + /@pnpm/npm-conf@2.2.0: + resolution: {integrity: sha512-roLI1ul/GwzwcfcVpZYPdrgW2W/drLriObl1h+yLF5syc8/5ULWw2ALbCHUWF+4YltIqA3xFSbG4IwyJz37e9g==} + engines: {node: '>=12'} + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + /@pnpm/package-is-installable@8.0.2(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-eYuqNBjzYf5wXbD4Xm6ZupRPjYxn2sp6mtYL9+bMntx1+yoUlCJABrYcSvbTM7kheoHyHRf+gEQDFKdn5trQ6w==} + engines: {node: '>=16.14'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + dependencies: + '@pnpm/core-loggers': 9.0.1(@pnpm/logger@5.0.0) + '@pnpm/error': 5.0.1 + '@pnpm/logger': 5.0.0 + '@pnpm/types': 9.1.0 + detect-libc: 2.0.2 + execa: /safe-execa@0.1.2 + mem: 8.1.1 + semver: 7.5.4 + + /@pnpm/pnpmfile@5.0.7(@pnpm/logger@5.0.0): + resolution: {integrity: sha512-A8uwamvs9jhf3DYLuGHCngWW8WXEDgcm3nwOeRTWJOOgButgXueIRHcEZPiKgQwy6t116ntimNeW5H3/hjim6w==} + engines: {node: '>=16.14'} + peerDependencies: + '@pnpm/logger': ^5.0.0 + dependencies: + '@pnpm/core-loggers': 9.0.1(@pnpm/logger@5.0.0) + '@pnpm/error': 5.0.1 + '@pnpm/hooks.types': 1.0.1 + '@pnpm/lockfile-types': 5.1.0 + '@pnpm/logger': 5.0.0 + '@pnpm/store-controller-types': 15.0.1 + '@pnpm/types': 9.1.0 + chalk: 4.1.2 + path-absolute: 1.0.1 + + /@pnpm/ramda@0.28.1: + resolution: {integrity: sha512-zcAG+lvU0fMziNeGXpPyCyCJYp5ZVrPElEE4t14jAmViaihohocZ+dDkcRIyAomox8pQsuZnv1EyHR+pOhmUWw==} + + /@pnpm/read-project-manifest@5.0.1: + resolution: {integrity: sha512-MDXuQpYFbabSXzAnqP7VIQqBx5Z1fzOhzB/3YmIXJ+tE7Wue//IR3itMSYlWeaFLo1G5PCJklM2zBdvggRw1nw==} + engines: {node: '>=16.14'} + dependencies: + '@gwhitney/detect-indent': 7.0.1 + '@pnpm/error': 5.0.1 + '@pnpm/graceful-fs': 3.0.0 + '@pnpm/text.comments-parser': 2.0.0 + '@pnpm/types': 9.1.0 + '@pnpm/write-project-manifest': 5.0.1 + fast-deep-equal: 3.1.3 + is-windows: 1.0.2 + json5: 2.2.3 + parse-json: 5.2.0 + read-yaml-file: 2.1.0 + sort-keys: 4.2.0 + strip-bom: 4.0.0 + + /@pnpm/read-project-manifest@5.0.7: + resolution: {integrity: sha512-zq9XlZCbWmpjeNaU6faV51ehD4Rk6nTMv+jWkOGPSAwIG8uBh1NBxOYKx4R9Ixu7x8zNUUdfxOo89c6Ds5cY1w==} + engines: {node: '>=16.14'} + dependencies: + '@gwhitney/detect-indent': 7.0.1 + '@pnpm/error': 5.0.2 + '@pnpm/graceful-fs': 3.2.0 + '@pnpm/text.comments-parser': 2.0.0 + '@pnpm/types': 9.3.0 + '@pnpm/write-project-manifest': 5.0.3 + fast-deep-equal: 3.1.3 + is-windows: 1.0.2 + json5: 2.2.3 + lodash.clonedeep: 4.5.0 + parse-json: 5.2.0 + read-yaml-file: 2.1.0 + sort-keys: 4.2.0 + strip-bom: 4.0.0 + + /@pnpm/render-peer-issues@4.0.1: + resolution: {integrity: sha512-+SsNmbBHH7lBsFrs6dQCEWRtT+Bmq9MYxu+xgkXRplyvjSEQmM0h/UduIw5s8ZAlUuQcxNVTvl0b7ul6OPEIwg==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/types': 9.1.0 + archy: 1.0.0 + chalk: 4.1.2 + cli-columns: 4.0.0 + + /@pnpm/resolver-base@10.0.1: + resolution: {integrity: sha512-2yufLOpiPKQyNVLbL3dgoytkDuuURB5yBOrFtafiuZieGZJid2AeHmFfPhU9hNc/ZM1+wqH3EuVHe/1DdEgm4Q==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/types': 9.1.0 + + /@pnpm/store-controller-types@15.0.1: + resolution: {integrity: sha512-S88sR6xhQ1ZDhMRIjhaRBA11N2OIDU2W+60szQLU8e2bw+KgGU60LbcXMunTdRnJskuB9UfDyoN6YuRtETBqYA==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/fetcher-base': 14.0.1 + '@pnpm/resolver-base': 10.0.1 + '@pnpm/types': 9.1.0 + + /@pnpm/text.comments-parser@2.0.0: + resolution: {integrity: sha512-DRWtTmmxQQtuWHf1xPt9bqzCSq8d0MQF5x1kdpCDMLd7xk3nP4To2/OGkPrb8MKbrWsgCNDwXyKCFlEKrAg7fg==} + engines: {node: '>=16.14'} + dependencies: + strip-comments-strings: 1.2.0 + + /@pnpm/types@9.1.0: + resolution: {integrity: sha512-MMPDMLOY17bfNhLhR9Qmq6/2keoocnR5DWXZfZDC4dKXugrMsE1jB6RnuU8swJIo4zyCsMT/iVSAtl/XK+9Z+A==} + engines: {node: '>=16.14'} + + /@pnpm/types@9.3.0: + resolution: {integrity: sha512-BUm6KWNyiQ575D+zi4OkGWImHv0gM6LQYUY/qK/7j9uxmZ66topXQlZSoFX8rR/FcpIRUTrT325iqFqMHoJnww==} + engines: {node: '>=16.14'} + + /@pnpm/util.lex-comparator@1.0.0: + resolution: {integrity: sha512-3aBQPHntVgk5AweBWZn+1I/fqZ9krK/w01197aYVkAJQGftb+BVWgEepxY5GChjSW12j52XX+CmfynYZ/p0DFQ==} + engines: {node: '>=12.22.0'} + + /@pnpm/write-project-manifest@5.0.1: + resolution: {integrity: sha512-zU4vDfBUx/jUBPmR4CzCqPDOPObb/7iLT3UZvhXSJ8ZXDo9214V6agnJvxQ6bYBcypdiKva0hnb3tmo1chQBYg==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/text.comments-parser': 2.0.0 + '@pnpm/types': 9.1.0 + json5: 2.2.3 + write-file-atomic: 5.0.1 + write-yaml-file: 5.0.0 + + /@pnpm/write-project-manifest@5.0.3: + resolution: {integrity: sha512-B2tH3v0ecp8H3Wg52R3/0hHvsvAdYfmoXn/gMAEjmXhIR8yIAOe9R/YWSMUBDXs8WUH119wB6H3BEJyX8bpznQ==} + engines: {node: '>=16.14'} + dependencies: + '@pnpm/text.comments-parser': 2.0.0 + '@pnpm/types': 9.3.0 + json5: 2.2.3 + write-file-atomic: 5.0.1 + write-yaml-file: 5.0.0 + /@rollup/plugin-babel@6.0.4(@babel/core@7.23.2)(rollup@4.1.4): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} @@ -6065,7 +6725,7 @@ packages: deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 - resolve: 1.22.4 + resolve: 1.22.8 rollup: 4.1.4 dev: true @@ -6086,7 +6746,7 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.3 estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 4.1.4 @@ -6240,15 +6900,15 @@ packages: /@tootallnate/quickjs-emscripten@0.23.0: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - /@types/babel__code-frame@7.0.3: - resolution: {integrity: sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==} + /@types/babel__code-frame@7.0.5: + resolution: {integrity: sha512-tE88HnYMl5iJAB1V9nJCrE1udmwGCoNvx2ayTa8nwkE3UMMRRljANO+sX8D321hIrqf1DlvhAPAo5G6DWaMQNg==} dev: true - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + /@types/body-parser@1.19.4: + resolution: {integrity: sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==} dependencies: - '@types/connect': 3.4.36 - '@types/node': 20.5.9 + '@types/connect': 3.4.37 + '@types/node': 20.8.7 /@types/broccoli-plugin@3.0.0: resolution: {integrity: sha512-f+TcsARR2PovfFRKFdCX0kfH/QoM3ZVD2h1rl2mNvrKO0fq2uBNCBsTU3JanfU4COCt5cXpTfARyUsERlC8vIw==} @@ -6259,267 +6919,266 @@ packages: - supports-color dev: true - /@types/chai-as-promised@7.1.6: - resolution: {integrity: sha512-cQLhk8fFarRVZAXUQV1xEnZgMoPxqKojBvRkqPCKPQCzEhpbbSKl1Uu75kDng7k5Ln6LQLUmNBjLlFthCgm1NA==} + /@types/chai-as-promised@7.1.7: + resolution: {integrity: sha512-APucaP5rlmTRYKtRA6FE5QPP87x76ejw5t5guRJ4y5OgMnwtsvigw7HHhKZlx2MGXLeZd6R/GNZR/IqDHcbtQw==} dependencies: - '@types/chai': 4.3.6 + '@types/chai': 4.3.9 - /@types/chai@4.3.6: - resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==} + /@types/chai@4.3.9: + resolution: {integrity: sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==} - /@types/connect@3.4.36: - resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + /@types/connect@3.4.37: + resolution: {integrity: sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.8.7 /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/cors@2.8.14: - resolution: {integrity: sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==} - dependencies: - '@types/node': 20.5.9 - - /@types/ember@4.0.6(@babel/core@7.23.2): - resolution: {integrity: sha512-5CAqPP20l1CWXT1E0NoiBnQUKqwuPSBq0JJVadEIX65CUzVz3zUIFvNoSl1erePwOeCIiQn9pHa568XwZnD6Mw==} - dependencies: - '@types/ember__application': 4.0.6(@babel/core@7.23.2) - '@types/ember__array': 4.0.4(@babel/core@7.23.2) - '@types/ember__component': 4.0.15(@babel/core@7.23.2) - '@types/ember__controller': 4.0.6(@babel/core@7.23.2) - '@types/ember__debug': 4.0.5(@babel/core@7.23.2) - '@types/ember__engine': 4.0.5(@babel/core@7.23.2) - '@types/ember__error': 4.0.3 - '@types/ember__object': 4.0.8(@babel/core@7.23.2) - '@types/ember__polyfills': 4.0.2 - '@types/ember__routing': 4.0.13(@babel/core@7.23.2) - '@types/ember__runloop': 4.0.4(@babel/core@7.23.2) - '@types/ember__service': 4.0.3(@babel/core@7.23.2) - '@types/ember__string': 3.0.11 - '@types/ember__template': 4.0.2 - '@types/ember__test': 4.0.2(@babel/core@7.23.2) - '@types/ember__utils': 4.0.4(@babel/core@7.23.2) - '@types/rsvp': 4.0.4 + /@types/cors@2.8.15: + resolution: {integrity: sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==} + dependencies: + '@types/node': 20.8.7 + + /@types/ember@4.0.8(@babel/core@7.23.2): + resolution: {integrity: sha512-G0mI5i5ZUBKV8ONQGhpwQVPW67cjPI+R4qi5PkSXcAvMXu6UOxlVtuk/heoEUeBRpfp+jynajFhVTnePJ2KLnA==} + dependencies: + '@types/ember__application': 4.0.9(@babel/core@7.23.2) + '@types/ember__array': 4.0.7(@babel/core@7.23.2) + '@types/ember__component': 4.0.19(@babel/core@7.23.2) + '@types/ember__controller': 4.0.9(@babel/core@7.23.2) + '@types/ember__debug': 4.0.6(@babel/core@7.23.2) + '@types/ember__engine': 4.0.8(@babel/core@7.23.2) + '@types/ember__error': 4.0.4 + '@types/ember__object': 4.0.9(@babel/core@7.23.2) + '@types/ember__polyfills': 4.0.4 + '@types/ember__routing': 4.0.17(@babel/core@7.23.2) + '@types/ember__runloop': 4.0.7(@babel/core@7.23.2) + '@types/ember__service': 4.0.6(@babel/core@7.23.2) + '@types/ember__string': 3.0.12 + '@types/ember__template': 4.0.4 + '@types/ember__test': 4.0.4(@babel/core@7.23.2) + '@types/ember__utils': 4.0.5(@babel/core@7.23.2) + '@types/rsvp': 4.0.6 transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__application@4.0.6(@babel/core@7.23.2): - resolution: {integrity: sha512-ojZUGF8zmTpkTg6MJy4hplGvwTJEBCB3ku6UwgQhu0TizeGESBTUXxZIeyiORNBgfzkqT3Ugo+i+777zsIAfhg==} + /@types/ember__application@4.0.9(@babel/core@7.23.2): + resolution: {integrity: sha512-zNzwzxuLZrkOLvmfassiCY6vF5LSIIaKnZOzs6hv802pr0FGbUsnng7g21UY65s4X4AXmjH5WLVQBLFZYB4Kmg==} dependencies: '@glimmer/component': 1.1.2(@babel/core@7.23.2) - '@types/ember': 4.0.6(@babel/core@7.23.2) - '@types/ember__engine': 4.0.5(@babel/core@7.23.2) - '@types/ember__object': 4.0.8(@babel/core@7.23.2) - '@types/ember__owner': 4.0.6 - '@types/ember__routing': 4.0.13(@babel/core@7.23.2) + '@types/ember': 4.0.8(@babel/core@7.23.2) + '@types/ember__engine': 4.0.8(@babel/core@7.23.2) + '@types/ember__object': 4.0.9(@babel/core@7.23.2) + '@types/ember__owner': 4.0.7 + '@types/ember__routing': 4.0.17(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__array@4.0.4(@babel/core@7.23.2): - resolution: {integrity: sha512-nMg0+2ooumlfHJjwmI1tnVTBg8TfORhXT4OdzJzCjweFjBCA25L7K0W9J/NKzTUTryJsaDil6VMbY3dCXpyBvA==} + /@types/ember__array@4.0.7(@babel/core@7.23.2): + resolution: {integrity: sha512-5z/h8KzTUGa9D04Vtd0/q39GTmLppqzD/XBoc9G3fudDige4P6tiV6LB7BIzDM5IsC1rffQtxcphPjnxlgJQWg==} dependencies: - '@types/ember': 4.0.6(@babel/core@7.23.2) - '@types/ember__object': 4.0.8(@babel/core@7.23.2) + '@types/ember': 4.0.8(@babel/core@7.23.2) + '@types/ember__object': 4.0.9(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__component@4.0.15(@babel/core@7.23.2): - resolution: {integrity: sha512-h4Z5kFg8dJT1DHX7qF0/gRc92QMYQGBztJBLbIHYVM36h7+4Sgpsoo1wYy8MCyV0zHwnk9icwpSbfANS20b1BA==} + /@types/ember__component@4.0.19(@babel/core@7.23.2): + resolution: {integrity: sha512-BrdaubCMGivKvMgcW8GzouWsrrz56nEQMr7iR7hUYfyS47u4fJrB8zzoYAIGhwWth0l8stEqfUMo5U7kIOuy1w==} dependencies: - '@types/ember': 4.0.6(@babel/core@7.23.2) - '@types/ember__object': 4.0.8(@babel/core@7.23.2) + '@types/ember': 4.0.8(@babel/core@7.23.2) + '@types/ember__object': 4.0.9(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__controller@4.0.6(@babel/core@7.23.2): - resolution: {integrity: sha512-o7mrKBE34JrQWTf3VvRsBzIEw36ChDW/2Ldv3SZKI7u/AwXUjbN1UzjHzYrokV6/iNtymTHx3F1DwNtCTSEMjA==} + /@types/ember__controller@4.0.9(@babel/core@7.23.2): + resolution: {integrity: sha512-qR52qCWjhdM9Le0UqQbJp0e8ItKLFZlaMq4WR3CE2D5ezwipmwz13vyVYBbQPGvC3BO+/vh6tqtYjZtXgQdyUg==} dependencies: - '@types/ember__object': 4.0.8(@babel/core@7.23.2) + '@types/ember__object': 4.0.9(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__debug@4.0.5(@babel/core@7.23.2): - resolution: {integrity: sha512-KBEEHws6CClZR7tpIplURyuKSkQhW6ZHsPWvRxTRr5104V0X+jUvv2ef/JZ35YUp01oS4DXqvn6DwCkhZOy0KA==} + /@types/ember__debug@4.0.6(@babel/core@7.23.2): + resolution: {integrity: sha512-sRYDMcr3/rDHCXYSyfwur7ud8z1LOtCeWHZZq9AAiQIo7+teXfom+JoVocA72KVQs/kQlmt2VVAGpIzOZ+1URg==} dependencies: - '@types/ember__object': 4.0.8(@babel/core@7.23.2) - '@types/ember__owner': 4.0.6 + '@types/ember__object': 4.0.9(@babel/core@7.23.2) + '@types/ember__owner': 4.0.7 transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__engine@4.0.5(@babel/core@7.23.2): - resolution: {integrity: sha512-yx4d2xhCzu5ZwDib++0plLIMv8G6/l9TUAWWmQMsz0L/ETK9jIH0H7uEzyWZSTR2ETcP230oAkPzTk2J3IQAmg==} + /@types/ember__engine@4.0.8(@babel/core@7.23.2): + resolution: {integrity: sha512-2+yzVXvFh3RoPKzEY76X9nv3yi8Kp6aaMPrQEoE+BrXRW1H8OfcKbORVV1RsFDWeT8ZTtTFPUcKA8HkbmIeacw==} dependencies: - '@types/ember__object': 4.0.8(@babel/core@7.23.2) - '@types/ember__owner': 4.0.6 + '@types/ember__object': 4.0.9(@babel/core@7.23.2) + '@types/ember__owner': 4.0.7 transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__error@4.0.3: - resolution: {integrity: sha512-lQ/ZrPS5s7LjYhML8TCfcKyMumAy7Hh+9CI66WShHumuojSZZm36LhpaUXC0sMf5uF3uKimaVrvvvrvBLDePZg==} + /@types/ember__error@4.0.4: + resolution: {integrity: sha512-fCDdF5oSzSMIdBjYnJsU1qG/3LdBVZrnQ1oPgRC23/NeOr+bAQHZxTjtSO3/ruyEPtRc02q3a9K/ITz1uphz7g==} dev: true - /@types/ember__object@4.0.8(@babel/core@7.23.2): - resolution: {integrity: sha512-ZpMUVWnOr/FespCyriI2I3PvvJLUVkVZx8tlCFql9Cd3dqMF1O4RN4IdaFTWHcT/4rNdjAFKF5CxzoVSzKU/9A==} + /@types/ember__object@4.0.9(@babel/core@7.23.2): + resolution: {integrity: sha512-yf20VPBWNdDjgZpmY33rg4OBt1nm0OasU1zuRrMDnATSUgIK2KLc2DxMPAXqr9YTpMtOd599LWdvYf4w+u4S5g==} dependencies: - '@types/ember': 4.0.6(@babel/core@7.23.2) - '@types/rsvp': 4.0.4 + '@types/ember': 4.0.8(@babel/core@7.23.2) + '@types/rsvp': 4.0.6 transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__owner@4.0.6: - resolution: {integrity: sha512-IwTLGZ6DuKCGvLJd1lSFo090cErMwOletj0MSOIIav9CakcSJlMpn55lwKxnWq52ve0zo0jruzan6SDSj4sFuA==} + /@types/ember__owner@4.0.7: + resolution: {integrity: sha512-mYG0OL1let/StvnfXCyPdfaigsSOVyOIzrXsk7iRzlRjEjsBawEGrkckLiej50cI25k9yp/kLl3ZIT1FqMLBpg==} - /@types/ember__polyfills@4.0.2: - resolution: {integrity: sha512-DMtjEhCHgrMion+qDWQVC9gW5SIY5wElueFbAmBLghTcUOgLWLTFzah3PxKln9cQNRO36699Irg2UdYOJsY6Jg==} + /@types/ember__polyfills@4.0.4: + resolution: {integrity: sha512-icOWTR6f++nHTBLrrWp/X3sjGFs3PpenEwoWoQM6LL3wUFLSeAwsvXNp1zdDV3Sq0H61sAWymBmUeBLNO18Ogg==} dev: true - /@types/ember__routing@4.0.13(@babel/core@7.23.2): - resolution: {integrity: sha512-CNBx6RmGzZpe8ahuy6+aPYKc/EelmbkndqgCigGkkrqvV5B+ayb3rdeKa2XojyXIqSjvjmcYyj9TTvian0yDgg==} + /@types/ember__routing@4.0.17(@babel/core@7.23.2): + resolution: {integrity: sha512-hnTWhmRwfd9P0X0gcBVBU7guqtT7B04MDkSBdcmsR4GxMP6IrEwyXI8XX8ZhqHITojkUtNtSDW7PGp0Ch4oOPg==} dependencies: - '@types/ember': 4.0.6(@babel/core@7.23.2) - '@types/ember__controller': 4.0.6(@babel/core@7.23.2) - '@types/ember__object': 4.0.8(@babel/core@7.23.2) - '@types/ember__service': 4.0.3(@babel/core@7.23.2) + '@types/ember': 4.0.8(@babel/core@7.23.2) + '@types/ember__controller': 4.0.9(@babel/core@7.23.2) + '@types/ember__object': 4.0.9(@babel/core@7.23.2) + '@types/ember__service': 4.0.6(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__runloop@4.0.4(@babel/core@7.23.2): - resolution: {integrity: sha512-a8raelFWkQmkuWk4K6DmvwFYwC67SzV9yzurdfcKn3uTVj4EAX4KyuB+JUNRS6sHJYEUFlVsd8AHgYyU976Deg==} + /@types/ember__runloop@4.0.7(@babel/core@7.23.2): + resolution: {integrity: sha512-xMRuANKydjwy0zNnb2COyDSCRe2j/TpBnDYAy2MkjaPXFnHn8MSZUAurQmU+Mg5BMQx6PLhxaPmzFBPQ73+VrA==} dependencies: - '@types/ember': 4.0.6(@babel/core@7.23.2) + '@types/ember': 4.0.8(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__service@4.0.3(@babel/core@7.23.2): - resolution: {integrity: sha512-LH+gI8Ha2PGM7sJ1Ap4+Ml62vejc8tlwE2xJCqklfH39DPKxAZanCdJCHOL13Ak1xoRZ2KKT4pXhxJIXaI2PWA==} + /@types/ember__service@4.0.6(@babel/core@7.23.2): + resolution: {integrity: sha512-0kGA2eofiufsFby7vO61hIzDD2YDdhK7wyT6VQjUJQl6gT1N90xosZd+cGI6GILM2KmCsWgjlOMlPT033sBz/w==} dependencies: - '@types/ember__object': 4.0.8(@babel/core@7.23.2) + '@types/ember__object': 4.0.9(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__string@3.0.11: - resolution: {integrity: sha512-Z2bHbA/z6u+niTXamdHBCXIMI8d8k7K1WyERDmgB/uG7HLkGDO6CGmeNmbHKjdxzYR52kvKHFoYoK9EavVvpYA==} + /@types/ember__string@3.0.12: + resolution: {integrity: sha512-TpFGoM2yJuzvRl98k8a4tcwE7k0x2fAMLktkkyaDnveldv0jVOmgJttHwnX+LmEAjpK1rqa1Xes7jzxIgAtNjA==} dev: true - /@types/ember__template@4.0.2: - resolution: {integrity: sha512-kQWkak5Sy8m4xcXiXNO2A5+N12qoYK9EK2WtGQYG5pN0wSl6iYFGuz8iq7wEcOyiQ0BH9xSv3uCURukv3U+Txw==} + /@types/ember__template@4.0.4: + resolution: {integrity: sha512-RJHlTKWjIMZVwqyvhdgkwbGvTq6OlmzVMO+E9ONRLb+qTlX9KE9zqzZPRJgw8znttV+xWjUmEb7Giz21O1uVOg==} dev: true - /@types/ember__test@4.0.2(@babel/core@7.23.2): - resolution: {integrity: sha512-hoep5m7XmafmjIOHj+PN3T6RyCuVk6Wmjo7IVSM1aCxyIiSbJN8h1vs/Ma8I6kFoMmZYmdLsMxNoxMf7jEon4w==} + /@types/ember__test@4.0.4(@babel/core@7.23.2): + resolution: {integrity: sha512-ur4/HjOSt7zMBFHZR9zsjtXKbdbEfvQXiQr2DknUCVxYS3PHwLU3mazjyd9QcupINxW/gtaNGAjdEhuV1V71iQ==} dependencies: - '@types/ember__application': 4.0.6(@babel/core@7.23.2) + '@types/ember__application': 4.0.9(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/ember__utils@4.0.4(@babel/core@7.23.2): - resolution: {integrity: sha512-RP6Phi3/oYskNxrH2rm4ZK0yNjxCRKRyY0A796gE2Mv31S6+kkRobqZ/LpH9bVa2FUgdl/4XZIyX/W4L1UWwig==} + /@types/ember__utils@4.0.5(@babel/core@7.23.2): + resolution: {integrity: sha512-JKaXOofBACIuOjmIS/zPzV6oMvcb9YgKQOVSkChvzAm28xxuV/jn7Q5CeoV3xBJB4z8buNIxl2n7Ko1H91z+5Q==} dependencies: - '@types/ember': 4.0.6(@babel/core@7.23.2) + '@types/ember': 4.0.8(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /@types/eslint-scope@3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + /@types/eslint-scope@3.7.6: + resolution: {integrity: sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==} dependencies: - '@types/eslint': 8.44.2 - '@types/estree': 1.0.1 + '@types/eslint': 8.44.6 + '@types/estree': 1.0.3 - /@types/eslint@8.44.2: - resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} + /@types/eslint@8.44.6: + resolution: {integrity: sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==} dependencies: - '@types/estree': 1.0.1 - '@types/json-schema': 7.0.12 + '@types/estree': 1.0.3 + '@types/json-schema': 7.0.14 - /@types/estree@1.0.1: - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + /@types/estree@1.0.3: + resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} - /@types/express-serve-static-core@4.17.36: - resolution: {integrity: sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==} + /@types/express-serve-static-core@4.17.39: + resolution: {integrity: sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==} dependencies: - '@types/node': 20.5.9 - '@types/qs': 6.9.8 - '@types/range-parser': 1.2.4 - '@types/send': 0.17.1 + '@types/node': 20.8.7 + '@types/qs': 6.9.9 + '@types/range-parser': 1.2.6 + '@types/send': 0.17.3 - /@types/express@4.17.17: - resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + /@types/express@4.17.20: + resolution: {integrity: sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==} dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.36 - '@types/qs': 6.9.8 - '@types/serve-static': 1.15.2 + '@types/body-parser': 1.19.4 + '@types/express-serve-static-core': 4.17.39 + '@types/qs': 6.9.9 + '@types/serve-static': 1.15.4 - /@types/fs-extra@8.1.2: - resolution: {integrity: sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==} + /@types/fs-extra@8.1.4: + resolution: {integrity: sha512-OMcQKnlrkrOI0TaZ/MgVDA8LYFl7CykzFsjMj9l5x3un2nFxCY20ZFlnqrM0lcqlbs0Yro2HbnZlmopyRaoJ5w==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.8.7 /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.5.9 + '@types/node': 20.8.7 /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.5.9 + '@types/node': 20.8.7 - /@types/http-errors@2.0.1: - resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} + /@types/http-errors@2.0.3: + resolution: {integrity: sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==} - /@types/jquery@3.5.22: - resolution: {integrity: sha512-ISQFeUK5GwRftLK4PVvKTWEVCxZ2BpaqBz0TWkIq5w4vGojxZP9+XkqgcPjxoqmPeew+HLyWthCBvK7GdF5NYA==} + /@types/jquery@3.5.24: + resolution: {integrity: sha512-V/TG69ge5amcr8Ap7vY3SObqKfZlV7ttqcYnNcYnndI77ySIRi05+3GjvfwRtE2qalAC2ySLIL1ker512sI20g==} dependencies: - '@types/sizzle': 2.3.3 + '@types/sizzle': 2.3.5 dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/json-schema@7.0.14: + resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.8.7 dev: true - /@types/mime@1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + /@types/mime@1.3.4: + resolution: {integrity: sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==} - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + /@types/mime@3.0.3: + resolution: {integrity: sha512-i8MBln35l856k5iOhKk2XJ4SeAWg75mLIpZB4v6imOagKL6twsukBZGDMNhdOVk7yRFTMPpfILocMos59Q1otQ==} /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} @@ -6527,88 +7186,94 @@ packages: /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - /@types/morgan@1.9.6: - resolution: {integrity: sha512-xfKogz5WcKww2DAiVT9zxMgrqQt+Shq8tDVeLT+otoj6dJnkRkyJxMF51mHtUc3JCPKGk5x1EBU0buuGpfftlQ==} + /@types/morgan@1.9.7: + resolution: {integrity: sha512-4sJFBUBrIZkP5EvMm1L6VCXp3SQe8dnXqlVpe1jsmTjS1JQVmSjnpMNs8DosQd6omBi/K7BSKJ6z/Mc3ki0K9g==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.8.7 dev: true - /@types/node@20.5.9: - resolution: {integrity: sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==} + /@types/node@20.8.7: + resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==} + dependencies: + undici-types: 5.25.3 - /@types/qs@6.9.8: - resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} + /@types/qs@6.9.9: + resolution: {integrity: sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==} - /@types/qunit@2.19.6: - resolution: {integrity: sha512-bz9STa6EHurtpSfn5cNiScBladlw43bM+7luQA985Kd9YlF4dZaLmKt3c5/oSyN1AWAl50YBpqTq0BxCP64nGg==} + /@types/qunit@2.19.7: + resolution: {integrity: sha512-Vf1+zHCOhMyDqZqM6zlB++6n5mkMe1+pWH1l3fzbzakQ2VImMNeAKSQD++RAjpGTqPUio8Tre2a6kmq6O1tK/A==} dev: true - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + /@types/range-parser@1.2.6: + resolution: {integrity: sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==} /@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + /@types/responselike@1.0.2: + resolution: {integrity: sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.8.7 dev: true /@types/rimraf@2.0.5: resolution: {integrity: sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==} dependencies: '@types/glob': 8.1.0 - '@types/node': 20.5.9 + '@types/node': 20.8.7 - /@types/rsvp@4.0.4: - resolution: {integrity: sha512-J3Ol++HCC7/hwZhanDvggFYU/GtxHxE/e7cGRWxR04BF7Tt3TqJZ84BkzQgDxmX0uu8IagiyfmfoUlBACh2Ilg==} + /@types/rsvp@4.0.6: + resolution: {integrity: sha512-2CgsI0j74ULhrZrqcMwZ7nSvcyX767KaJDefxCnrNSp1D4MuLX8qxOPHwHz7/5b2FC94ILh3Db6du6QAvpc+Qw==} dev: true - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} - dev: true + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} - /@types/send@0.17.1: - resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + /@types/send@0.17.3: + resolution: {integrity: sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==} dependencies: - '@types/mime': 1.3.2 - '@types/node': 20.5.9 + '@types/mime': 1.3.4 + '@types/node': 20.8.7 - /@types/serve-static@1.15.2: - resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} + /@types/serve-static@1.15.4: + resolution: {integrity: sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==} dependencies: - '@types/http-errors': 2.0.1 - '@types/mime': 3.0.1 - '@types/node': 20.5.9 + '@types/http-errors': 2.0.3 + '@types/mime': 3.0.3 + '@types/node': 20.8.7 - /@types/sizzle@2.3.3: - resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} + /@types/sizzle@2.3.5: + resolution: {integrity: sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ==} dev: true - /@types/supports-color@8.1.1: - resolution: {integrity: sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==} + /@types/ssri@7.1.3: + resolution: {integrity: sha512-pn5Fdgnh9aZQ88G1ifC9+OapCGup84gtJk8zaSctwl2qrZ6xo6T7nf2QBSdX0d6tuRovAvoDZuVueVwtGlXZDQ==} + dependencies: + '@types/node': 20.8.7 + + /@types/supports-color@8.1.2: + resolution: {integrity: sha512-nhs1D8NjNueBqRBhBTsc81g90g7VBD4wnMTMy9oP+QIldHuJkE655QTL2D1jkj3LyCd+Q5Y69oOpfxN1l0eCMA==} dev: true - /@types/symlink-or-copy@1.2.0: - resolution: {integrity: sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg==} + /@types/symlink-or-copy@1.2.1: + resolution: {integrity: sha512-8LQKxlJ8zXQ5U0wFXTSBXLHg8+oBbLMJXEC6vOqhL+iz8EfVvSxfdwtvq8ufkT9pumab0ntnvYXQBF/+cxzl9w==} /@types/tmp@0.0.33: resolution: {integrity: sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ==} dev: true - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + /@types/yargs-parser@21.0.2: + resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} dev: true - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + /@types/yargs@17.0.29: + resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==} dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser': 21.0.2 dev: true - /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6619,25 +7284,24 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.8.0 - '@typescript-eslint/type-utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 + eslint: 8.52.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/parser@6.8.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6652,11 +7316,10 @@ packages: '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 + eslint: 8.52.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/scope-manager@6.8.0: resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} @@ -6664,9 +7327,8 @@ packages: dependencies: '@typescript-eslint/types': 6.8.0 '@typescript-eslint/visitor-keys': 6.8.0 - dev: true - /@typescript-eslint/type-utils@6.8.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@6.8.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6677,19 +7339,17 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 - ts-api-utils: 1.0.2(typescript@5.2.2) + eslint: 8.52.0 + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/types@6.8.0: resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} engines: {node: ^16.0.0 || >=18.0.0} - dev: true /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2): resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} @@ -6706,30 +7366,28 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@6.8.0(eslint@8.51.0)(typescript@5.2.2): + /@typescript-eslint/utils@6.8.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.3 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@types/json-schema': 7.0.14 + '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 6.8.0 '@typescript-eslint/types': 6.8.0 '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) - eslint: 8.51.0 + eslint: 8.52.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript - dev: true /@typescript-eslint/visitor-keys@6.8.0: resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} @@ -6737,7 +7395,9 @@ packages: dependencies: '@typescript-eslint/types': 6.8.0 eslint-visitor-keys: 3.4.3 - dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} /@webassemblyjs/ast@1.11.6: resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} @@ -6840,6 +7500,13 @@ packages: /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + /@zkochan/which@2.0.3: + resolution: {integrity: sha512-C1ReN7vt2/2O0fyTsx5xnbQuxBrmG5NMSbcIkPKCCfCTJgpZBsuRYzFXHj3nVq8vTfK7vxHUmzfCpSHgO7j4rg==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true @@ -6874,7 +7541,6 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.10.0 - dev: true /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} @@ -6982,9 +7648,24 @@ packages: /amp@0.3.1: resolution: {integrity: sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw==} + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} + dev: true + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + /ansi-diff@1.1.1: + resolution: {integrity: sha512-XnTdFDQzbEewrDx8epWXdw7oqHMvv315vEtfqDiEhhWghIf4++h26c3/FMz7iTLhNrnj56DNIXpbxHZq+3s6qw==} + dependencies: + ansi-split: 1.0.1 /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} @@ -7022,6 +7703,11 @@ packages: engines: {node: '>=12'} dev: true + /ansi-split@1.0.1: + resolution: {integrity: sha512-RRxQym4DFtDNmHIkW6aeFVvrXURb11lGAEPXNiryjCe8bK8RsANjzJ0M2aGOkvBYwP4Bl/xZ8ijtr6D3j1x/eg==} + dependencies: + ansi-regex: 3.0.1 + /ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} @@ -7075,6 +7761,9 @@ packages: /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + /archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -7110,7 +7799,7 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 is-array-buffer: 3.0.2 /array-equal@1.0.0: @@ -7123,12 +7812,11 @@ packages: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 - dev: true /array-to-error@1.1.1: resolution: {integrity: sha512-kqcQ8s7uQfg3UViYON3kCMcck3A9exxgq+riVuKy08Mx00VN4EJhK30L2VpjE58LQHKhcE/GRpvbVUhqTvqzGQ==} @@ -7152,44 +7840,47 @@ packages: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.0 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 + /as-table@1.0.55: + resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + dependencies: + printable-characters: 1.0.42 + /asn1@0.1.11: resolution: {integrity: sha512-Fh9zh3G2mZ8qM/kwsiKwL2U2FmXxVsboP4x1mXjnhKHv3SmzaBZoYvxEQJz/YS2gnCgd8xlAVWcZnQyC9qZBsA==} engines: {node: '>=0.4.9'} @@ -7309,7 +8000,7 @@ packages: /axios@0.21.4(debug@4.3.4): resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: - follow-redirects: 1.15.2(debug@4.3.4) + follow-redirects: 1.15.3(debug@4.3.4) transitivePeerDependencies: - debug @@ -7429,19 +8120,10 @@ packages: - supports-color dev: true - /babel-import-util@0.2.0: - resolution: {integrity: sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag==} - engines: {node: '>= 12.*'} - dev: true - /babel-import-util@1.4.1: resolution: {integrity: sha512-TNdiTQdPhXlx02pzG//UyVPSKE7SNWjY0n4So/ZnjQpWwaM5LvWBLkWa1JKll5u06HNscHD91XZPuwrMg1kadQ==} engines: {node: '>= 12.*'} - /babel-import-util@2.0.0: - resolution: {integrity: sha512-pkWynbLwru0RZmA9iKeQL63+CkkW0RCP3kL5njCtudd6YPUKb5Pa0kL4fb3bmuKn2QDBFwY5mvvhEK/+jv2Ynw==} - engines: {node: '>= 12.*'} - /babel-import-util@2.0.1: resolution: {integrity: sha512-N1ZfNprtf/37x0R05J0QCW/9pCAcuI+bjZIK9tlu0JEkwEST7ssdD++gxHRbD58AiG5QE5OuNYhRoEFsc1wESw==} engines: {node: '>= 12.*'} @@ -7532,7 +8214,7 @@ packages: resolution: {integrity: sha512-jDLlxI8QnfKd7PtieH6pl4tZJzymzfCDCPGdTq/grgbiYAikwDPp/oL0IlFJn0HQjLpcLkyYhPKkUVneRESw5w==} engines: {node: '>=8'} dependencies: - '@babel/types': 7.22.15 + '@babel/types': 7.23.0 lodash: 4.17.21 /babel-plugin-htmlbars-inline-precompile@5.3.1: @@ -7543,7 +8225,7 @@ packages: line-column: 1.0.2 magic-string: 0.25.9 parse-static-imports: 1.1.0 - string.prototype.matchall: 4.0.9 + string.prototype.matchall: 4.0.10 /babel-plugin-module-resolver@5.0.0: resolution: {integrity: sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==} @@ -7553,43 +8235,19 @@ packages: glob: 8.1.0 pkg-up: 3.1.0 reselect: 4.1.8 - resolve: 1.22.4 - - /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.23.2): - resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/compat-data': 7.22.20 - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.2) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + resolve: 1.22.8 /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.2): resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.22.20 + '@babel/compat-data': 7.23.2 '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - - /babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.23.2): - resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.2) - core-js-compat: 3.32.1 - transitivePeerDependencies: - - supports-color /babel-plugin-polyfill-corejs3@0.8.5(@babel/core@7.23.2): resolution: {integrity: sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==} @@ -7598,18 +8256,7 @@ packages: dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) - core-js-compat: 3.33.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.23.2): - resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.2(supports-color@8.1.1) - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.2) + core-js-compat: 3.33.1 transitivePeerDependencies: - supports-color @@ -7622,7 +8269,6 @@ packages: '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) transitivePeerDependencies: - supports-color - dev: true /babel-plugin-syntax-async-functions@6.13.0: resolution: {integrity: sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==} @@ -7989,10 +8635,15 @@ packages: resolution: {integrity: sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==} engines: {node: '>=10.0.0'} + /better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + dependencies: + is-windows: 1.0.2 + /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} - dev: true /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -8079,6 +8730,12 @@ packages: raw-body: 1.1.7 safe-json-parse: 1.0.1 + /bole@5.0.9: + resolution: {integrity: sha512-35GeBG6T7GW9VmLDF2IoKAtFCqMjmmq1uICbsICI0pID7ZAyUKlf7dg1wpXmn9GcMKHtg0S19CPMU5yfY3tv+g==} + dependencies: + fast-safe-stringify: 2.1.1 + individual: 3.0.0 + /boom@0.4.2: resolution: {integrity: sha512-OvfN8y1oAxxphzkl2SnCS+ztV/uVKTATtgLjWYg/7KwcNyf3rzpHxNQJZCKtsZd4+MteKczhWbSjtEX4bGgU9g==} engines: {node: '>=0.8.0'} @@ -8089,12 +8746,24 @@ packages: dev: true optional: true + /boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + /bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} dependencies: big-integer: 1.6.51 - dev: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -8144,7 +8813,7 @@ packages: heimdalljs-logger: 0.1.10 json-stable-stringify: 1.0.2 rsvp: 4.8.5 - workerpool: 6.4.2 + workerpool: 6.5.1 transitivePeerDependencies: - supports-color @@ -8478,7 +9147,7 @@ packages: ensure-posix-path: 1.1.1 fs-extra: 5.0.0 minimatch: 3.1.2 - resolve: 1.22.4 + resolve: 1.22.8 rsvp: 4.8.5 symlink-or-copy: 1.3.1 walk-sync: 0.3.4 @@ -8500,7 +9169,7 @@ packages: ensure-posix-path: 1.1.1 fs-extra: 8.1.0 minimatch: 3.1.2 - resolve: 1.22.4 + resolve: 1.22.8 rsvp: 4.8.5 symlink-or-copy: 1.3.1 walk-sync: 1.1.4 @@ -8527,9 +9196,9 @@ packages: matcher-collection: 2.0.1 source-map-url: 0.4.1 symlink-or-copy: 1.3.1 - terser: 5.19.4 + terser: 5.22.0 walk-sync: 2.2.0 - workerpool: 6.4.2 + workerpool: 6.5.1 transitivePeerDependencies: - supports-color dev: true @@ -8559,9 +9228,9 @@ packages: matcher-collection: 2.0.1 source-map-url: 0.4.1 symlink-or-copy: 1.3.1 - terser: 5.19.4 + terser: 5.22.0 walk-sync: 2.2.0 - workerpool: 6.4.2 + workerpool: 6.5.1 transitivePeerDependencies: - supports-color dev: true @@ -8581,7 +9250,7 @@ packages: heimdalljs: 0.2.6 heimdalljs-logger: 0.1.10 mime-types: 2.1.35 - promise.prototype.finally: 3.1.5 + promise.prototype.finally: 3.1.7 resolve-path: 1.4.0 rimraf: 2.7.1 sane: 4.1.0 @@ -8597,9 +9266,9 @@ packages: resolution: {integrity: sha512-sWi3b3fTUSVPDsz5KsQ5eCQNVAtLgkIE/HYFkEZXR/07clqmd4E/gFiuwSaqa9b+QTXc1Uemfb7TVWbEIURWDg==} engines: {node: 8.* || >= 10.*} dependencies: - '@types/chai': 4.3.6 - '@types/chai-as-promised': 7.1.6 - '@types/express': 4.17.17 + '@types/chai': 4.3.9 + '@types/chai-as-promised': 7.1.7 + '@types/express': 4.17.20 ansi-html: 0.0.7 broccoli-node-info: 2.2.0 broccoli-slow-trees: 3.1.0 @@ -8636,27 +9305,17 @@ packages: resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} hasBin: true dependencies: - caniuse-lite: 1.0.30001549 - electron-to-chromium: 1.4.555 + caniuse-lite: 1.0.30001551 + electron-to-chromium: 1.4.563 dev: true - /browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001549 - electron-to-chromium: 1.4.555 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.21.10) - /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.30001549 - electron-to-chromium: 1.4.555 + caniuse-lite: 1.0.30001551 + electron-to-chromium: 1.4.563 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) @@ -8688,12 +9347,15 @@ packages: resolution: {integrity: sha512-5QwynfXiRCRxPW3ZnC0Dv+sHHmctP4SHIuzsRKOWYO0HF/qUpsxQVexoviaxpmwDsF1hoVDDFdc4xUuafOzx1g==} dev: true + /bun-types@1.0.7: + resolution: {integrity: sha512-zlIp+SCutbbugs6xDy+3WC3KO3zKySpF/bRfiTk/VJUdKt+WHAzlCtLplS7XglRYDFzhRhlzXMW/R5BHkw+u2Q==} + dev: true + /bundle-name@3.0.0: resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} engines: {node: '>=12'} dependencies: run-applescript: 5.0.0 - dev: true /bytes@1.0.0: resolution: {integrity: sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==} @@ -8765,20 +9427,32 @@ packages: dependencies: json-stable-stringify: 1.0.2 - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - dev: true /can-symlink@1.0.0: resolution: {integrity: sha512-RbsNrFyhwkx+6psk/0fK/Q9orOUr9VMxohGd8vTa4djf4TGLfblBgUfqZChrZuW0Q+mz2eBPFLusw9Jfukzmhg==} @@ -8786,8 +9460,14 @@ packages: dependencies: tmp: 0.0.28 - /caniuse-lite@1.0.30001549: - resolution: {integrity: sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==} + /can-write-to-dir@1.1.1: + resolution: {integrity: sha512-eOgiEWqjppB+3DN/5E82EQ8dTINus8d9GXMCbEsUnp2hcUIcXmBvzWmD3tXMk3CuBK0v+ddK9qw0EAF+JVRMjQ==} + engines: {node: '>=10.13'} + dependencies: + path-temp: 2.1.0 + + /caniuse-lite@1.0.30001551: + resolution: {integrity: sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==} /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -8808,15 +9488,15 @@ packages: chai: '>= 2.1.2 < 4' dependencies: chai: 3.5.0 - check-error: 1.0.2 + check-error: 1.0.3 - /chai-as-promised@7.1.1(chai@4.3.8): + /chai-as-promised@7.1.1(chai@4.3.10): resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} peerDependencies: chai: '>= 2.1.2 < 5' dependencies: - chai: 4.3.8 - check-error: 1.0.2 + chai: 4.3.10 + check-error: 1.0.3 /chai-files@1.4.0: resolution: {integrity: sha512-tPTx7H2kpR+wILWHRx8RxpXcRUdc2uH8su505C9R3p5GA+eYbZBXuxWC0RZbyElYi7X7Fp/V/S2PQjkakrT1mQ==} @@ -8831,15 +9511,15 @@ packages: deep-eql: 0.1.3 type-detect: 1.0.0 - /chai@4.3.8: - resolution: {integrity: sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==} + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 - check-error: 1.0.2 + check-error: 1.0.3 deep-eql: 4.1.3 - get-func-name: 2.0.0 - loupe: 2.3.6 + get-func-name: 2.0.2 + loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 @@ -8879,6 +9559,10 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -8890,8 +9574,10 @@ packages: dependencies: inherits: 2.0.4 - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -8916,8 +9602,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'} /class-utils@0.3.6: @@ -8956,6 +9642,17 @@ packages: /clean-up-path@1.0.0: resolution: {integrity: sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw==} + /cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + /cli-columns@4.0.0: + resolution: {integrity: sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ==} + engines: {node: '>= 10'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + /cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} @@ -8981,8 +9678,8 @@ packages: yargs: 16.2.0 dev: true - /cli-spinners@2.9.0: - resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + /cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} engines: {node: '>=6'} /cli-table3@0.6.3: @@ -9032,7 +9729,6 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} @@ -9085,11 +9781,6 @@ packages: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} - /colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - dev: true - /combined-stream@0.0.7: resolution: {integrity: sha512-qfexlmLp9MyrkajQVyjEDb0Vj+KhRgR/rxLiVhaihlT+ZkX0lReqtH6Ack40CvMDERR4b5eFp3CreskpBs1Pig==} engines: {node: '>= 0.8'} @@ -9137,11 +9828,6 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: true - /common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} dev: true @@ -9180,6 +9866,12 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + /configstore@5.0.1: resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} engines: {node: '>=8'} @@ -9390,8 +10082,8 @@ packages: dependencies: safe-buffer: 5.2.1 - /content-tag@1.0.1: - resolution: {integrity: sha512-7NqA1EmPLgpahxyz8NdLwJVbBzjwHCOsvrKsl1ISfpNNd2Sy/nPSWj4+1HacDMMm8yYoM3Bj2EiCrC9F4ktifg==} + /content-tag@1.1.2: + resolution: {integrity: sha512-AZkfc6TUmW+/RbZJioPzOQPAHHXqyqK4B0GNckJDjBAPK3SyGrMfn21bfFky/qwi5uoLph5sjAHUkO3CL6/IgQ==} dev: true /content-type@1.0.5: @@ -9429,16 +10121,10 @@ packages: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} - /core-js-compat@3.32.1: - resolution: {integrity: sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==} - dependencies: - browserslist: 4.22.1 - - /core-js-compat@3.33.0: - resolution: {integrity: sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==} + /core-js-compat@3.33.1: + resolution: {integrity: sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==} dependencies: browserslist: 4.22.1 - dev: true /core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} @@ -9506,13 +10192,13 @@ packages: webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.29) + icss-utils: 5.1.0(postcss@8.4.31) loader-utils: 2.0.4 - postcss: 8.4.29 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.29) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.29) - postcss-modules-scope: 3.0.0(postcss@8.4.29) - postcss-modules-values: 4.0.0(postcss@8.4.29) + 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 @@ -9526,14 +10212,6 @@ packages: source-map: 0.6.1 dev: true - /css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.0.2 - dev: true - /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -9578,8 +10256,11 @@ packages: /dag-map@2.0.2: resolution: {integrity: sha512-xnsprIzYuDeiyu5zSKwilV/ajRHxnoMlAhEREfyfTgTSViMVY2fGP1ZcHJbtwup26oCkofySU/m6oKJ3HrkW7w==} - /data-uri-to-buffer@5.0.1: - resolution: {integrity: sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==} + /data-uri-to-buffer@2.0.2: + resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} + + /data-uri-to-buffer@6.0.1: + resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} engines: {node: '>= 14'} /data-urls@2.0.0: @@ -9600,8 +10281,8 @@ packages: whatwg-url: 11.0.0 dev: true - /dayjs@1.11.9: - resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} /dayjs@1.8.36: resolution: {integrity: sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==} @@ -9639,6 +10320,18 @@ packages: ms: 2.1.2 supports-color: 8.1.1 + /debug@4.3.4(supports-color@9.4.0): + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 9.4.0 + /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -9677,7 +10370,6 @@ packages: /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} @@ -9690,7 +10382,6 @@ packages: dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 - dev: true /default-browser@4.0.0: resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} @@ -9700,7 +10391,6 @@ packages: default-browser-id: 3.0.0 execa: 7.2.0 titleize: 3.0.0 - dev: true /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -9711,16 +10401,24 @@ packages: resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} dev: true + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - dev: true - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 /define-property@0.2.5: @@ -9799,10 +10497,17 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + /dettle@1.0.1: + resolution: {integrity: sha512-/oD3At60ZfhgzpofJtyClNTrIACyMdRe+ih0YiHzAniN0IZnLdLpEzgR6RtGs3kowxUkTnvV/4t1FBxXMUdusQ==} + /diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} @@ -9823,14 +10528,12 @@ packages: engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 - dev: true /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 - dev: true /domexception@2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} @@ -9846,13 +10549,6 @@ packages: webidl-conversions: 7.0.0 dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: true - /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -9881,8 +10577,8 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.555: - resolution: {integrity: sha512-k1wGC7UXDTyCWcONkEMRG/w6Jvrxi+SVEU+IeqUKUKjv2lGJ1b+jf1mqrloyxVTG5WYYjNQ+F6+Cb1fGrLvNcA==} + /electron-to-chromium@1.4.563: + resolution: {integrity: sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==} /ember-auto-import@2.6.3(webpack@5.89.0): resolution: {integrity: sha512-uLhrRDJYWCRvQ4JQ1e64XlSrqAKSd6PXaJ9ZsZI6Tlms9T4DtQFxNXasqji2ZRJBVrxEoLCRYX3RTldsQ0vNGQ==} @@ -9890,10 +10586,10 @@ packages: dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-decorators': 7.23.0(@babel/core@7.23.2) - '@babel/preset-env': 7.22.15(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@embroider/shared-internals': 2.4.0 + '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2) + '@babel/preset-env': 7.23.2(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@embroider/shared-internals': 2.5.0(supports-color@8.1.1) babel-loader: 8.3.0(@babel/core@7.23.2)(webpack@5.89.0) babel-plugin-ember-modules-api-polyfill: 3.5.0 babel-plugin-ember-template-compilation: 2.2.0 @@ -9913,7 +10609,7 @@ packages: lodash: 4.17.21 mini-css-extract-plugin: 2.7.6(webpack@5.89.0) parse5: 6.0.1 - resolve: 1.22.4 + resolve: 1.22.8 resolve-package-path: 4.0.3 semver: 7.5.4 style-loader: 2.0.0(webpack@5.89.0) @@ -9928,7 +10624,7 @@ packages: resolution: {integrity: sha512-hSPcvIKarA8wad2/b6jDd/eU+OtKmi6uP+iYQbzi5TQpjsqV6b4QdRqrLk7ClSRRKBAtdTuutx+m+X+WlEd2lw==} engines: {node: 10.* || >= 12} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-version-checker: 5.1.2 ember-compatibility-helpers: 1.2.6(patch_hash=5qtypxbsewxcs5l7lcldb5aqhq)(@babel/core@7.23.2) silent-error: 1.1.1 @@ -9942,11 +10638,11 @@ packages: peerDependencies: ember-source: '*' dependencies: - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) '@glimmer/tracking': 1.1.2 babel-import-util: 1.4.1 ember-cache-primitive-polyfill: 1.0.1(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-babel-plugin-helpers: 1.1.1 ember-source: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) transitivePeerDependencies: @@ -9958,8 +10654,8 @@ packages: resolution: {integrity: sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==} engines: {node: 6.* || 8.* || >= 10.*} - /ember-cli-babel@8.1.0(@babel/core@7.23.2): - resolution: {integrity: sha512-zudhce/GzEm2JFVjBKdsJvhnFTPZ3blYG8jK2YnrkmJp65TCMMkOM9LiKLlG9ANtiAMsljEl89YXWdsHY/xR4g==} + /ember-cli-babel@8.2.0(@babel/core@7.23.2): + resolution: {integrity: sha512-8H4+jQElCDo6tA7CamksE66NqBXWs7VNpS3a738L9pZCjg2kXIX4zoyHzkORUqCtr0Au7YsCnrlAMi1v2ALo7A==} engines: {node: 16.* || 18.* || >= 20} peerDependencies: '@babel/core': ^7.12.0 @@ -9967,14 +10663,14 @@ packages: '@babel/core': 7.23.2(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.22.15 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-proposal-decorators': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2) '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.2) '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.2) '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-runtime': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-runtime': 7.23.2(@babel/core@7.23.2) '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2) - '@babel/preset-env': 7.22.20(@babel/core@7.23.2) + '@babel/preset-env': 7.23.2(@babel/core@7.23.2) '@babel/runtime': 7.12.18 amd-name-resolver: 1.3.1 babel-plugin-debug-macros: 0.3.4(@babel/core@7.23.2) @@ -9995,17 +10691,20 @@ packages: transitivePeerDependencies: - supports-color - /ember-cli-blueprint-test-helpers@0.19.2: + /ember-cli-blueprint-test-helpers@0.19.2(ember-cli@5.3.0): resolution: {integrity: sha512-otCKdGcNFK0+MkQo+LLjYbRD9EerApH6Z/odvvlL1hxrN+owHMV5E+jI2rbtdvNEH0/6w5ZqjH4kS232fvtCxQ==} engines: {node: 6.* || 8.* || >= 10.*} + peerDependencies: + ember-cli: '*' dependencies: - chai: 4.3.8 - chai-as-promised: 7.1.1(chai@4.3.8) + chai: 4.3.10 + chai-as-promised: 7.1.1(chai@4.3.10) chai-files: 1.4.0 debug: 4.3.4(supports-color@8.1.1) + ember-cli: 5.3.0 ember-cli-internal-test-helpers: 0.9.1 fs-extra: 7.0.1 - testdouble: 3.18.0 + testdouble: 3.20.0 tmp-sync: 1.1.2 transitivePeerDependencies: - supports-color @@ -10017,30 +10716,36 @@ packages: ember-cli: ^3.2.0 || >=4.0.0 dependencies: chalk: 2.4.2 - ember-cli: 5.3.0(debug@4.3.4) + ember-cli: 5.3.0 find-yarn-workspace-root: 1.2.1 is-git-url: 1.0.0 - resolve: 1.22.4 + resolve: 1.22.8 semver: 5.7.2 transitivePeerDependencies: - supports-color - /ember-cli-fastboot-testing@0.6.1(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0): + /ember-cli-fastboot-testing@0.6.1(@babel/core@7.23.2)(@ember/test-helpers@3.2.0)(ember-cli-fastboot@4.1.1)(ember-cli@5.3.0)(ember-source@5.3.0)(webpack@5.89.0): resolution: {integrity: sha512-nevPv77Wjk0Mslb0AF0wgHfbjki6Fi3/dapTrFz17WLX6n5maLr/MTL1hZcZdbT+69DHdgckCza8Z1WyxiUbBA==} engines: {node: 12.* || 14.* || 16.* || >= 18} peerDependencies: + '@ember/test-helpers': '*' + ember-cli: '*' + ember-cli-fastboot: '*' ember-source: '*' dependencies: + '@ember/test-helpers': 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) body-parser: 1.20.2 ember-auto-import: 2.6.3(webpack@5.89.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli: 5.3.0 + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + ember-cli-fastboot: 4.1.1(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0) ember-source: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) fastboot: 4.1.1 json-fn: 1.1.1 minimist: 1.2.8 - nock: 13.3.3 - resolve: 1.22.4 - whatwg-fetch: 3.6.18 + nock: 13.3.6 + resolve: 1.22.8 + whatwg-fetch: 3.6.19 transitivePeerDependencies: - '@babel/core' - '@glint/template' @@ -10051,9 +10756,12 @@ packages: - webpack dev: true - /ember-cli-fastboot@4.1.1(@babel/core@7.23.2): + /ember-cli-fastboot@4.1.1(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0): resolution: {integrity: sha512-9B/qJUfDVqRmZlXxP23V2AZ3hiez99DKT2cPJ0MWkjwRom/kmVJHvv5X4fxvT7MCokjOVFvzas79D5toV4GLIA==} engines: {node: 14.* || 16.* || >=18} + peerDependencies: + ember-cli: '*' + ember-source: '*' dependencies: broccoli-concat: 4.2.5 broccoli-file-creator: 2.1.1 @@ -10061,10 +10769,12 @@ packages: broccoli-merge-trees: 4.2.0 broccoli-plugin: 4.0.7 chalk: 4.1.2 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli: 5.3.0 + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-lodash-subset: 2.0.1 ember-cli-preprocess-registry: 3.3.0 ember-cli-version-checker: 5.1.2 + ember-source: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) fastboot: 4.1.1 fastboot-express-middleware: 4.1.1 fastboot-transform: 0.1.3 @@ -10197,7 +10907,7 @@ packages: resolution: {integrity: sha512-0aocZV9SIoOHiU3hrH3IuLR6busWhTX6UVXgd490hmJkIymmOXNH2+jJoC7Ebkeo3PiOfAdjqhb765QDlHSJOw==} engines: {node: 10.* || >= 12} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color @@ -10219,7 +10929,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) execa: 4.1.0 fs-extra: 9.1.0 - resolve: 1.22.4 + resolve: 1.22.8 rsvp: 4.8.5 semver: 7.5.4 stagehand: 1.0.1 @@ -10244,7 +10954,7 @@ packages: transitivePeerDependencies: - supports-color - /ember-cli@5.3.0(debug@4.3.4): + /ember-cli@5.3.0: resolution: {integrity: sha512-Om19C49hAYFgVduidtfQPbZcR3bmdHhYJ4XxEEEvW+sP1WAXNOPWf5e3W6HGDarjIeg04bZxOMkMZy28bubOBA==} engines: {node: '>= 16'} hasBin: true @@ -10267,7 +10977,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 @@ -10284,7 +10994,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 @@ -10297,16 +11007,16 @@ packages: heimdalljs-fs-monitor: 1.1.1 heimdalljs-graph: 1.0.0 heimdalljs-logger: 0.1.10 - http-proxy: 1.18.1(debug@4.3.4) + http-proxy: 1.18.1 inflection: 2.0.1 - inquirer: 9.2.10 + inquirer: 9.2.11 is-git-url: 1.0.0 is-language-code: 3.1.0 isbinaryfile: 5.0.0 leek: 0.0.24 lodash.template: 4.5.0 - markdown-it: 13.0.1 - markdown-it-terminal: 0.4.0(markdown-it@13.0.1) + markdown-it: 13.0.2 + markdown-it-terminal: 0.4.0(markdown-it@13.0.2) minimatch: 7.4.6 morgan: 1.10.0 nopt: 3.0.6 @@ -10318,7 +11028,7 @@ packages: promise.hash.helper: 1.0.8 quick-temp: 0.1.8 remove-types: 1.0.0 - resolve: 1.22.4 + resolve: 1.22.8 resolve-package-path: 4.0.3 safe-stable-stringify: 2.4.3 sane: 5.0.1 @@ -10327,13 +11037,13 @@ packages: sort-package-json: 1.57.0 symlink-or-copy: 1.3.1 temp: 0.9.4 - testem: 3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm)(debug@4.3.4) + testem: 3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm) tiny-lr: 2.0.0 tree-sync: 2.1.0 - uuid: 9.0.0 + uuid: 9.0.1 walk-sync: 3.0.0 watch-detector: 1.0.2 - workerpool: 6.4.2 + workerpool: 6.5.1 yam: 1.0.0 transitivePeerDependencies: - arc-templates @@ -10411,7 +11121,7 @@ packages: resolution: {integrity: sha512-O154i8sLoVjsiKzSqxGRfHGr+N+drT6mRrLDbNgJCnW/V5uLg/ppZFpUsrdxuXnp5Q9us3OfXV1nX2CH+7bUpA==} engines: {node: 8.* || >= 10.*} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-version-checker: 3.1.3 ember-compatibility-helpers: 1.2.6(patch_hash=5qtypxbsewxcs5l7lcldb5aqhq)(@babel/core@7.23.2) transitivePeerDependencies: @@ -10439,12 +11149,12 @@ packages: qunit: optional: true dependencies: - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) chalk: 4.1.2 cli-table3: 0.6.3 debug: 4.3.4(supports-color@8.1.1) ember-auto-import: 2.6.3(webpack@5.89.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-version-checker: 5.1.2 ember-qunit: 8.0.1(@babel/core@7.23.2)(@ember/test-helpers@3.2.0)(ember-source@5.3.0)(qunit@2.19.4) execa: 4.1.0 @@ -10466,8 +11176,8 @@ packages: resolution: {integrity: sha512-uNmv1cPG/4qsac8oIf5txJ2FZ8p88LEpG4P3dNcjsJS98Y8hd0GPMFwVqpnzI78Lz7VYRGQWY4jnE4qm5R3j4g==} engines: {node: 12.* || 14.* || >= 16} dependencies: - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - '@glint/template' @@ -10477,7 +11187,7 @@ packages: resolution: {integrity: sha512-+oRstEa52mm0jAFzhr51/xtEWpCEykB3SEBr7vUg8YnXUZJ5hKNBppP938q8Zzr9XfJEbzrtDSGjhKwJCJv6FQ==} engines: {node: 10.* || 12.* || >= 14} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color @@ -10486,7 +11196,7 @@ packages: resolution: {integrity: sha512-CYR+U/wRxLbrfYN3dh+0Tb6mFaxJKfdyz+wNql6cqTrA0BBi9k6J3AaKXj273TqvEpyyXegQFFkZEiuZdYtgJw==} engines: {node: 6.* || 8.* || >= 10.*} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-typescript: 5.2.1 transitivePeerDependencies: - '@babel/core' @@ -10498,7 +11208,7 @@ packages: dependencies: broccoli-funnel: 3.0.8 broccoli-merge-trees: 4.2.0 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) regenerator-runtime: 0.13.11 transitivePeerDependencies: - '@babel/core' @@ -10522,7 +11232,7 @@ packages: dependencies: '@ember/test-helpers': 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) '@embroider/addon-shim': 1.8.6 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) ember-cli-test-loader: 3.1.0(@babel/core@7.23.2) ember-source: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) @@ -10536,7 +11246,7 @@ packages: resolution: {integrity: sha512-i8JWQidNCX7n5TOTIKRDR0bnsQN9aJh/GtOJKINz2Wr+I7L7sYVhli6MFqMYNGKC9j9e6iWsznfAIxddheyEow==} engines: {node: 12.* || 14.* || >= 16} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color @@ -10551,7 +11261,7 @@ packages: ember-source: optional: true dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-source: 5.3.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.89.0) transitivePeerDependencies: - '@babel/core' @@ -10565,7 +11275,7 @@ packages: engines: {node: 8.* || 10.* || >= 12} dependencies: '@babel/parser': 7.23.0 - '@babel/traverse': 7.23.0 + '@babel/traverse': 7.23.2(supports-color@8.1.1) recast: 0.18.10 transitivePeerDependencies: - supports-color @@ -10575,7 +11285,7 @@ packages: engines: {node: 12.* || 14.* || >= 16} dependencies: '@glimmer/component': 1.1.2(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-htmlbars: 6.3.0 transitivePeerDependencies: - '@babel/core' @@ -10599,7 +11309,7 @@ packages: '@glimmer/component': ^1.1.2 dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/plugin-transform-block-scoping': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) '@ember/edition-utils': 1.2.0 '@glimmer/compiler': 0.84.2 '@glimmer/component': 1.1.2(@babel/core@7.23.2) @@ -10615,7 +11325,7 @@ packages: '@glimmer/reference': 0.84.2 '@glimmer/runtime': 0.84.2 '@glimmer/syntax': 0.84.2 - '@glimmer/validator': 0.84.2 + '@glimmer/validator': 0.84.3 '@glimmer/vm-babel-plugins': 0.84.3(@babel/core@7.23.2) '@simple-dom/interface': 1.4.0 babel-plugin-debug-macros: 0.3.4(@babel/core@7.23.2) @@ -10628,7 +11338,7 @@ packages: broccoli-merge-trees: 4.2.0 chalk: 4.1.2 ember-auto-import: 2.6.3(webpack@5.89.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-get-component-path-option: 1.0.0 ember-cli-is-package-missing: 1.0.0 ember-cli-normalize-entity-name: 1.0.0 @@ -10638,7 +11348,7 @@ packages: ember-cli-version-checker: 5.1.2 ember-router-generator: 2.0.0 inflection: 2.0.1 - resolve: 1.22.4 + resolve: 1.22.8 route-recognizer: 0.3.4 router_js: 8.0.3(route-recognizer@0.3.4) semver: 7.5.4 @@ -10654,49 +11364,12 @@ packages: resolution: {integrity: sha512-GeI1LLLt470sjaq/huKGQTDJPDOH0FlrX8FFVcSZPXO2U9FQH7Kc8BaXb4GpViJbfLLC4d7tIUZI4NBnuXSmKg==} engines: {node: 10.* || >= 12} dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /ember-template-imports@3.4.2: - resolution: {integrity: sha512-OS8TUVG2kQYYwP3netunLVfeijPoOKIs1SvPQRTNOQX4Pu8xGGBEZmrv0U1YTnQn12Eg+p6w/0UdGbUnITjyzw==} - engines: {node: 12.* || >= 14} - dependencies: - babel-import-util: 0.2.0 - broccoli-stew: 3.0.0 - ember-cli-babel-plugin-helpers: 1.1.1 - ember-cli-version-checker: 5.1.2 - line-column: 1.0.2 - magic-string: 0.25.9 - parse-static-imports: 1.1.0 - string.prototype.matchall: 4.0.9 - validate-peer-dependencies: 1.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /ember-template-recast@6.1.4: - resolution: {integrity: sha512-fCh+rOK6z+/tsdkTbOE+e7f84P6ObnIRQrCCrnu21E4X05hPeradikIkRMhJdxn4NWrxitfZskQDd37TR/lsNQ==} - engines: {node: 12.* || 14.* || >= 16.*} - hasBin: true - dependencies: - '@glimmer/reference': 0.84.3 - '@glimmer/syntax': 0.84.3 - '@glimmer/validator': 0.84.3 - async-promise-queue: 1.0.5 - colors: 1.4.0 - commander: 8.3.0 - globby: 11.1.0 - ora: 5.4.1 - slash: 3.0.0 - tmp: 0.2.1 - workerpool: 6.4.2 - transitivePeerDependencies: - - supports-color - dev: true - /ember-try-config@4.0.0: resolution: {integrity: sha512-jAv7fqYJK7QYYekPc/8Nr7KOqDpv/asqM6F8xcRnbmf9UrD35BkSffY63qUuiD9e0aR5qiMNBIQzH8f65rGDqw==} engines: {node: 10.* || 12.* || >= 14} @@ -10721,7 +11394,7 @@ packages: ember-try-config: 4.0.0 execa: 4.1.0 fs-extra: 6.0.1 - resolve: 1.22.4 + resolve: 1.22.8 rimraf: 3.0.2 semver: 7.5.4 walk-sync: 2.2.0 @@ -10767,13 +11440,13 @@ packages: resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} engines: {node: '>=10.0.0'} - /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.5.9 + '@types/cors': 2.8.15 + '@types/node': 20.8.7 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -10797,7 +11470,7 @@ packages: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: - ansi-colors: 4.1.1 + ansi-colors: 4.1.3 /ensure-posix-path@1.1.1: resolution: {integrity: sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==} @@ -10821,31 +11494,36 @@ packages: resolution: {integrity: sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==} engines: {node: '>=0.8'} + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + /error@7.2.1: resolution: {integrity: sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==} dependencies: string-template: 0.2.1 - /es-abstract@1.22.1: - resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + hasown: 2.0.0 + internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -10854,38 +11532,37 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 - /es-module-lexer@1.3.0: - resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + /es-module-lexer@1.3.1: + resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==} - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 + get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 + hasown: 2.0.0 - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - has: 1.0.3 - dev: true + hasown: 2.0.0 /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -10925,26 +11602,24 @@ packages: optionalDependencies: source-map: 0.6.1 - /eslint-config-prettier@9.0.0(eslint@8.51.0): + /eslint-config-prettier@9.0.0(eslint@8.52.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 - dev: true + eslint: 8.52.0 /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.0 - resolve: 1.22.4 + is-core-module: 2.13.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -10965,50 +11640,14 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - - /eslint-plugin-ember@11.11.1(eslint@8.51.0): - resolution: {integrity: sha512-dvsDa4LkDkGqCE2bzBIguRMi1g40JVwRWMSHmn8S7toRDxSOU3M7yromgi5eSAJX2O2vEvJZ9QnR15YDbvNfVQ==} - engines: {node: 14.* || 16.* || >= 18} - peerDependencies: - eslint: '>= 7' - dependencies: - '@ember-data/rfc395-data': 0.0.4 - '@glimmer/syntax': 0.84.3 - css-tree: 2.3.1 - ember-rfc176-data: 0.3.18 - ember-template-imports: 3.4.2 - ember-template-recast: 6.1.4 - eslint: 8.51.0 - eslint-utils: 3.0.0(eslint@8.51.0) - estraverse: 5.3.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - magic-string: 0.30.3 - requireindex: 1.2.0 - snake-case: 3.0.4 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-es@3.0.1(eslint@8.51.0): - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - eslint: 8.51.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.51.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.52.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -11018,18 +11657,18 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.52.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0) - has: 1.0.3 - is-core-module: 2.13.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) + has: 1.0.4 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.7 @@ -11041,35 +11680,8 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - - /eslint-plugin-mocha@10.2.0(eslint@8.51.0): - resolution: {integrity: sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.51.0 - eslint-utils: 3.0.0(eslint@8.51.0) - rambda: 7.5.0 - dev: true - - /eslint-plugin-node@11.1.0(eslint@8.51.0): - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - dependencies: - eslint: 8.51.0 - eslint-plugin-es: 3.0.1(eslint@8.51.0) - eslint-utils: 2.1.0 - ignore: 5.2.4 - minimatch: 3.1.2 - resolve: 1.22.4 - semver: 6.3.1 - dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3): + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3): resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -11083,30 +11695,18 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.51.0 - eslint-config-prettier: 9.0.0(eslint@8.51.0) + eslint: 8.52.0 + eslint-config-prettier: 9.0.0(eslint@8.52.0) prettier: 3.0.3 prettier-linter-helpers: 1.0.0 synckit: 0.8.5 - dev: true - - /eslint-plugin-qunit@8.0.1(eslint@8.51.0): - resolution: {integrity: sha512-3bFOPryXoQOez95oP/JfWTxHBc/bgDQQZqTuv9uYTwH5sdIvSM2TES1iHDcy/F/LvqiqIpscDAOPAjlqSCnNPg==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} - dependencies: - eslint-utils: 3.0.0(eslint@8.51.0) - requireindex: 1.2.0 - transitivePeerDependencies: - - eslint - dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.51.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.52.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.51.0 - dev: true + eslint: 8.52.0 /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -11121,52 +11721,28 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - - /eslint-utils@3.0.0(eslint@8.51.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.51.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - dev: true /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.52.0: + resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@eslint-community/regexpp': 4.8.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint/js': 8.52.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -11182,7 +11758,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 + globals: 13.23.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -11199,7 +11775,6 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true /esm@3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} @@ -11212,7 +11787,6 @@ packages: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - dev: true /esprima@3.0.0: resolution: {integrity: sha512-xoBq/MIShSydNZOkjkoCEjqod963yHNXTLC40ypBhop6yPqflPz/vTinmCfSrGcywVLnSftRf6a0kJLdFdzemw==} @@ -11229,7 +11803,6 @@ packages: engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 - dev: true /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -11336,7 +11909,6 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: true /exists-sync@0.0.3: resolution: {integrity: sha512-/qPB5E0cRuA/Cs5vHrmKYSfhIBCPJs9Vm3e9aIejMwwbe6idMeNbGu1g5stvr/bXT6HywHckLPEkmY7HK6FlwA==} @@ -11453,7 +12025,6 @@ packages: /fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} @@ -11473,7 +12044,9 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} /fast-sourcemap-concat@1.4.0: resolution: {integrity: sha512-x90Wlx/2C83lfyg7h4oguTZN4MyaVfaiUSJQNpU+YEA0Odf9u659Opo44b0LfoVg9G/bOE++GdID/dkyja+XcA==} @@ -11535,7 +12108,7 @@ packages: cookie: 0.4.2 debug: 4.3.4(supports-color@8.1.1) jsdom: 19.0.0 - resolve: 1.22.4 + resolve: 1.22.8 simple-dom: 1.4.0 source-map-support: 0.5.21 transitivePeerDependencies: @@ -11587,11 +12160,10 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.0 - dev: true + flat-cache: 3.1.1 - /filesize@10.0.12: - resolution: {integrity: sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==} + /filesize@10.1.0: + resolution: {integrity: sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==} engines: {node: '>= 10.4.0'} /fill-range@4.0.0: @@ -11761,33 +12333,31 @@ packages: resolution: {integrity: sha512-SRgwIMXlxkb6AUgaVjIX+jCEqdhyXu9hah7mcK+lWynjKtX73Ux1TDv71B7XyaQ+LJxkYRHl5yCL8IycAvQRUw==} engines: {node: 10.* || >= 12.*} dependencies: - '@types/fs-extra': 8.1.2 + '@types/fs-extra': 8.1.4 '@types/minimatch': 3.0.5 '@types/rimraf': 2.0.5 fs-extra: 8.1.0 matcher-collection: 2.0.1 walk-sync: 2.2.0 - /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.7 - keyv: 4.5.3 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 - dev: true /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - /follow-redirects@1.15.2(debug@4.3.4): - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + /follow-redirects@1.15.3(debug@4.3.4): + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -11990,7 +12560,7 @@ packages: resolution: {integrity: sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A==} engines: {node: 6.* || 8.* || >= 10.*} dependencies: - '@types/symlink-or-copy': 1.2.0 + '@types/symlink-or-copy': 1.2.1 heimdalljs-logger: 0.1.10 object-assign: 4.1.1 path-posix: 1.0.0 @@ -12020,16 +12590,16 @@ packages: requiresBuild: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 functions-have-names: 1.2.3 /functions-have-names@1.2.3: @@ -12056,16 +12626,22 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 + hasown: 2.0.0 + + /get-source@2.0.12: + resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + dependencies: + data-uri-to-buffer: 2.0.2 + source-map: 0.6.1 /get-stdin@4.0.1: resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} @@ -12092,15 +12668,15 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 - /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(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: @@ -12152,7 +12728,6 @@ packages: engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -12165,7 +12740,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.3 - minipass: 7.0.3 + minipass: 7.0.4 path-scurry: 1.10.1 dev: true @@ -12231,12 +12806,11 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 - dev: true /globals@9.18.0: resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} @@ -12247,7 +12821,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} @@ -12289,6 +12863,16 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 4.0.0 dev: true /globrex@0.1.2: @@ -12297,7 +12881,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 /got@9.6.0: resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} @@ -12306,7 +12890,7 @@ packages: '@sindresorhus/is': 0.14.0 '@szmarczak/http-timer': 1.1.2 '@types/keyv': 3.1.4 - '@types/responselike': 1.0.0 + '@types/responselike': 1.0.2 cacheable-request: 6.1.0 decompress-response: 3.3.0 duplexer3: 0.1.5 @@ -12318,6 +12902,9 @@ packages: url-parse-lax: 3.0.0 dev: true + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -12327,7 +12914,6 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true /growly@1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} @@ -12367,10 +12953,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -12416,11 +13002,9 @@ packages: is-number: 3.0.0 kind-of: 4.0.0 - /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==} @@ -12429,11 +13013,17 @@ packages: heimdalljs: 0.2.6 heimdalljs-logger: 0.1.10 path-root: 0.1.1 - resolve: 1.22.4 + resolve: 1.22.8 resolve-package-path: 1.2.7 transitivePeerDependencies: - supports-color + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + /hawk@1.1.1: resolution: {integrity: sha512-am8sVA2bCJIw8fuuVcKvmmNnGFUGW8spTkVtj2fXTEZVkfN42bwFZFtDem57eFi+NSxurJB8EQ7Jd3uCHLn8Vw==} engines: {node: '>=0.8.0'} @@ -12498,8 +13088,8 @@ packages: dependencies: parse-passwd: 1.0.0 - /hono@3.8.1: - resolution: {integrity: sha512-im5K3bEyb6iMQP5Tfei5vfoHLnIKrsAqT/GNJJ4lxS75MvNaecUbPX0Xgi0ibTIos31lA5oYevMDGNNXhHJ9wA==} + /hono@3.8.2: + resolution: {integrity: sha512-4NCjNbew1RRUySO5atcEw2bWIJd2+W5B0gCks4DAFJGbjoFuexxWox8PQuQkZwvqLEVoEk085P9Y/O+YrX1MCQ==} engines: {node: '>=16.0.0'} /hosted-git-info@4.1.0: @@ -12586,12 +13176,12 @@ packages: transitivePeerDependencies: - supports-color - /http-proxy@1.18.1(debug@4.3.4): + /http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2(debug@4.3.4) + follow-redirects: 1.15.3(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -12640,7 +13230,6 @@ packages: /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} - dev: true /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -12661,13 +13250,13 @@ packages: safer-buffer: 2.1.2 dev: true - /icss-utils@5.1.0(postcss@8.4.29): + /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.29 + postcss: 8.4.31 /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -12682,7 +13271,6 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -12693,6 +13281,9 @@ packages: engines: {node: '>=8'} dev: true + /individual@3.0.0: + resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} + /infer-owner@1.0.4: resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} dev: true @@ -12720,6 +13311,10 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + /ini@3.0.1: + resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + /inline-source-map-comment@1.0.5: resolution: {integrity: sha512-a3/m6XgooVCXkZCduOb7pkuvUtNKt4DaqaggKKJrMQHQsqt6JcJXEreExeZiiK4vWL/cM/uF6+chH05pz2/TdQ==} hasBin: true @@ -12767,11 +13362,11 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 - /inquirer@9.2.10: - resolution: {integrity: sha512-tVVNFIXU8qNHoULiazz612GFl+yqNfjMTbLuViNJE/d860Qxrd3NMrse8dm40VUQLOQeULvaQF8lpAhvysjeyA==} + /inquirer@9.2.11: + resolution: {integrity: sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==} engines: {node: '>=14.18.0'} dependencies: - '@ljharb/through': 2.3.9 + '@ljharb/through': 2.3.11 ansi-escapes: 4.3.2 chalk: 5.3.0 cli-cursor: 3.1.0 @@ -12787,12 +13382,12 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 /invariant@2.2.4: @@ -12830,10 +13425,13 @@ packages: /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: @@ -12850,7 +13448,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 /is-buffer@1.1.6: @@ -12867,10 +13465,10 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.3 + hasown: 2.0.0 /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} @@ -12915,7 +13513,6 @@ packages: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dev: true /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} @@ -12962,7 +13559,6 @@ packages: hasBin: true dependencies: is-docker: 3.0.0 - dev: true /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} @@ -13014,7 +13610,6 @@ packages: /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - dev: true /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} @@ -13038,7 +13633,7 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 /is-regexp@1.0.0: @@ -13048,7 +13643,7 @@ packages: /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} @@ -13061,7 +13656,6 @@ packages: /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -13069,6 +13663,12 @@ packages: dependencies: has-tostringtag: 1.0.0 + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + dependencies: + better-path-resolve: 1.0.0 + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} @@ -13084,7 +13684,7 @@ packages: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.13 /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -13100,7 +13700,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -13167,7 +13767,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.5.9 + '@types/node': 20.8.7 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -13202,7 +13802,6 @@ packages: hasBin: true dependencies: argparse: 2.0.1 - dev: true /jsdom@16.7.0(supports-color@8.1.1): resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} @@ -13280,7 +13879,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 10.0.0 - ws: 8.13.0 + ws: 8.14.2 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -13308,7 +13907,6 @@ packages: /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true /json-fn@1.1.1: resolution: {integrity: sha512-diGeurhgiazd1lfByjn83uQkF6fVFdiCiQgJyhN3/aCl7EKye0aZe3r9eeQPKcsCh81Mntrvt46z65cn7ZwZHA==} @@ -13329,7 +13927,6 @@ packages: /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true /json-stable-stringify@1.0.2: resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} @@ -13344,7 +13941,6 @@ packages: hasBin: true dependencies: minimist: 1.2.8 - dev: true /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} @@ -13377,11 +13973,10 @@ 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 /kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} @@ -13451,7 +14046,6 @@ packages: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true /line-column@1.0.2: resolution: {integrity: sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==} @@ -13459,6 +14053,9 @@ packages: isarray: 1.0.0 isobject: 2.1.0 + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /linkify-it@1.2.4: resolution: {integrity: sha512-eGHwtlABkp1NOJSiKUNqBf3SYAS5jPHtvRXPAgNaQwTqmkTahjtiLH9NtxdR5IOPhNvwNMN/diswSfZKzUkhGg==} dependencies: @@ -13473,6 +14070,15 @@ packages: /livereload-js@3.4.1: resolution: {integrity: sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==} + /load-json-file@6.2.0: + resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 5.2.0 + strip-bom: 4.0.0 + type-fest: 0.6.0 + /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -13599,10 +14205,6 @@ packages: /lodash.isarray@3.0.4: resolution: {integrity: sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==} - /lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - dev: true - /lodash.keys@3.1.2: resolution: {integrity: sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==} dependencies: @@ -13663,16 +14265,10 @@ packages: js-tokens: 4.0.0 dev: true - /loupe@2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: - get-func-name: 2.0.0 - - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.2 - dev: true + get-func-name: 2.0.2 /lowercase-keys@1.0.1: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} @@ -13709,13 +14305,6 @@ packages: dependencies: sourcemap-codec: 1.4.8 - /magic-string@0.30.3: - resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -13770,13 +14359,17 @@ packages: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + /map-visit@1.0.0: resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} engines: {node: '>=0.10.0'} dependencies: object-visit: 1.0.1 - /markdown-it-terminal@0.4.0(markdown-it@13.0.1): + /markdown-it-terminal@0.4.0(markdown-it@13.0.2): resolution: {integrity: sha512-NeXtgpIK6jBciHTm9UhiPnyHDdqyVIdRPJ+KdQtZaf/wR74gvhCNbw5li4TYsxRp5u3ZoHEF4DwpECeZqyCw+w==} peerDependencies: markdown-it: '>= 13.0.0' @@ -13785,10 +14378,10 @@ packages: cardinal: 1.0.0 cli-table: 0.3.11 lodash.merge: 4.6.2 - markdown-it: 13.0.1 + markdown-it: 13.0.2 - /markdown-it@13.0.1: - resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} + /markdown-it@13.0.2: + resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} hasBin: true dependencies: argparse: 2.0.1 @@ -13831,10 +14424,6 @@ packages: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} dev: true - /mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true - /mdn-links@0.1.0: resolution: {integrity: sha512-m+gI2Hrgro1O0SwqHd9cFkqN8VGzP56eprB63gxu6z9EFQDMeaR083wcNqMVADIbgiMP/TOCCe0ZIXHLBv2tUg==} dev: true @@ -13854,6 +14443,13 @@ packages: mimic-fn: 2.1.0 p-is-promise: 2.1.0 + /mem@8.1.1: + resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} + engines: {node: '>=10'} + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 3.1.0 + /memory-streams@0.1.3: resolution: {integrity: sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==} dependencies: @@ -13942,10 +14538,13 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + /mimic-fn@3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} + /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: true /mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} @@ -14055,8 +14654,8 @@ packages: engines: {node: '>=8'} dev: true - /minipass@7.0.3: - resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} dev: true @@ -14195,7 +14794,17 @@ packages: /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + + /ndjson@2.0.0: + resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + json-stringify-safe: 5.0.1 + minimist: 1.2.8 + readable-stream: 3.6.2 + split2: 3.2.2 + through2: 4.0.2 /needle@2.4.0: resolution: {integrity: sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==} @@ -14204,7 +14813,7 @@ packages: dependencies: debug: 3.2.7 iconv-lite: 0.4.24 - sax: 1.2.4 + sax: 1.3.0 transitivePeerDependencies: - supports-color @@ -14222,20 +14831,12 @@ packages: /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 - dev: true - - /nock@13.3.3: - resolution: {integrity: sha512-z+KUlILy9SK/RjpeXDiDUEAq4T94ADPHE3qaRkf66mpEhzc/ytOMm3Bwdrbq6k1tMWkbdujiKim3G2tfQARuJw==} + /nock@13.3.6: + resolution: {integrity: sha512-lT6YuktKroUFM+27mubf2uqQZVy2Jf+pfGzuh9N6VwdHlFoZqvi4zyxFTVR1w/ChPqGY6yxGehHp6C3wqCASCw==} engines: {node: '>= 10.13'} dependencies: debug: 4.3.4(supports-color@8.1.1) json-stringify-safe: 5.0.1 - lodash: 4.17.21 propagate: 2.0.1 transitivePeerDependencies: - supports-color @@ -14300,6 +14901,9 @@ packages: engines: {node: '>=0.10.0'} requiresBuild: true + /normalize-registry-url@2.0.0: + resolution: {integrity: sha512-3e9FwDyRAhbxXw4slm4Tjv40u78yPwMc/WZkACpqNQOs5sM7wic853AeTLkMFEVhivZkclGYlse8iYsklz0Yvg==} + /normalize-url@4.5.1: resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} engines: {node: '>=8'} @@ -14334,7 +14938,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: true /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} @@ -14378,8 +14981,8 @@ packages: resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==} engines: {node: '>= 0.10.0'} - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -14395,8 +14998,8 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + call-bind: 1.0.5 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -14404,19 +15007,17 @@ packages: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} @@ -14428,10 +15029,9 @@ packages: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 /on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} @@ -14471,7 +15071,6 @@ packages: engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: true /open@9.1.0: resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} @@ -14481,7 +15080,6 @@ packages: define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 2.2.0 - dev: true /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -14493,7 +15091,6 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true /ora@3.4.0: resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} @@ -14501,7 +15098,7 @@ packages: dependencies: chalk: 2.4.2 cli-cursor: 2.1.0 - cli-spinners: 2.9.0 + cli-spinners: 2.9.1 log-symbols: 2.2.0 strip-ansi: 5.2.0 wcwidth: 1.0.1 @@ -14513,7 +15110,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.0 + cli-spinners: 2.9.1 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -14555,6 +15152,12 @@ packages: resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} engines: {node: '>=8'} + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -14607,6 +15210,10 @@ packages: p-limit: 4.0.0 dev: true + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + /p-map@3.0.0: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} engines: {node: '>=8'} @@ -14632,7 +15239,7 @@ packages: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 debug: 4.3.4(supports-color@8.1.1) - get-uri: 6.0.1 + get-uri: 6.0.2 http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 pac-resolver: 7.0.0 @@ -14666,7 +15273,19 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + /parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} @@ -14696,6 +15315,10 @@ packages: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} engines: {node: '>=0.10.0'} + /path-absolute@1.0.1: + resolution: {integrity: sha512-gds5iRhSeOcDtj8gfWkRHLtZKTPsFVuh7utbjYtvnclw4XM+ffRzJrwqMhOD1PVqef7nBLmgsu1vIujjvAJrAw==} + engines: {node: '>=4'} + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -14724,7 +15347,9 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: true + + /path-name@1.0.0: + resolution: {integrity: sha512-/dcAb5vMXH0f51yvMuSUqFpxUcA8JelbRmE5mW/p4CUJxrNgK24IkstnV7ENtg2IDGBOu6izKTG6eilbnbNKWQ==} /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -14747,9 +15372,15 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.0.1 - minipass: 7.0.3 + minipass: 7.0.4 dev: true + /path-temp@2.1.0: + resolution: {integrity: sha512-cMMJTAZlion/RWRRC48UbrDymEIt+/YSD/l8NqjneyDw2rDOBQcP5yRkMB4CYGn47KMhZvbblBP7Z79OsMw72w==} + engines: {node: '>=8.15'} + dependencies: + unique-string: 2.0.0 + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -14855,7 +15486,7 @@ packages: async: 3.2.4 debug: 4.3.4(supports-color@8.1.1) pidusage: 2.0.21 - systeminformation: 5.21.6 + systeminformation: 5.21.13 tx2: 1.0.5 transitivePeerDependencies: - supports-color @@ -14877,7 +15508,7 @@ packages: cli-tableau: 2.0.1 commander: 2.15.1 croner: 4.1.97 - dayjs: 1.11.9 + dayjs: 1.11.10 debug: 4.3.4(supports-color@8.1.1) enquirer: 2.3.6 eventemitter2: 5.0.1 @@ -14902,6 +15533,24 @@ packages: - supports-color - utf-8-validate + /pnpm-sync-dependencies-meta-injected@0.0.10: + resolution: {integrity: sha512-kPcYZLaLgo5WhlgWciCJFqdxprIqaR52cY1C8KH3RGdia1YwT1wO/AOKyvOydNBJmpdcLxka2a0La9CaStxG/A==} + engines: {node: '>=16.0.0'} + hasBin: true + dependencies: + '@pnpm/find-workspace-dir': 6.0.2 + '@pnpm/find-workspace-packages': 6.0.9(@pnpm/logger@5.0.0) + '@pnpm/fs.hard-link-dir': 2.0.1(@pnpm/logger@5.0.0) + '@pnpm/logger': 5.0.0 + '@pnpm/read-project-manifest': 5.0.7 + debug: 4.3.4(supports-color@9.4.0) + fs-extra: 11.1.1 + proper-lockfile: 4.1.2 + resolve-package-path: 4.0.3 + supports-color: 9.4.0 + watcher: 2.3.0 + yargs: 17.7.2 + /portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -14916,42 +15565,42 @@ packages: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} - /postcss-modules-extract-imports@3.0.0(postcss@8.4.29): + /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.29 + postcss: 8.4.31 - /postcss-modules-local-by-default@4.0.3(postcss@8.4.29): + /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.29) - postcss: 8.4.29 + 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.29): + /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.29 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 - /postcss-modules-values@4.0.0(postcss@8.4.29): + /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.29) - postcss: 8.4.29 + 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==} @@ -14963,8 +15612,8 @@ packages: /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /postcss@8.4.29: - resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -14974,7 +15623,6 @@ packages: /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - dev: true /prepend-http@2.0.0: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} @@ -14993,7 +15641,6 @@ packages: engines: {node: '>=6.0.0'} dependencies: fast-diff: 1.3.0 - dev: true /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} @@ -15004,7 +15651,19 @@ packages: resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} engines: {node: '>=14'} hasBin: true - dev: true + + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + /pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + dependencies: + parse-ms: 2.1.0 + + /printable-characters@1.0.42: + resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} /printf@0.6.1: resolution: {integrity: sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==} @@ -15059,13 +15718,15 @@ packages: resolution: {integrity: sha512-KYcnXctWUWyVD3W3Ye0ZDuA1N8Szrh85cVCxpG6xYrOk/0CttRtYCmU30nWsUch0NuExQQ63QXvzRE6FLimZmg==} engines: {node: 10.* || >= 12.*} - /promise.prototype.finally@3.1.5: - resolution: {integrity: sha512-4TQ3Dk8yyUZGyU+UXInKdkQ2b6xtiBXAIScGAtGnXVmJtG1uOrxRgbF1ggIu72uzoWFzUfT3nUKa1SuMm9NBdg==} + /promise.prototype.finally@3.1.7: + resolution: {integrity: sha512-iL9OcJRUZcCE5xn6IwhZxO+eMM0VEXjkETHy+Nk+d9q3s7kxVtPg+mBlMO+ZGxNKNMODyKmy/bOyt/yhxTnvEw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + set-function-name: 2.0.1 dev: true /promptly@2.2.0: @@ -15078,6 +15739,16 @@ packages: engines: {node: '>= 8'} dev: true + /proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -15105,7 +15776,6 @@ packages: /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - requiresBuild: true dev: true /pump@3.0.0: @@ -15140,18 +15810,21 @@ packages: /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - requiresBuild: true dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /quibble@0.7.0: - resolution: {integrity: sha512-uiqtYLo6p6vWR/G3Ltsg0NU1xw43RcNGadYP+d/DF3zLQTyOt8uC7L2mmcJ97au1QE1YdmCD+HVIIq/RGtkbWA==} + /quibble@0.9.0: + resolution: {integrity: sha512-gpBmqaEPl0nNZuDq16sLO7g/aYcrldSIls8igHm5EYP02+Kzmn/DCNpcSGywnhTk6aNJXkUv6vrRDvrJyRJ2Xw==} engines: {node: '>= 0.14.0'} dependencies: lodash: 4.17.21 - resolve: 1.22.4 + resolve: 1.22.8 + + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} /quick-temp@0.1.8: resolution: {integrity: sha512-YsmIFfD9j2zaFwJkzI6eMG7y0lQP7YeWzgtFgNl38pGWZBSXJooZbOWwkcRot7Vt0Fg9L23pX0tqWU3VvLDsiA==} @@ -15183,10 +15856,6 @@ packages: tiny-glob: 0.2.9 patched: true - /rambda@7.5.0: - resolution: {integrity: sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==} - dev: true - /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -15232,6 +15901,20 @@ packages: strip-json-comments: 2.0.1 dev: true + /read-ini-file@4.0.0: + resolution: {integrity: sha512-zz4qv/sKETv7nAkATqSJ9YMbKD8NXRPuA8d17VdYCuNYrVstB1S6UAMU6aytf5vRa9MESbZN7jLZdcmrOxz4gg==} + engines: {node: '>=14.6'} + dependencies: + ini: 3.0.1 + strip-bom: 4.0.0 + + /read-yaml-file@2.1.0: + resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} + engines: {node: '>=10.13'} + dependencies: + js-yaml: 4.1.0 + strip-bom: 4.0.0 + /read@1.0.7: resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} engines: {node: '>=0.8'} @@ -15261,6 +15944,10 @@ packages: dependencies: picomatch: 2.3.1 + /realpath-missing@1.1.0: + resolution: {integrity: sha512-wnWtnywepjg/eHIgWR97R7UuM5i+qHLA195qdN9UPKvcMqfn60+67S8sPPW3vDlSEfYHoFkKU8IvpCNty3zQvQ==} + engines: {node: '>=10'} + /recast@0.18.10: resolution: {integrity: sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ==} engines: {node: '>= 4'} @@ -15285,8 +15972,8 @@ packages: dependencies: esprima: 3.0.0 - /regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 @@ -15324,18 +16011,13 @@ packages: extend-shallow: 3.0.2 safe-regex: 1.1.0 - /regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 - - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 /regexpu-core@2.0.0: resolution: {integrity: sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==} @@ -15351,7 +16033,7 @@ packages: dependencies: '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 + regenerate-unicode-properties: 10.1.1 regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 @@ -15437,7 +16119,6 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: true /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -15449,15 +16130,10 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) module-details-from-path: 1.0.3 - resolve: 1.22.4 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - /requireindex@1.2.0: - resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} - engines: {node: '>=0.10.5'} - dev: true - /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -15474,20 +16150,19 @@ packages: /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-package-path@1.2.7: resolution: {integrity: sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q==} dependencies: path-root: 0.1.1 - resolve: 1.22.4 + resolve: 1.22.8 /resolve-package-path@3.1.0: resolution: {integrity: sha512-2oC2EjWbMJwvSN6Z7DbDfJMnD8MYEouaLn5eIX0j8XwPsYCVIyY9bbnX88YHVkbr8XHqvZrYbxaLPibfTYKZMA==} engines: {node: 10.* || >= 12} dependencies: path-root: 0.1.1 - resolve: 1.22.4 + resolve: 1.22.8 /resolve-package-path@4.0.3: resolution: {integrity: sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA==} @@ -15506,11 +16181,11 @@ packages: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -15541,12 +16216,15 @@ packages: /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + /right-pad@1.0.1: + resolution: {integrity: sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==} + engines: {node: '>= 0.10'} + /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} hasBin: true @@ -15655,7 +16333,6 @@ packages: engines: {node: '>=12'} dependencies: execa: 5.1.1 - dev: true /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} @@ -15684,12 +16361,12 @@ packages: dependencies: tslib: 2.6.2 - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 @@ -15699,14 +16376,22 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-execa@0.1.2: + resolution: {integrity: sha512-vdTshSQ2JsRCgT8eKZWNJIL26C6bVqy1SOmuCMlKHegVeo8KYRobRrefOdUq9OozSPUUiSxrylteeRmLOMFfWg==} + engines: {node: '>=12'} + dependencies: + '@zkochan/which': 2.0.3 + execa: 5.1.1 + path-name: 1.0.0 + /safe-json-parse@1.0.1: resolution: {integrity: sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==} /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 /safe-regex@1.1.0: @@ -15754,8 +16439,8 @@ packages: minimist: 1.2.8 walker: 1.0.8 - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + /sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} /saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} @@ -15768,7 +16453,7 @@ packages: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.14 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) @@ -15776,7 +16461,7 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.14 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) @@ -15784,7 +16469,7 @@ packages: resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} dependencies: - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.14 ajv: 8.12.0 ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.12.0) @@ -15849,6 +16534,23 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} @@ -15893,9 +16595,9 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -15903,7 +16605,6 @@ packages: /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - dev: true /silent-error@1.1.1: resolution: {integrity: sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw==} @@ -15934,17 +16635,15 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: true - /snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} @@ -16009,7 +16708,7 @@ packages: base64id: 2.0.0 cors: 2.8.5 debug: 4.3.4(supports-color@8.1.1) - engine.io: 6.5.2 + engine.io: 6.5.3 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -16045,6 +16744,12 @@ packages: ip: 2.0.0 smart-buffer: 4.2.0 + /sort-keys@4.2.0: + resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} + engines: {node: '>=8'} + dependencies: + is-plain-obj: 2.1.0 + /sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} @@ -16131,12 +16836,20 @@ packages: dependencies: extend-shallow: 3.0.2 + /split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + dependencies: + readable-stream: 3.6.2 + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} /sprintf-js@1.1.2: resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + /sri-toolbox@0.2.0: resolution: {integrity: sha512-DQIMWCAr/M7phwo+d3bEfXwSBEwuaJL+SJx9cuqt1Ty7K96ZFoHpYnSbhrQZEr0+0/GtmpKECP8X/R4RyeTAfw==} engines: {node: '>= 0.10.4'} @@ -16149,6 +16862,12 @@ packages: minipass: 3.3.6 dev: true + /stacktracey@2.1.8: + resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + dependencies: + as-table: 1.0.55 + get-source: 2.0.12 + /stagehand@1.0.1: resolution: {integrity: sha512-GqXBq2SPWv9hTXDFKS8WrKK1aISB0aKGHZzH+uD4ShAgs+Fz20ZfoerLOm8U+f62iRWLrw6nimOY/uYuTcVhvg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -16172,6 +16891,13 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + /string-template@0.2.1: resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} @@ -16199,39 +16925,40 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.matchall@4.0.9: - resolution: {integrity: sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==} + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 - internal-slot: 1.0.5 - regexp.prototype.flags: 1.5.0 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 side-channel: 1.0.4 - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} @@ -16288,7 +17015,13 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: true + + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + /strip-comments-strings@1.2.0: + resolution: {integrity: sha512-zwF4bmnyEjZwRhaak9jUWNxc0DoeKBJ7lwSN/LEc8dQXZcUFG6auaaTQJokQWXopLdM3iTx01nQT8E4aL29DAQ==} /strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} @@ -16301,7 +17034,6 @@ packages: /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: true /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} @@ -16311,7 +17043,9 @@ packages: /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true + + /stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} /style-loader@2.0.0(webpack@5.89.0): resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} @@ -16357,6 +17091,10 @@ packages: dependencies: has-flag: 4.0.0 + /supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -16397,10 +17135,9 @@ packages: dependencies: '@pkgr/utils': 2.4.2 tslib: 2.6.2 - dev: true - /systeminformation@5.21.6: - resolution: {integrity: sha512-wMf5w8ZtNCHhkSNVD/aEbg/5V4ke7XuCqTn+d9GcfZIce8VbeYtb8sQCz/L9LcK3O2QRPHxqWJnKyaAvGfsn2Q==} + /systeminformation@5.21.13: + resolution: {integrity: sha512-sGgMhQxxjKHSIJtv7g5s19IRpfCgLG3tZqGbFcfGFyMm1hJ3BmzTfaq0yyOO2oLHlbkM49mgMjnPPB8g573LMA==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true @@ -16456,15 +17193,15 @@ packages: webpack: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.19.4 + terser: 5.22.0 webpack: 5.89.0 - /terser@5.19.4: - resolution: {integrity: sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==} + /terser@5.22.0: + resolution: {integrity: sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -16473,16 +17210,16 @@ packages: commander: 2.20.3 source-map-support: 0.5.21 - /testdouble@3.18.0: - resolution: {integrity: sha512-awRay/WxNHYz0SJrjvvg1xE4QQkbKgWFN1VNhhb132JSO2FSWUW4cebUtD0HjWWwrvpN3uFsVeaUhwpmVlzlkg==} - engines: {node: '>= 14'} + /testdouble@3.20.0: + resolution: {integrity: sha512-P/wfyKF1P1AE8/VM6PXCtSQJyOgPObOg191TlVZnoSQw/hhFXvxIFM5yGJ7Bf9Hs0FX8677YCv3esVgPGSeTLg==} + engines: {node: '>= 16'} dependencies: lodash: 4.17.21 - quibble: 0.7.0 + quibble: 0.9.0 stringify-object-es5: 2.5.0 theredoc: 1.0.0 - /testem@3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm)(debug@4.3.4): + /testem@3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm): resolution: {integrity: sha512-42c4e7qlAelwMd8O3ogtVGRbgbr6fJnX6H51ACOIG1V1IjsKPlcQtxPyOwaL4iikH22Dfh+EyIuJnMG4yxieBQ==} engines: {node: '>= 7.*'} hasBin: true @@ -16498,7 +17235,7 @@ packages: express: 4.18.2 fireworm: 0.7.2 glob: 7.2.3 - http-proxy: 1.18.1(debug@4.3.4) + http-proxy: 1.18.1 js-yaml: 3.14.1 lodash.assignin: 4.2.0 lodash.castarray: 4.4.0 @@ -16577,7 +17314,6 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true /textextensions@2.6.0: resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==} @@ -16622,6 +17358,11 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 + /through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.2 + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -16643,10 +17384,12 @@ packages: transitivePeerDependencies: - supports-color + /tiny-readdir@2.2.0: + resolution: {integrity: sha512-bO4IgID5M2x5YQFBru/wREgT30YuA8aoOd/F8Rd6LKRIn1gOe9aREjT74J9EVukHqI/2RB+4SM1RgXM0gwxoWw==} + /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} - dev: true /tmp-sync@1.1.2: resolution: {integrity: sha512-npRDYJiMaPWhcLf6q06v/vA3o/ZG4hfHDiBuj1N3Yeh3GTkFQb1YLFs6inDGMWIHjGidl4Oc1+oXHNKKj5vkDQ==} @@ -16780,14 +17523,13 @@ packages: transitivePeerDependencies: - supports-color - /ts-api-utils@1.0.2(typescript@5.2.2): - resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '*' dependencies: typescript: 5.2.2 - dev: true /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} @@ -16796,7 +17538,6 @@ packages: json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -16813,6 +17554,66 @@ packages: dev: true optional: true + /turbo-darwin-64@1.10.16: + resolution: {integrity: sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /turbo-darwin-arm64@1.10.16: + resolution: {integrity: sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /turbo-linux-64@1.10.16: + resolution: {integrity: sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /turbo-linux-arm64@1.10.16: + resolution: {integrity: sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /turbo-windows-64@1.10.16: + resolution: {integrity: sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /turbo-windows-arm64@1.10.16: + resolution: {integrity: sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /turbo@1.10.16: + resolution: {integrity: sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==} + hasBin: true + optionalDependencies: + turbo-darwin-64: 1.10.16 + turbo-darwin-arm64: 1.10.16 + turbo-linux-64: 1.10.16 + turbo-linux-arm64: 1.10.16 + turbo-windows-64: 1.10.16 + turbo-windows-arm64: 1.10.16 + dev: false + /tv4@1.3.0: resolution: {integrity: sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==} engines: {node: '>= 0.8.0'} @@ -16829,7 +17630,6 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 - dev: true /type-detect@0.1.1: resolution: {integrity: sha512-5rqszGVwYgBoDkIm2oUtvkfZMQ0vk29iDMU0W2qCa3rG0vPDNczCMT4hV/bLBgLg8k8ri6+u3Zbt+S/14eMzlA==} @@ -16848,12 +17648,15 @@ packages: /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - dev: true /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -16865,15 +17668,15 @@ packages: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -16883,7 +17686,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 @@ -16891,7 +17694,7 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 @@ -16907,7 +17710,6 @@ packages: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} hasBin: true - dev: true /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} @@ -16927,7 +17729,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -16935,12 +17737,15 @@ packages: /underscore.string@3.3.6: resolution: {integrity: sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==} dependencies: - sprintf-js: 1.1.2 + sprintf-js: 1.1.3 util-deprecate: 1.0.2 /underscore@1.13.6: resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + /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'} @@ -16994,7 +17799,6 @@ packages: /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - requiresBuild: true dev: true /universalify@2.0.0: @@ -17012,20 +17816,9 @@ packages: has-value: 0.3.1 isobject: 3.0.1 - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.21.10): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.10 - escalade: 3.1.1 - picocolors: 1.0.0 + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} /update-browserslist-db@1.0.13(browserslist@4.22.1): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} @@ -17055,7 +17848,6 @@ packages: /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - requiresBuild: true dependencies: querystringify: 2.2.0 requires-port: 1.0.0 @@ -17091,8 +17883,8 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true /validate-npm-package-name@5.0.0: @@ -17101,13 +17893,6 @@ packages: dependencies: builtins: 5.0.1 - /validate-peer-dependencies@1.2.0: - resolution: {integrity: sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA==} - dependencies: - resolve-package-path: 3.1.0 - semver: 7.5.4 - dev: true - /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -17208,6 +17993,13 @@ packages: transitivePeerDependencies: - supports-color + /watcher@2.3.0: + resolution: {integrity: sha512-6hVpT1OhmYTZhsgUND2o2gTL79TosB1rH8DWzDO7KBlyR9Yuxg/LXUGeHJqjjvwpnyHT7uUdDwWczprJuqae9Q==} + dependencies: + dettle: 1.0.1 + stubborn-fs: 1.2.5 + tiny-readdir: 2.2.0 + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -17253,8 +18045,8 @@ packages: webpack-cli: optional: true dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.1 + '@types/eslint-scope': 3.7.6 + '@types/estree': 1.0.3 '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/wasm-edit': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 @@ -17263,7 +18055,7 @@ packages: browserslist: 4.22.1 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.0 + es-module-lexer: 1.3.1 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -17307,8 +18099,8 @@ packages: iconv-lite: 0.6.3 dev: true - /whatwg-fetch@3.6.18: - resolution: {integrity: sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q==} + /whatwg-fetch@3.6.19: + resolution: {integrity: sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==} dev: true /whatwg-mimetype@2.3.0: @@ -17361,12 +18153,12 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 @@ -17384,11 +18176,24 @@ packages: dependencies: isexe: 2.0.0 + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 2.0.0 + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 4.2.3 + /widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.3 + /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -17396,8 +18201,8 @@ packages: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true - /workerpool@6.4.2: - resolution: {integrity: sha512-MrDWwemtC4xNV22kbbZDQQQmxNX+yLm790sgYl2wVD3CWnK7LJY1youI/11wHorAjHjK+GEjUxUh74XoPU71uQ==} + /workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -17414,7 +18219,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} @@ -17436,6 +18240,20 @@ packages: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + /write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + /write-yaml-file@5.0.0: + resolution: {integrity: sha512-FdNA4RyH1L43TlvGG8qOMIfcEczwA5ij+zLXUy3Z83CjxhLvcV7/Q/8pk22wnCgYw7PJhtK+7lhO+qqyT4NdvQ==} + engines: {node: '>=16.14'} + dependencies: + js-yaml: 4.1.0 + write-file-atomic: 5.0.1 + /ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} @@ -17472,8 +18290,8 @@ packages: utf-8-validate: optional: true - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -17510,7 +18328,6 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -17540,7 +18357,6 @@ packages: /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - dev: true /yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} @@ -17576,7 +18392,6 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -17615,7 +18430,32 @@ packages: engines: {node: '>=0.2.0'} dev: true - file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(ember-source@5.3.0): + file:config: + resolution: {directory: config, type: directory} + name: '@warp-drive/internal-config' + engines: {node: '>= 18.18.2'} + dependencies: + '@babel/core': 7.23.2(supports-color@8.1.1) + '@babel/eslint-parser': 7.22.15(@babel/core@7.23.2)(eslint@8.52.0) + '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2) + '@typescript-eslint/eslint-plugin': 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 + eslint-config-prettier: 9.0.0(eslint@8.52.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.52.0) + eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3) + eslint-plugin-simple-import-sort: 10.0.0(eslint@8.52.0) + pnpm-sync-dependencies-meta-injected: 0.0.10 + prettier: 3.0.3 + typescript: 5.2.2 + transitivePeerDependencies: + - '@types/eslint' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + file:packages/-ember-data(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-source@5.3.0): resolution: {directory: packages/-ember-data, type: directory} id: file:packages/-ember-data name: ember-data @@ -17623,30 +18463,31 @@ packages: peerDependencies: '@ember/string': 3.1.1 dependencies: - '@ember-data/adapter': file:packages/adapter(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) + '@ember-data/adapter': file:packages/adapter(@babel/core@7.23.2)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2) '@ember-data/debug': file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) - '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@packages+core) - '@ember-data/model': file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@packages+core)(ember-inflector@4.0.2) + '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/model': file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/request': file:packages/request(@babel/core@7.23.2) - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2) - '@ember-data/serializer': file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-inflector@4.0.2) - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/request': file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/serializer': file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember/edition-utils': 1.2.0 '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': link:packages/core + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) broccoli-merge-trees: 4.2.0 ember-auto-import: 2.6.3(webpack@5.89.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-inflector: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 + typescript: 5.2.2 webpack: 5.89.0 transitivePeerDependencies: - '@babel/core' - - '@glimmer/tracking' - '@glint/template' - '@swc/core' - ember-source @@ -17655,57 +18496,64 @@ packages: - uglify-js - webpack-cli - file:packages/active-record(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2): + file:packages/active-record(@babel/core@7.23.2)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2): resolution: {directory: packages/active-record, type: directory} id: file:packages/active-record name: '@ember-data/active-record' engines: {node: '>= 18.18.2'} peerDependencies: + '@ember-data/request-utils': workspace:5.5.0-alpha.11 '@ember-data/store': ^4.12.0 || ^5.0.0 '@ember/string': 3.1.1 - '@warp-drive/core': workspace:5.5.0-alpha.11 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 ember-inflector: ^4.0.2 dependencies: - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/string': 3.1.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-inflector: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - supports-color dev: true - file:packages/adapter(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2): + file:packages/adapter(@babel/core@7.23.2)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2): resolution: {directory: packages/adapter, type: directory} id: file:packages/adapter name: '@ember-data/adapter' engines: {node: '>= 18.18.2'} peerDependencies: + '@ember-data/legacy-compat': workspace:5.5.0-alpha.11 '@ember-data/store': workspace:5.5.0-alpha.11 '@ember/string': 3.1.1 ember-inflector: ^4.0.2 dependencies: + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-test-info: 1.0.0 ember-inflector: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/core(@babel/core@7.23.2): - resolution: {directory: packages/core, type: directory} - id: file:packages/core - name: '@warp-drive/core' + file:packages/core-types(@babel/core@7.23.2): + resolution: {directory: packages/core-types, type: directory} + id: file:packages/core-types + name: '@warp-drive/core-types' engines: {node: '>= 18.18.2'} dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' @@ -17722,12 +18570,13 @@ packages: dependencies: '@babel/core': 7.23.2(supports-color@8.1.1) '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/edition-utils': 1.2.0 '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) ember-auto-import: 2.6.3(webpack@5.89.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 webpack: 5.89.0 transitivePeerDependencies: - '@glint/template' @@ -17759,93 +18608,56 @@ packages: chalk: 5.3.0 debug: 4.3.4(supports-color@8.1.1) ember-cli-test-loader: 3.1.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 tmp: 0.2.1 transitivePeerDependencies: - supports-color - file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11): - resolution: {directory: packages/graph, type: directory} - id: file:packages/graph - name: '@ember-data/graph' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/store': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 - dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core): + file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11): resolution: {directory: packages/graph, type: directory} id: file:packages/graph name: '@ember-data/graph' engines: {node: '>= 18.18.2'} peerDependencies: '@ember-data/store': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': link:packages/core - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/holodeck: + file:packages/holodeck(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11): resolution: {directory: packages/holodeck, type: directory} + id: file:packages/holodeck name: '@warp-drive/holodeck' engines: {node: '>= 18.18.2'} hasBin: true + peerDependencies: + '@ember-data/request': workspace:5.5.0-alpha.11 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 dependencies: + '@ember-data/request': file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@hono/node-server': 1.2.0 + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) chalk: 4.1.2 - hono: 3.8.1 + hono: 3.8.2 pm2: 5.3.0 + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2): - resolution: {directory: packages/json-api, type: directory} - id: file:packages/json-api - name: '@ember-data/json-api' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/graph': workspace:5.5.0-alpha.11 - '@ember-data/request-utils': workspace:5.5.0-alpha.11 - '@ember-data/store': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 - ember-inflector: ^4.0.2 - dependencies: - '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2) - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - ember-inflector: 4.0.2(@babel/core@7.23.2) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core)(ember-inflector@4.0.2): + file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2): resolution: {directory: packages/json-api, type: directory} id: file:packages/json-api name: '@ember-data/json-api' @@ -17854,24 +18666,28 @@ packages: '@ember-data/graph': workspace:5.5.0-alpha.11 '@ember-data/request-utils': workspace:5.5.0-alpha.11 '@ember-data/store': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 ember-inflector: ^4.0.2 + peerDependenciesMeta: + '@ember-data/request-utils': + optional: true dependencies: - '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core) + '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2) - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': link:packages/core - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-inflector: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2): + file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@packages+request-utils)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2): resolution: {directory: packages/json-api, type: directory} id: file:packages/json-api name: '@ember-data/json-api' @@ -17880,81 +18696,29 @@ packages: '@ember-data/graph': workspace:5.5.0-alpha.11 '@ember-data/request-utils': workspace:5.5.0-alpha.11 '@ember-data/store': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 ember-inflector: ^4.0.2 + peerDependenciesMeta: + '@ember-data/request-utils': + optional: true dependencies: - '@ember-data/graph': link:packages/graph + '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2) - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/request-utils': link:packages/request-utils + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-inflector: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color dev: true - file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11): - resolution: {directory: packages/legacy-compat, type: directory} - id: file:packages/legacy-compat - name: '@ember-data/legacy-compat' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/graph': workspace:5.5.0-alpha.11 - '@ember-data/json-api': workspace:5.5.0-alpha.11 - '@ember-data/request': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 - peerDependenciesMeta: - '@ember-data/graph': - optional: true - '@ember-data/json-api': - optional: true - dependencies: - '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/request': file:packages/request(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@packages+core): - resolution: {directory: packages/legacy-compat, type: directory} - id: file:packages/legacy-compat - name: '@ember-data/legacy-compat' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/graph': workspace:5.5.0-alpha.11 - '@ember-data/json-api': workspace:5.5.0-alpha.11 - '@ember-data/request': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 - peerDependenciesMeta: - '@ember-data/graph': - optional: true - '@ember-data/json-api': - optional: true - dependencies: - '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/request': file:packages/request(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': link:packages/core - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11): + file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11): resolution: {directory: packages/legacy-compat, type: directory} id: file:packages/legacy-compat name: '@ember-data/legacy-compat' @@ -17963,71 +18727,29 @@ packages: '@ember-data/graph': workspace:5.5.0-alpha.11 '@ember-data/json-api': workspace:5.5.0-alpha.11 '@ember-data/request': workspace:5.5.0-alpha.11 - '@warp-drive/core': workspace:5.5.0-alpha.11 - peerDependenciesMeta: - '@ember-data/graph': - optional: true - '@ember-data/json-api': - optional: true - dependencies: - '@ember-data/graph': link:packages/graph - '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/request': file:packages/request(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - dev: true - - file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2): - resolution: {directory: packages/model, type: directory} - id: file:packages/model - name: '@ember-data/model' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/debug': workspace:5.5.0-alpha.11 - '@ember-data/graph': workspace:5.5.0-alpha.11 - '@ember-data/json-api': workspace:5.5.0-alpha.11 - '@ember-data/legacy-compat': workspace:5.5.0-alpha.11 '@ember-data/store': workspace:5.5.0-alpha.11 - '@ember-data/tracking': workspace:5.5.0-alpha.11 - '@ember/string': 3.1.1 - '@warp-drive/core': workspace:5.5.0-alpha.11 - ember-inflector: ^4.0.2 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 peerDependenciesMeta: - '@ember-data/debug': - optional: true '@ember-data/graph': optional: true '@ember-data/json-api': optional: true dependencies: - '@ember-data/debug': file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) - '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) + '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) - '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2(@babel/core@7.23.2) - inflection: 3.0.0 + '@ember-data/request': file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@packages+core)(ember-inflector@4.0.2): + file:packages/model(@babel/core@7.23.2)(@ember-data/debug@5.5.0-alpha.11)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2): resolution: {directory: packages/model, type: directory} id: file:packages/model name: '@ember-data/model' @@ -18040,7 +18762,7 @@ packages: '@ember-data/store': workspace:5.5.0-alpha.11 '@ember-data/tracking': workspace:5.5.0-alpha.11 '@ember/string': 3.1.1 - '@warp-drive/core': workspace:5.5.0-alpha.11 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 ember-inflector: ^4.0.2 peerDependenciesMeta: '@ember-data/debug': @@ -18051,111 +18773,26 @@ packages: optional: true dependencies: '@ember-data/debug': file:packages/debug(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1) - '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@packages+core)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@packages+core) - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) - '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': link:packages/core - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2(@babel/core@7.23.2) - inflection: 3.0.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - file:packages/model(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/legacy-compat@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2): - resolution: {directory: packages/model, type: directory} - id: file:packages/model - name: '@ember-data/model' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/debug': workspace:5.5.0-alpha.11 - '@ember-data/graph': workspace:5.5.0-alpha.11 - '@ember-data/json-api': workspace:5.5.0-alpha.11 - '@ember-data/legacy-compat': workspace:5.5.0-alpha.11 - '@ember-data/store': workspace:5.5.0-alpha.11 - '@ember-data/tracking': workspace:5.5.0-alpha.11 - '@ember/string': 3.1.1 - '@warp-drive/core': workspace:5.5.0-alpha.11 - ember-inflector: ^4.0.2 - peerDependenciesMeta: - '@ember-data/debug': - optional: true - '@ember-data/graph': - optional: true - '@ember-data/json-api': - optional: true - dependencies: - '@ember-data/graph': link:packages/graph - '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@packages+graph)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@warp-drive/core@5.5.0-alpha.11) - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) - '@ember-data/tracking': link:packages/tracking - '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2(@babel/core@7.23.2) - inflection: 3.0.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - dev: true - - file:packages/model(@babel/core@7.23.2)(@ember-data/legacy-compat@packages+legacy-compat)(@ember-data/store@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core@5.5.0-alpha.11)(ember-inflector@4.0.2): - resolution: {directory: packages/model, type: directory} - id: file:packages/model - name: '@ember-data/model' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/debug': workspace:5.5.0-alpha.11 - '@ember-data/graph': workspace:5.5.0-alpha.11 - '@ember-data/json-api': workspace:5.5.0-alpha.11 - '@ember-data/legacy-compat': workspace:5.5.0-alpha.11 - '@ember-data/store': workspace:5.5.0-alpha.11 - '@ember-data/tracking': workspace:5.5.0-alpha.11 - '@ember/string': 3.1.1 - '@warp-drive/core': workspace:5.5.0-alpha.11 - ember-inflector: ^4.0.2 - peerDependenciesMeta: - '@ember-data/debug': - optional: true - '@ember-data/graph': - optional: true - '@ember-data/json-api': - optional: true - dependencies: - '@ember-data/legacy-compat': link:packages/legacy-compat + '@ember-data/graph': file:packages/graph(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.23.2)(@ember-data/graph@5.5.0-alpha.11)(@ember-data/json-api@5.5.0-alpha.11)(@ember-data/request@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember/edition-utils': 1.2.0 '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@warp-drive/core': file:packages/core(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-string-utils: 1.1.0 ember-cli-test-info: 1.0.0 ember-inflector: 4.0.2(@babel/core@7.23.2) inflection: 3.0.0 + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - dev: true file:packages/private-build-infra: resolution: {directory: packages/private-build-infra, type: directory} @@ -18166,7 +18803,7 @@ packages: '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) '@babel/runtime': 7.23.2 '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) babel-import-util: 2.0.1 babel-plugin-debug-macros: 0.3.4(@babel/core@7.23.2) babel-plugin-filter-imports: 4.0.0 @@ -18176,58 +18813,72 @@ packages: broccoli-merge-trees: 4.2.0 calculate-cache-key-for-tree: 2.0.0 chalk: 4.1.2 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-path-utils: 1.0.0 ember-cli-string-utils: 1.1.0 ember-cli-version-checker: 5.1.2 git-repo-info: 2.1.1 npm-git-info: 1.0.3 + pnpm-sync-dependencies-meta-injected: 0.0.10 semver: 7.5.4 silent-error: 1.1.1 transitivePeerDependencies: - '@glint/template' - supports-color - file:packages/request(@babel/core@7.23.2): + file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11): resolution: {directory: packages/request, type: directory} id: file:packages/request name: '@ember-data/request' engines: {node: '>= 18.18.2'} + peerDependencies: + '@warp-drive/core-types': workspace:5.5.0-alpha.11 dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra '@ember/test-waiters': 3.0.2(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/request-utils(@babel/core@7.23.2): + file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11): resolution: {directory: packages/request-utils, type: directory} id: file:packages/request-utils name: '@ember-data/request-utils' engines: {node: '>= 18.18.2'} + peerDependencies: + '@warp-drive/core-types': workspace:5.5.0-alpha.11 dependencies: - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - supports-color - file:packages/rest(@babel/core@7.23.2)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(ember-inflector@4.0.2): + file:packages/rest(@babel/core@7.23.2)(@ember-data/request-utils@5.5.0-alpha.11)(@ember-data/store@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2): resolution: {directory: packages/rest, type: directory} id: file:packages/rest name: '@ember-data/rest' engines: {node: '>= 18.18.2'} peerDependencies: + '@ember-data/request-utils': workspace:5.5.0-alpha.11 '@ember-data/store': ^4.12.0 || ^5.0.0 '@ember/string': 3.1.1 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 ember-inflector: ^4.0.2 dependencies: - '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) + '@ember-data/store': file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11) '@ember/string': 3.1.1(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-inflector: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - supports-color @@ -18241,76 +18892,61 @@ packages: dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color dev: true - file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(ember-inflector@4.0.2): + file:packages/serializer(@babel/core@7.23.2)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11)(ember-inflector@4.0.2): resolution: {directory: packages/serializer, type: directory} id: file:packages/serializer name: '@ember-data/serializer' engines: {node: '>= 18.18.2'} peerDependencies: '@ember/string': 3.1.1 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 ember-inflector: ^4.0.2 dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) ember-cli-test-info: 1.0.0 ember-inflector: 4.0.2(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2): + file:packages/store(@babel/core@7.23.2)(@ember-data/request@5.5.0-alpha.11)(@ember-data/tracking@5.5.0-alpha.11)(@ember/string@3.1.1)(@warp-drive/core-types@5.5.0-alpha.11): resolution: {directory: packages/store, type: directory} id: file:packages/store name: '@ember-data/store' engines: {node: '>= 18.18.2'} peerDependencies: + '@ember-data/request': workspace:5.5.0-alpha.11 '@ember-data/tracking': workspace:5.5.0-alpha.11 '@ember/string': 3.1.1 - '@glimmer/tracking': ^1.1.2 + '@warp-drive/core-types': workspace:5.5.0-alpha.11 dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra + '@ember-data/request': file:packages/request(@babel/core@7.23.2)(@warp-drive/core-types@5.5.0-alpha.11) '@ember-data/tracking': file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0) '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@glimmer/tracking': 1.1.2 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - file:packages/store(@babel/core@7.23.2)(@ember-data/tracking@packages+tracking)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2): - resolution: {directory: packages/store, type: directory} - id: file:packages/store - name: '@ember-data/store' - engines: {node: '>= 18.18.2'} - peerDependencies: - '@ember-data/tracking': workspace:5.5.0-alpha.11 - '@ember/string': 3.1.1 - '@glimmer/tracking': ^1.1.2 - dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra - '@ember-data/tracking': link:packages/tracking - '@ember/string': 3.1.1(@babel/core@7.23.2) - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@glimmer/tracking': 1.1.2 - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - dev: true file:packages/tracking(@babel/core@7.23.2)(ember-source@5.3.0): resolution: {directory: packages/tracking, type: directory} @@ -18319,17 +18955,17 @@ packages: engines: {node: '>= 18.18.2'} dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra - '@embroider/macros': 1.13.1(@babel/core@7.23.2) - '@glimmer/validator': 0.84.3 + '@embroider/macros': 1.13.2(@babel/core@7.23.2) ember-cached-decorator-polyfill: 1.0.2(@babel/core@7.23.2)(ember-source@5.3.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 transitivePeerDependencies: - '@babel/core' - '@glint/template' - ember-source - supports-color - file:packages/unpublished-test-infra(@babel/core@7.23.2)(qunit@2.19.4): + file:packages/unpublished-test-infra(@babel/core@7.23.2)(ember-cli@5.3.0)(ember-source@5.3.0)(qunit@2.19.4): resolution: {directory: packages/unpublished-test-infra, type: directory} id: file:packages/unpublished-test-infra name: '@ember-data/unpublished-test-infra' @@ -18342,16 +18978,18 @@ packages: dependencies: '@ember-data/private-build-infra': file:packages/private-build-infra '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.1(@babel/core@7.23.2) + '@ember/test-helpers': 3.2.0(@babel/core@7.23.2)(ember-source@5.3.0)(webpack@5.89.0) + '@embroider/macros': 1.13.2(@babel/core@7.23.2) broccoli-merge-trees: 4.2.0 chalk: 4.1.2 ember-auto-import: 2.6.3(webpack@5.89.0) - ember-cli-babel: 8.1.0(@babel/core@7.23.2) - ember-cli-blueprint-test-helpers: 0.19.2 + ember-cli-babel: 8.2.0(@babel/core@7.23.2) + ember-cli-blueprint-test-helpers: 0.19.2(ember-cli@5.3.0) ember-get-config: 2.1.1(@babel/core@7.23.2) + pnpm-sync-dependencies-meta-injected: 0.0.10 qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) semver: 7.5.4 - testem: 3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm)(debug@4.3.4) + testem: 3.10.1(patch_hash=ne26ybtmre3r2x3hatfhkop2dm) webpack: 5.89.0 transitivePeerDependencies: - '@babel/core' @@ -18371,6 +19009,8 @@ packages: - eco - ect - ejs + - ember-cli + - ember-source - esbuild - haml-coffee - hamlet diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e6f5f1562d6..c0e7cb151af 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - 'packages/*' - 'tests/*' + - 'config' diff --git a/scripts/copy-declarations.mjs b/scripts/copy-declarations.mjs new file mode 100644 index 00000000000..4f773e35fc1 --- /dev/null +++ b/scripts/copy-declarations.mjs @@ -0,0 +1,74 @@ +import chalk from 'chalk'; +import path from 'path'; +import { globby } from 'globby'; +import fs from 'fs'; + +/** @type {import('bun-types')} */ + +/** + * A small script to copy all `.d.ts` files from a `src` directory + * to a `dest` directory. + * + * This is useful because TypeScript doesn't include `.d.ts` files + * in the output directory when using `tsc` to compile. So any manually + * written `.d.ts` files wouldn't get copied into the published types + * directory. + * + * Input directory defaults to `src`. + * Output directory defaults to `unstable-preview-types`. + * + * Paths are relative to the current working directory from which + * the script is run. + * + * @example + * ```sh + * bun ../../scripts/copy-declarations.mjs addon dist-types + * ``` + */ +async function main() { + const args = Bun.argv.slice(2); + + if (args.length === 0) { + args.push('src', 'unstable-preview-types'); + } else if (args.length === 1) { + args.push('unstable-preview-types'); + } + + const [inputDir, outputDir] = args; + const inputPath = path.resolve(process.cwd(), inputDir); + const outputPath = path.resolve(process.cwd(), outputDir); + const relativeInputPath = path.relative(process.cwd(), inputPath); + const relativeOutputPath = path.relative(process.cwd(), outputPath); + + console.log(chalk.grey(chalk.bold(`\nCopying ${chalk.cyan('**/*.d.ts')} files\n\tfrom: ${chalk.yellow(relativeInputPath)}\n\tto: ${chalk.yellow(relativeOutputPath)}`))); + + const files = await globby([`${inputPath}/**/*.d.ts`]); + + if (files.length === 0) { + console.log(chalk.red(`\nNo **/*.d.ts files found in ${chalk.white(relativeInputPath)}\n`)); + process.exitCode = 1; + } + + console.log(chalk.grey(`\nFound ${chalk.cyan(files.length)} files\n`)); + + for (const file of files) { + const relativeFile = path.relative(process.cwd(), file); + const innerPath = path.relative(inputPath, file); + const outputFile = path.resolve(outputPath, innerPath); + const relativeOutFile = path.relative(process.cwd(), outputFile); + + console.log(chalk.grey(`\t${chalk.cyan(relativeFile)} => ${chalk.green(relativeOutFile)}`)); + + // ensure the output directory exists + const outDir = path.dirname(outputFile); + fs.mkdirSync(outDir, { recursive: true }); + + const inFile = Bun.file(file); + const outFile = Bun.file(outputFile); + await Bun.write(outFile, inFile); + } + + console.log(chalk.grey(chalk.bold(`\n✅ Copied ${chalk.cyan(files.length)} files\n`))); +} + +await main(); diff --git a/scripts/explain.mjs b/scripts/explain.mjs new file mode 100644 index 00000000000..a939b14ad06 --- /dev/null +++ b/scripts/explain.mjs @@ -0,0 +1,55 @@ +import chalk from 'chalk'; + +/** @type {import('bun-types')} */ + +const MarkerLines = new Set([ + 'devDependencies:', + 'dependencies:', + 'peerDependencies:', +]); +const GraphMarkers = new Set([ + '├', + '│', + '└', + '─', + '┬', +]); + +async function main() { + const args = Bun.argv.slice(2); + const pkgName = args[0]; + + console.log(chalk.grey(chalk.bold(`Explaining ${chalk.yellow(pkgName)} in ${chalk.yellow(process.cwd())}`))); + + const output = Bun.spawnSync(['pnpm', 'why', pkgName], { + cwd: process.cwd(), + env: process.env, + shell: true + }); + + const versions = {}; + let currentSection = null; + + const logLines = output.stdout.toString().split('\n').filter(Boolean); + + for (const line of logLines) { + if (MarkerLines.has(line)) { + currentSection = line; + continue; + } + + if (currentSection) { + const sections = line.split(' '); + while (GraphMarkers.has(sections[0].charAt(0))) { + sections.shift(); + } + const [pkg, version, kind] = sections; + versions[pkg] = versions[pkg] ?? new Set(); + versions[pkg].add(version); + } + } + + console.log(versions); +} + +await main(); diff --git a/scripts/publish.js b/scripts/publish.js index bad664fb507..23101bf3ab6 100644 --- a/scripts/publish.js +++ b/scripts/publish.js @@ -398,7 +398,7 @@ async function main() { assertGitIsClean(options); if (!options.skipSmokeTest) { - execWithLog(`pnpm run lint:js && pnpm run test`, debug.enabled); + execWithLog(`pnpm run lint && pnpm run test`, debug.enabled); console.log(`✅ ` + chalk.cyan(`Project passes Smoke Test`)); } else { console.log(`⚠️ ` + chalk.grey(`Skipping Smoke Test`)); diff --git a/scripts/validate-deps.js b/scripts/validate-deps.js new file mode 100644 index 00000000000..925b9540e34 --- /dev/null +++ b/scripts/validate-deps.js @@ -0,0 +1,232 @@ +const fs = require('fs'); +const path = require('path'); +const root = process.cwd(); + +const pkgs = new Map(); +const otherPkgs = new Set([ + 'ember-inflector', + '@ember/string' +]); +const files = new Map(); +const currentVersion = require(path.join(root, 'package.json')).version; +const peer_exceptions = { + '@ember-data/active-record': { + '@ember-data/store': true + }, + '@ember-data/rest': { + '@ember-data/store': true + }, +} + +function isPeerException(pkg, dep) { + return Boolean(peer_exceptions[pkg] && peer_exceptions[pkg][dep]); +} + +function getRequiredPeers(dep, version = '*', seen = new Map()) { + const pkg = pkgs.get(dep); + if (!pkg) { + if (otherPkgs.has(dep)) { + seen.set(dep, version); + } + + // TODO - handle otherPkgs that aren't these + return seen; + } + seen.set(dep, version); + + if (pkg.peerDependencies) { + Object.entries(pkg.peerDependencies).forEach(([peer, version]) => { + getRequiredPeers(peer, version, seen); + }); + } + + return seen; +} + +fs.readdirSync(path.join(root, 'packages')).forEach((dirName) => { + const pkg = require(path.join(root, 'packages', dirName, 'package.json')); + pkgs.set(pkg.name, pkg); + files.set(pkg.name, { + path: path.join(root, 'packages', dirName, 'package.json'), + pkg + }); +}); + +fs.readdirSync(path.join(root, 'tests')).forEach((dirName) => { + const pkg = require(path.join(root, 'tests', dirName, 'package.json')); + pkgs.set(pkg.name, pkg); + files.set(pkg.name, { + path: path.join(root, 'tests', dirName, 'package.json'), + pkg + }); +}); + +pkgs.forEach((pkg) => { + let edited = false; + if (pkg.version !== currentVersion) { + throw new Error(`Version mismatch for ${pkg.name} - expected ${currentVersion} but found ${pkg.version}`); + } + + if (!pkg.scripts) { + console.log(`Missing scripts for ${pkg.name}`); + edited = true; + pkg.scripts = {}; + } + if (!pkg.scripts['_syncPnpm']) { + console.log(`Missing _syncPnpm script for ${pkg.name}`); + edited = true; + pkg.scripts['_syncPnpm'] = "pnpm sync-dependencies-meta-injected"; + } + if (pkg.scripts['prepare']) { + console.log(`Removing prepare script for ${pkg.name}`); + edited = true; + delete pkg.scripts['prepare']; + } + + Object.entries(pkg.dependencies ?? {}).forEach(([dep, version]) => { + if (pkgs.has(dep)) { + const depVersion = pkgs.get(dep).version; + const wsVersion = `workspace:${depVersion}`; + + if (version !== wsVersion) { + console.log(`Dependency mismatch for ${pkg.name} -> ${dep} - expected ${wsVersion} but found ${version}`); + edited = true; + pkg.dependencies[dep] = wsVersion; + } + } + + if (pkgs.has(dep) || otherPkgs.has(dep)) { + if (!pkg.dependenciesMeta) { + console.log(`Missing dependenciesMeta for ${pkg.name}`); + edited = true; + pkg.dependenciesMeta = {}; + } + if (!pkg.dependenciesMeta[dep]) { + console.log(`Missing dependenciesMeta for ${pkg.name} -> ${dep}`); + edited = true; + pkg.dependenciesMeta[dep] = {}; + } + if (!pkg.dependenciesMeta[dep].injected) { + console.log(`Missing injected: true in dependenciesMeta for ${pkg.name} -> ${dep}`); + edited = true; + pkg.dependenciesMeta[dep].injected = true; + } + } + }); + + Object.entries(pkg.peerDependencies ?? {}).forEach(([dep, version]) => { + if (pkgs.has(dep)) { + const depVersion = pkgs.get(dep).version; + const wsVersion = `workspace:${depVersion}`; + + if (version !== wsVersion && !isPeerException(pkg.name, dep)) { + console.log(`Peer Dependency mismatch for ${pkg.name} -> ${dep} - expected ${wsVersion} but found ${version}`); + edited = true; + pkg.peerDependencies[dep] = wsVersion; + } + + const requiredPeers = getRequiredPeers(dep); + requiredPeers.delete(dep); + requiredPeers.forEach((version, peer) => { + if (!pkg.devDependencies || !pkg.devDependencies[peer]) { + console.log(`\tMissing transient peer dependency ${peer}@${version} for ${pkg.name} -> ${dep}`); + edited = true; + if (!pkg.devDependencies) { + pkg.devDependencies = {}; + } + pkg.devDependencies[peer] = pkgs.has(peer) ? `workspace:${pkgs.get(peer).version}` : version; + } + }); + } + + if (pkgs.has(dep) || otherPkgs.has(dep)) { + if (!pkg.devDependencies) { + console.log(`Missing devDependencies for ${pkg.name}`); + edited = true; + pkg.devDependencies = {}; + } + if (!pkg.devDependencies[dep]) { + console.log(`Missing devDependencies for ${pkg.name} -> ${dep}`); + edited = true; + pkg.devDependencies[dep] = otherPkgs.has(dep) ? version : `workspace:${pkgs.get(dep).version}`; + } + if (!pkg.dependenciesMeta) { + console.log(`Missing (dev) dependenciesMeta for ${pkg.name}`); + edited = true; + pkg.dependenciesMeta = {}; + } + if (!pkg.dependenciesMeta[dep]) { + console.log(`Missing (dev) dependenciesMeta for ${pkg.name} -> ${dep}`); + edited = true; + pkg.dependenciesMeta[dep] = {}; + } + if (!pkg.dependenciesMeta[dep].injected) { + console.log(`Missing injected: true in (dev) dependenciesMeta for ${pkg.name} -> ${dep}`); + edited = true; + pkg.dependenciesMeta[dep].injected = true; + } + } + }); + + const deps = Object.entries(pkg.devDependencies ?? {}); + + for (let i = 0; i < deps.length; i++) { + const [dep, version] = deps[i]; + + if (pkgs.has(dep)) { + const depVersion = pkgs.get(dep).version; + const wsVersion = `workspace:${depVersion}`; + + if (version !== wsVersion && !isPeerException(pkg.name, dep)) { + console.log(`Dev Dependency mismatch for ${pkg.name} -> ${dep} - expected ${wsVersion} but found ${version}`); + edited = true; + pkg.devDependencies[dep] = wsVersion; + } + + const requiredPeers = getRequiredPeers(dep); + requiredPeers.delete(dep); + requiredPeers.forEach((version, peer) => { + if (!pkg.devDependencies[peer]) { + console.log(`\tMissing transient peer dependency ${peer}@${version} for ${pkg.name} -> ${dep}`); + edited = true; + if (!pkg.devDependencies) { + pkg.devDependencies = {}; + } + pkg.devDependencies[peer] = pkgs.has(peer) ? `workspace:${pkgs.get(peer).version}` : version; + deps.push([peer, version]); + } + }); + } + + if (pkgs.has(dep) || otherPkgs.has(dep)) { + if (!pkg.dependenciesMeta) { + console.log(`Missing (dev) dependenciesMeta for ${pkg.name}`); + edited = true; + pkg.dependenciesMeta = {}; + } + if (!pkg.dependenciesMeta[dep]) { + console.log(`Missing (dev) dependenciesMeta for ${pkg.name} -> ${dep}`); + edited = true; + pkg.dependenciesMeta[dep] = {}; + } + if (!pkg.dependenciesMeta[dep].injected) { + console.log(`Missing injected: true in (dev) dependenciesMeta for ${pkg.name} -> ${dep}`); + edited = true; + pkg.dependenciesMeta[dep].injected = true; + } + } + + } + + if (pkg.devDependenciesMeta) { + console.log(`Merging devDependenciesMeta into dependenciesMeta for ${pkg.name}`); + edited = true; + pkg.dependenciesMeta = pkg.dependenciesMeta ?? {}; + Object.assign(pkg.dependenciesMeta, pkg.devDependenciesMeta); + delete pkg.devDependenciesMeta; + } + + if (edited) { + fs.writeFileSync(files.get(pkg.name).path, JSON.stringify(pkg, null, 2) + '\n'); + } +}); diff --git a/tests/blueprints/package.json b/tests/blueprints/package.json index 29310cbdb27..83ae57d53ef 100644 --- a/tests/blueprints/package.json +++ b/tests/blueprints/package.json @@ -11,7 +11,8 @@ "license": "MIT", "author": "", "scripts": { - "test": "mocha tests" + "test:blueprints": "mocha tests", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/unpublished-test-infra": { @@ -35,24 +36,59 @@ "@ember-data/tracking": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember-data/legacy-compat": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/graph": { + "injected": true + }, + "@ember-data/json-api": { + "injected": true + }, + "@ember-data/request-utils": { + "injected": true + }, + "@ember-data/debug": { + "injected": true + }, + "ember-cli-blueprint-test-helpers": { + "injected": true + }, + "ember-cli": { "injected": true } }, "devDependencies": { "@babel/core": "^7.23.2", "@ember-data/adapter": "workspace:5.5.0-alpha.11", + "@ember-data/debug": "workspace:5.5.0-alpha.11", + "@ember-data/graph": "workspace:5.5.0-alpha.11", + "@ember-data/json-api": "workspace:5.5.0-alpha.11", "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", "@ember-data/model": "workspace:5.5.0-alpha.11", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/serializer": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/string": "3.1.1", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-cli": "~5.3.0", "ember-cli-blueprint-test-helpers": "^0.19.2", "ember-inflector": "^4.0.2", @@ -60,25 +96,14 @@ "mocha": "^10.2.0", "silent-error": "^1.1.1" }, - "pnpm": { - "peerDependencyRules": { - "ignoreMissing": [ - "@babel/core", - "@glimmer/*", - "ember-source", - "@ember/string", - "ember-inflector", - "@ember-data/store", - "@ember-data/tracking", - "webpack" - ] - } - }, "engines": { "node": ">= 18.18.2" }, "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/builders/app/services/store.ts b/tests/builders/app/services/store.ts index 6ba32c90c41..ece2c2b1ec7 100644 --- a/tests/builders/app/services/store.ts +++ b/tests/builders/app/services/store.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import JSONAPICache from '@ember-data/json-api'; import type Model from '@ember-data/model'; diff --git a/tests/builders/package.json b/tests/builders/package.json index e596025c6e0..a17b3dfa714 100644 --- a/tests/builders/package.json +++ b/tests/builders/package.json @@ -14,9 +14,11 @@ "test": "tests" }, "scripts": { - "build": "ember build --output-path=dist-test --suppress-sizes", - "test": "pnpm build && bun ./diagnostic.js", - "test:production": "pnpm build -e production; bun ./diagnostic.js" + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", + "build:production": "pnpm build:tests -e production", + "test": "bun ./diagnostic.js", + "test:production": "bun ./diagnostic.js", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/json-api": { @@ -52,7 +54,22 @@ "@warp-drive/diagnostic": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember-data/graph": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/debug": { "injected": true } }, @@ -60,10 +77,11 @@ "@babel/core": "^7.23.2", "@babel/runtime": "^7.23.2", "@ember-data/active-record": "workspace:5.5.0-alpha.11", + "@ember-data/debug": "workspace:5.5.0-alpha.11", "@ember-data/graph": "workspace:5.5.0-alpha.11", "@ember-data/json-api": "workspace:5.5.0-alpha.11", - "@ember-data/model": "workspace:5.5.0-alpha.11", "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", + "@ember-data/model": "workspace:5.5.0-alpha.11", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@ember-data/request": "workspace:5.5.0-alpha.11", "@ember-data/request-utils": "workspace:5.5.0-alpha.11", @@ -74,13 +92,13 @@ "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", - "@embroider/addon-shim": "^1.8.6", "@ember/test-helpers": "^3.2.0", + "@embroider/addon-shim": "^1.8.6", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", @@ -108,5 +126,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/builders/tests/integration/create-record-test.ts b/tests/builders/tests/integration/create-record-test.ts index 9630094dcb7..7ea9f20f797 100644 --- a/tests/builders/tests/integration/create-record-test.ts +++ b/tests/builders/tests/integration/create-record-test.ts @@ -1,4 +1,4 @@ -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -14,7 +14,7 @@ import DataStore, { CacheHandler, recordIdentifierFor } from '@ember-data/store' import type { Cache } from '@ember-data/store/-types/cache/cache'; import { SingleResourceDataDocument } from '@ember-data/store/-types/cache/document'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import { SingleResourceDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; import { JsonApiError } from '@ember-data/store/-types/q/record-data-json-api'; class TestStore extends DataStore { diff --git a/tests/builders/tests/integration/delete-record-test.ts b/tests/builders/tests/integration/delete-record-test.ts index 17c1f36d50d..19dc0021891 100644 --- a/tests/builders/tests/integration/delete-record-test.ts +++ b/tests/builders/tests/integration/delete-record-test.ts @@ -1,4 +1,4 @@ -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -14,7 +14,7 @@ import DataStore, { CacheHandler, recordIdentifierFor } from '@ember-data/store' import type { Cache } from '@ember-data/store/-types/cache/cache'; import { SingleResourceDataDocument } from '@ember-data/store/-types/cache/document'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import { SingleResourceDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; import { JsonApiError } from '@ember-data/store/-types/q/record-data-json-api'; class TestStore extends DataStore { diff --git a/tests/builders/tests/integration/update-record-test.ts b/tests/builders/tests/integration/update-record-test.ts index d67a86ff7d6..74b86c095dd 100644 --- a/tests/builders/tests/integration/update-record-test.ts +++ b/tests/builders/tests/integration/update-record-test.ts @@ -1,4 +1,4 @@ -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -14,7 +14,7 @@ import DataStore, { CacheHandler, recordIdentifierFor } from '@ember-data/store' import type { Cache } from '@ember-data/store/-types/cache/cache'; import { SingleResourceDataDocument } from '@ember-data/store/-types/cache/document'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import { SingleResourceDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; import { JsonApiError } from '@ember-data/store/-types/q/record-data-json-api'; class TestStore extends DataStore { diff --git a/tests/docs/package.json b/tests/docs/package.json index e3d65e696d9..074d7b0d7e0 100644 --- a/tests/docs/package.json +++ b/tests/docs/package.json @@ -11,7 +11,8 @@ "license": "MIT", "author": "", "scripts": { - "test": "qunit ./index.js" + "test:docs": "qunit ./index.js", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "devDependencies": { "qunit": "^2.20.0" @@ -22,5 +23,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/ember-data__adapter/app/services/store.ts b/tests/ember-data__adapter/app/services/store.ts index 70868cc438d..ac54f924f09 100644 --- a/tests/ember-data__adapter/app/services/store.ts +++ b/tests/ember-data__adapter/app/services/store.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import JSONAPICache from '@ember-data/json-api'; import { diff --git a/tests/ember-data__adapter/ember-cli-build.js b/tests/ember-data__adapter/ember-cli-build.js index 6b70efd19b7..f0116ce6cd9 100644 --- a/tests/ember-data__adapter/ember-cli-build.js +++ b/tests/ember-data__adapter/ember-cli-build.js @@ -7,7 +7,10 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); module.exports = function (defaults) { let app = new EmberApp(defaults, { tests: true, - // Add options here + 'ember-cli-babel': { + throwUnlessParallelizable: true, + enableTypeScriptTransform: true, + }, }); // Use `app.import` to add additional libraries to the generated diff --git a/tests/ember-data__adapter/package.json b/tests/ember-data__adapter/package.json index 5882a91b1f8..aae1dc48be8 100644 --- a/tests/ember-data__adapter/package.json +++ b/tests/ember-data__adapter/package.json @@ -15,9 +15,11 @@ "test": "tests" }, "scripts": { - "build": "ember build --output-path=dist-test --suppress-sizes", - "test": "pnpm build && bun ./diagnostic.js", - "test:production": "pnpm build -e production; bun ./diagnostic.js" + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", + "_build:production": "pnpm build:tests -e production", + "test": "bun ./diagnostic.js", + "_test:production": "bun ./diagnostic.js", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/debug": { @@ -56,7 +58,13 @@ "@warp-drive/diagnostic": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { "injected": true } }, @@ -74,8 +82,6 @@ "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.2.0", @@ -83,6 +89,8 @@ "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", @@ -96,6 +104,7 @@ "ember-resolver": "^11.0.1", "ember-source": "~5.3.0", "loader.js": "^4.7.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "webpack": "^5.89.0" }, "engines": { @@ -108,4 +117,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/tests/ember-data__graph/app/services/store.ts b/tests/ember-data__graph/app/services/store.ts index 70868cc438d..ac54f924f09 100644 --- a/tests/ember-data__graph/app/services/store.ts +++ b/tests/ember-data__graph/app/services/store.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import JSONAPICache from '@ember-data/json-api'; import { diff --git a/tests/ember-data__graph/package.json b/tests/ember-data__graph/package.json index af7219c0d94..8ca7adfc2f3 100644 --- a/tests/ember-data__graph/package.json +++ b/tests/ember-data__graph/package.json @@ -15,9 +15,11 @@ "test": "tests" }, "scripts": { - "build": "ember build --output-path=dist-test --suppress-sizes", - "test": "pnpm build && bun ./diagnostic.js", - "test:production": "pnpm build -e production; bun ./diagnostic.js" + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", + "build:production": "pnpm build:tests -e production", + "test": "bun ./diagnostic.js", + "test:production": "bun ./diagnostic.js", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/diagnostic": { @@ -53,49 +55,58 @@ "@ember-data/unpublished-test-infra": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/debug": { "injected": true } }, "devDependencies": { "@babel/core": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/debug": "workspace:5.5.0-alpha.11", "@ember-data/graph": "workspace:5.5.0-alpha.11", "@ember-data/json-api": "workspace:5.5.0-alpha.11", "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", "@ember-data/model": "workspace:5.5.0-alpha.11", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", - "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.2.0", - "@embroider/macros": "^1.13.2", "@embroider/addon-shim": "^1.8.6", + "@embroider/macros": "^1.13.2", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", + "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", - "ember-cli-blueprint-test-helpers": "^0.19.2", "ember-cli-dependency-checker": "^3.3.2", "ember-cli-htmlbars": "^6.3.0", "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-test-loader": "^3.1.0", - "ember-cli": "~5.3.0", "ember-disable-prototype-extensions": "^1.1.3", "ember-inflector": "^4.0.2", "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^1.0.0", "ember-resolver": "^11.0.1", - "ember-source-channel-url": "^3.0.0", "ember-source": "~5.3.0", + "ember-source-channel-url": "^3.0.0", "ember-try": "^3.0.0", "loader.js": "^4.7.0", "silent-error": "^1.1.1", @@ -110,5 +121,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/ember-data__graph/tests/integration/graph/edge-removal/helpers.ts b/tests/ember-data__graph/tests/integration/graph/edge-removal/helpers.ts index 172a87d2844..91e1d60806a 100644 --- a/tests/ember-data__graph/tests/integration/graph/edge-removal/helpers.ts +++ b/tests/ember-data__graph/tests/integration/graph/edge-removal/helpers.ts @@ -1,9 +1,9 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { type Diagnostic } from '@warp-drive/diagnostic'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import { recordIdentifierFor } from '@ember-data/store'; -import { CollectionResourceDocument, SingleResourceDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import { CollectionResourceDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; import type { Context, UserRecord } from './setup'; import { stateOf } from './setup'; diff --git a/tests/ember-data__graph/tests/integration/graph/edge-removal/setup.ts b/tests/ember-data__graph/tests/integration/graph/edge-removal/setup.ts index 1244505e419..61c39dc7b99 100644 --- a/tests/ember-data__graph/tests/integration/graph/edge-removal/setup.ts +++ b/tests/ember-data__graph/tests/integration/graph/edge-removal/setup.ts @@ -1,6 +1,6 @@ import { TestContext } from '@ember/test-helpers'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { EmberHooks } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -17,7 +17,7 @@ import type { EmptyResourceDocument, JsonApiDocument, SingleResourceDocument, -} from '@ember-data/store/-types/q/ember-data-json-api'; +} from '@warp-drive/core-types/spec/raw'; import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; class AbstractMap { diff --git a/tests/ember-data__graph/tests/integration/graph/unload-test.ts b/tests/ember-data__graph/tests/integration/graph/unload-test.ts index c5fd2db2345..da2e08e5902 100644 --- a/tests/ember-data__graph/tests/integration/graph/unload-test.ts +++ b/tests/ember-data__graph/tests/integration/graph/unload-test.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; diff --git a/tests/ember-data__json-api/package.json b/tests/ember-data__json-api/package.json index 4bf4612164f..43a6abb0d9c 100644 --- a/tests/ember-data__json-api/package.json +++ b/tests/ember-data__json-api/package.json @@ -15,9 +15,11 @@ "test": "tests" }, "scripts": { - "build": "ember build --output-path=dist-test --suppress-sizes", - "test": "pnpm build && bun ./diagnostic.js", - "test:production": "pnpm build -e production; bun ./diagnostic.js" + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", + "build:production": "pnpm build:tests -e production", + "test": "bun ./diagnostic.js", + "test:production": "bun ./diagnostic.js", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/diagnostic": { @@ -44,7 +46,16 @@ "@ember-data/request-utils": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/request": { "injected": true } }, @@ -54,11 +65,11 @@ "@ember-data/graph": "workspace:5.5.0-alpha.11", "@ember-data/json-api": "workspace:5.5.0-alpha.11", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", @@ -68,22 +79,22 @@ "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", + "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", - "ember-cli-blueprint-test-helpers": "^0.19.2", "ember-cli-dependency-checker": "^3.3.2", "ember-cli-htmlbars": "^6.3.0", "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-test-loader": "^3.1.0", - "ember-cli": "~5.3.0", "ember-disable-prototype-extensions": "^1.1.3", "ember-inflector": "^4.0.2", "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^1.0.0", "ember-resolver": "^11.0.1", - "ember-source-channel-url": "^3.0.0", "ember-source": "~5.3.0", + "ember-source-channel-url": "^3.0.0", "ember-try": "^3.0.0", "loader.js": "^4.7.0", "silent-error": "^1.1.1", @@ -98,5 +109,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/ember-data__json-api/tests/integration/cache/collection-data-documents-test.ts b/tests/ember-data__json-api/tests/integration/cache/collection-data-documents-test.ts index 51c6ab1b311..f15567e38cd 100644 --- a/tests/ember-data__json-api/tests/integration/cache/collection-data-documents-test.ts +++ b/tests/ember-data__json-api/tests/integration/cache/collection-data-documents-test.ts @@ -1,4 +1,4 @@ -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from '@warp-drive/diagnostic'; import Cache from '@ember-data/json-api'; @@ -8,9 +8,9 @@ import Store from '@ember-data/store'; import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; import type { CollectionResourceDataDocument } from '@ember-data/store/-types/cache/document'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { CollectionResourceDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/raw'; import { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; -import { AttributesSchema, RelationshipsSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; type FakeRecord = { [key: string]: unknown; destroy: () => void }; class TestStore extends Store { diff --git a/tests/ember-data__json-api/tests/integration/cache/meta-documents-test.ts b/tests/ember-data__json-api/tests/integration/cache/meta-documents-test.ts index db8c8a04828..2be96a15b0f 100644 --- a/tests/ember-data__json-api/tests/integration/cache/meta-documents-test.ts +++ b/tests/ember-data__json-api/tests/integration/cache/meta-documents-test.ts @@ -1,4 +1,4 @@ -import type { StableExistingRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from '@warp-drive/diagnostic'; import Cache from '@ember-data/json-api'; @@ -8,7 +8,7 @@ import { CacheOperation } from '@ember-data/store/-private/managers/notification import type { CollectionResourceDataDocument, ResourceMetaDocument } from '@ember-data/store/-types/cache/document'; import { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import { AttributesSchema, RelationshipsSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; class TestStore extends Store { createCache(wrapper: CacheCapabilitiesManager) { diff --git a/tests/ember-data__json-api/tests/integration/cache/resource-data-documents-test.ts b/tests/ember-data__json-api/tests/integration/cache/resource-data-documents-test.ts index e05648302c3..d4a748ac66c 100644 --- a/tests/ember-data__json-api/tests/integration/cache/resource-data-documents-test.ts +++ b/tests/ember-data__json-api/tests/integration/cache/resource-data-documents-test.ts @@ -1,4 +1,4 @@ -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from '@warp-drive/diagnostic'; import Cache from '@ember-data/json-api'; @@ -9,9 +9,9 @@ import type { CacheOperation, NotificationType } from '@ember-data/store/-privat import type { SingleResourceDataDocument } from '@ember-data/store/-types/cache/document'; import type { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { SingleResourceDocument } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; -import type { AttributesSchema, RelationshipsSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; type FakeRecord = { [key: string]: unknown; destroy: () => void }; class TestStore extends Store { diff --git a/tests/ember-data__json-api/tests/integration/serialize-test.ts b/tests/ember-data__json-api/tests/integration/serialize-test.ts index d81478ee613..47190e4d132 100644 --- a/tests/ember-data__json-api/tests/integration/serialize-test.ts +++ b/tests/ember-data__json-api/tests/integration/serialize-test.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { module, test } from '@warp-drive/diagnostic'; import Cache from '@ember-data/json-api'; @@ -7,7 +7,7 @@ import Store from '@ember-data/store'; import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; -import type { AttributesSchema, RelationshipsSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; type FakeRecord = { [key: string]: unknown; destroy: () => void }; class TestStore extends Store { diff --git a/tests/ember-data__model/package.json b/tests/ember-data__model/package.json index c99df2f7bb7..b0800758a87 100644 --- a/tests/ember-data__model/package.json +++ b/tests/ember-data__model/package.json @@ -15,9 +15,9 @@ "test": "tests" }, "scripts": { - "build": "ember build --output-path=dist-test --suppress-sizes", - "test": "pnpm build && bun ./diagnostic.js", - "test:production": "pnpm build -e production; bun ./diagnostic.js" + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", + "test": "bun ./diagnostic.js", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/adapter": { @@ -38,7 +38,28 @@ "@warp-drive/diagnostic": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/legacy-compat": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/graph": { + "injected": true + }, + "@ember-data/json-api": { + "injected": true + }, + "@ember-data/request-utils": { "injected": true } }, @@ -46,12 +67,15 @@ "@babel/core": "^7.23.2", "@babel/runtime": "^7.23.2", "@ember-data/adapter": "workspace:5.5.0-alpha.11", + "@ember-data/graph": "workspace:5.5.0-alpha.11", + "@ember-data/json-api": "workspace:5.5.0-alpha.11", + "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/serializer": "workspace:5.5.0-alpha.11", "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", - "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.2.0", @@ -59,6 +83,8 @@ "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", @@ -83,5 +109,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/ember-data__request/package.json b/tests/ember-data__request/package.json index 60574b38ea1..d088e5e95a9 100644 --- a/tests/ember-data__request/package.json +++ b/tests/ember-data__request/package.json @@ -14,9 +14,11 @@ "test": "tests" }, "scripts": { - "build": "ember build --output-path=dist-test --suppress-sizes", - "test": "pnpm build && bun ./diagnostic.js", - "test:production": "pnpm build -e production; bun ./diagnostic.js" + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", + "_build:production": "pnpm build:tests -e production", + "test": "bun ./diagnostic.js", + "_test:production": "bun ./diagnostic.js", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/diagnostic": { @@ -30,6 +32,15 @@ }, "@warp-drive/holodeck": { "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true } }, "devDependencies": { @@ -37,7 +48,6 @@ "@babel/runtime": "^7.23.2", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", "@ember-data/request": "workspace:5.5.0-alpha.11", - "@warp-drive/holodeck": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", @@ -46,11 +56,13 @@ "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "@warp-drive/diagnostic": "workspace:5.5.0-alpha.11", + "@warp-drive/holodeck": "workspace:5.5.0-alpha.11", + "bun-types": "^1.0.6", "ember-auto-import": "^2.6.3", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", - "ember-cli-blueprint-test-helpers": "^0.19.2", "ember-cli-dependency-checker": "^3.3.2", "ember-cli-htmlbars": "^6.3.0", "ember-cli-inject-live-reload": "^2.1.0", @@ -66,7 +78,6 @@ "ember-source-channel-url": "^3.0.0", "ember-try": "^3.0.0", "loader.js": "^4.7.0", - "bun-types": "^1.0.6", "silent-error": "^1.1.1", "webpack": "^5.89.0" }, @@ -79,5 +90,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/ember-data__serializer/app/services/store.ts b/tests/ember-data__serializer/app/services/store.ts index 70868cc438d..ac54f924f09 100644 --- a/tests/ember-data__serializer/app/services/store.ts +++ b/tests/ember-data__serializer/app/services/store.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import JSONAPICache from '@ember-data/json-api'; import { diff --git a/tests/ember-data__serializer/package.json b/tests/ember-data__serializer/package.json index f02dd66a689..1d1d0a259b9 100644 --- a/tests/ember-data__serializer/package.json +++ b/tests/ember-data__serializer/package.json @@ -15,11 +15,12 @@ "test": "tests" }, "scripts": { - "build": "ember build", + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", "lint:hbs": "ember-template-lint .", - "lint:js": "eslint --config ../../.eslintrc.js --ignore-path ../../.eslintignore .", + "lint:old": "eslint --config ../../.eslintrc.js --ignore-path ../../.eslintignore .", "start": "ember serve", - "test": "ember test --test-port=0" + "test": "ember test --test-port=0 --path=dist-test", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/adapter": { @@ -52,7 +53,16 @@ "@ember-data/unpublished-test-infra": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/debug": { "injected": true } }, @@ -60,6 +70,7 @@ "@babel/core": "^7.23.2", "@babel/runtime": "^7.23.2", "@ember-data/adapter": "workspace:5.5.0-alpha.11", + "@ember-data/debug": "workspace:5.5.0-alpha.11", "@ember-data/graph": "workspace:5.5.0-alpha.11", "@ember-data/json-api": "workspace:5.5.0-alpha.11", "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", @@ -69,13 +80,13 @@ "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.2.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", @@ -102,5 +113,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/embroider-basic-compat/README.md b/tests/embroider-basic-compat/README.md index eba7de52fdb..b7b0252c9f1 100644 --- a/tests/embroider-basic-compat/README.md +++ b/tests/embroider-basic-compat/README.md @@ -33,12 +33,6 @@ Make use of the many generators for code, try `ember help generate` for more det * `ember test` * `ember test --server` -### Linting - -* `npm run lint:hbs` -* `npm run lint:js` -* `npm run lint:js -- --fix` - ### Building * `ember build` (development) diff --git a/tests/embroider-basic-compat/package.json b/tests/embroider-basic-compat/package.json index 2098b086718..a4fd9a70338 100644 --- a/tests/embroider-basic-compat/package.json +++ b/tests/embroider-basic-compat/package.json @@ -17,15 +17,17 @@ "scripts": { "build": "ember build", "lint:hbs": "ember-template-lint .", - "lint:js": "eslint --config ../../.eslintrc.js --ignore-path ../../.eslintignore .", + "lint:old": "eslint --config ../../.eslintrc.js --ignore-path ../../.eslintignore .", "start": "ember serve", - "test": "ember test --test-port=0" + "test:embroider": "ember test --test-port=0", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependencies": { "@ember/string": "3.1.1", "ember-auto-import": "^2.6.3", "ember-data": "workspace:5.5.0-alpha.11", "ember-inflector": "^4.0.2", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "webpack": "^5.89.0" }, "dependenciesMeta": { @@ -34,6 +36,12 @@ }, "@ember-data/unpublished-test-infra": { "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true } }, "devDependencies": { @@ -81,4 +89,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/tests/fastboot/README.md b/tests/fastboot/README.md index aec74524d20..a816b014521 100644 --- a/tests/fastboot/README.md +++ b/tests/fastboot/README.md @@ -33,12 +33,6 @@ Make use of the many generators for code, try `ember help generate` for more det * `ember test` * `ember test --server` -### Linting - -* `npm run lint:hbs` -* `npm run lint:js` -* `npm run lint:js -- --fix` - ### Building * `ember build` (development) diff --git a/tests/fastboot/package.json b/tests/fastboot/package.json index f474d21e16a..4904df3f2aa 100644 --- a/tests/fastboot/package.json +++ b/tests/fastboot/package.json @@ -17,9 +17,10 @@ "scripts": { "build": "ember build", "lint:hbs": "ember-template-lint .", - "lint:js": "eslint --config ../../.eslintrc.js --ignore-path ../../.eslintignore .", + "lint:old": "eslint --config ../../.eslintrc.js --ignore-path ../../.eslintignore .", "start": "ember serve", - "test": "ember test --test-port=0" + "test:fastboot": "ember test --test-port=0", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependencies": { "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", @@ -27,6 +28,7 @@ "ember-auto-import": "^2.6.3", "ember-data": "workspace:5.5.0-alpha.11", "ember-inflector": "^4.0.2", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "webpack": "^5.89.0" }, "dependenciesMeta": { @@ -35,6 +37,12 @@ }, "@ember-data/unpublished-test-infra": { "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true } }, "devDependencies": { @@ -79,4 +87,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/tests/full-data-asset-size-app/package.json b/tests/full-data-asset-size-app/package.json index e35d1bfdbd0..d2ebf3c69e1 100644 --- a/tests/full-data-asset-size-app/package.json +++ b/tests/full-data-asset-size-app/package.json @@ -16,7 +16,8 @@ }, "scripts": { "build": "ember build", - "start": "ember serve" + "start": "ember serve", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "ember-data": { @@ -24,6 +25,9 @@ }, "@ember-data/private-build-infra": { "injected": true + }, + "@ember/string": { + "injected": true } }, "devDependencies": { @@ -58,5 +62,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/main/package.json b/tests/main/package.json index 1950ac58052..d2d00527037 100644 --- a/tests/main/package.json +++ b/tests/main/package.json @@ -13,15 +13,17 @@ "test": "tests" }, "scripts": { - "build": "ember build", - "examine": "export EXAM_PARALLEL_COUNT=$(./bin/calculate-test-jobs); ember exam --test-port=0 --parallel=$EXAM_PARALLEL_COUNT --load-balance --wef --testem_debug=testem.log", + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", + "build:production": "pnpm build:tests -e production", + "examine": "export EXAM_PARALLEL_COUNT=$(./bin/calculate-test-jobs); ember exam --test-port=0 --path=dist-test --parallel=$EXAM_PARALLEL_COUNT --load-balance", "test:try-one": "ember try:one", "holodeck:start-program": "holodeck start", "holodeck:end-program": "holodeck end", "launch:tests": "ember test --port=0 --serve --no-launch", "start": "holodeck run launch:tests", "test": "holodeck run examine", - "test:production": "holodeck run examine -e production" + "test:production": "holodeck run examine", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "author": "", "license": "MIT", @@ -64,16 +66,37 @@ }, "@warp-drive/holodeck": { "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true } }, "devDependencies": { - "pm2": "5.3.0", "@babel/core": "^7.23.2", "@babel/plugin-transform-typescript": "^7.22.15", "@babel/runtime": "^7.23.2", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/adapter": "workspace:5.5.0-alpha.11", + "@ember-data/debug": "workspace:5.5.0-alpha.11", + "@ember-data/graph": "workspace:5.5.0-alpha.11", + "@ember-data/json-api": "workspace:5.5.0-alpha.11", + "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", + "@ember-data/model": "workspace:5.5.0-alpha.11", + "@ember-data/serializer": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/holodeck": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", @@ -87,6 +110,8 @@ "@types/ember__owner": "^4.0.6", "@types/ember__utils": "^4.0.4", "@types/qunit": "^2.19.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/holodeck": "workspace:5.5.0-alpha.11", "broccoli-concat": "^4.2.5", "broccoli-merge-trees": "^4.2.0", "broccoli-stew": "^3.0.0", @@ -94,7 +119,6 @@ "broccoli-test-helper": "^2.0.0", "broccoli-uglify-sourcemap": "^4.0.0", "ember-auto-import": "^2.6.3", - "ember-exam": "^8.0.0", "ember-cached-decorator-polyfill": "^1.0.2", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", @@ -106,6 +130,7 @@ "ember-data": "workspace:5.5.0-alpha.11", "ember-decorators-polyfill": "^1.1.5", "ember-disable-prototype-extensions": "^1.1.3", + "ember-exam": "^8.0.0", "ember-inflector": "^4.0.2", "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^1.0.0", @@ -116,6 +141,7 @@ "ember-strict-resolver": "^1.3.0", "ember-try": "^3.0.0", "loader.js": "^4.7.0", + "pm2": "5.3.0", "pretender": "^3.4.7", "qunit": "^2.20.0", "qunit-dom": "^3.0.0", @@ -131,5 +157,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/main/tests/helpers/accessors.ts b/tests/main/tests/helpers/accessors.ts index c96275be3a4..564d48095c1 100644 --- a/tests/main/tests/helpers/accessors.ts +++ b/tests/main/tests/helpers/accessors.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { graphFor } from '@ember-data/graph/-private'; import type { ImplicitEdge } from '@ember-data/graph/-private/edges/implicit'; diff --git a/tests/main/tests/integration/adapter/build-url-mixin-test.js b/tests/main/tests/integration/adapter/build-url-mixin-test.js index c6beafab3f7..00038c8189a 100644 --- a/tests/main/tests/integration/adapter/build-url-mixin-test.js +++ b/tests/main/tests/integration/adapter/build-url-mixin-test.js @@ -27,8 +27,8 @@ module('integration/adapter/build-url-mixin - BuildURLMixin with RESTAdapter', f let { owner } = this; class SuperUser extends Model {} - owner.register('adapter:application', RESTAdapter.extend()); - owner.register('serializer:application', RESTSerializer.extend()); + owner.register('adapter:application', class extends RESTAdapter {}); + owner.register('serializer:application', class extends RESTSerializer {}); owner.register('model:super-user', SuperUser); store = owner.lookup('service:store'); diff --git a/tests/main/tests/integration/cache-handler/store-package-setup-test.ts b/tests/main/tests/integration/cache-handler/store-package-setup-test.ts index 7e8bd54b283..b27438f0144 100644 --- a/tests/main/tests/integration/cache-handler/store-package-setup-test.ts +++ b/tests/main/tests/integration/cache-handler/store-package-setup-test.ts @@ -1,6 +1,6 @@ import { inject as service } from '@ember/service'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; @@ -27,7 +27,7 @@ import type { } from '@ember-data/store/-types/cache/document'; import { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { ResourceIdentifierObject } from '@ember-data/store/-types/q/ember-data-json-api'; +import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; import type { RecordInstance } from '@ember-data/store/-types/q/record-instance'; diff --git a/tests/main/tests/integration/identifiers/configuration-test.ts b/tests/main/tests/integration/identifiers/configuration-test.ts index 326f2be3d71..42132771433 100644 --- a/tests/main/tests/integration/identifiers/configuration-test.ts +++ b/tests/main/tests/integration/identifiers/configuration-test.ts @@ -1,7 +1,7 @@ import EmberObject, { set } from '@ember/object'; import { settled } from '@ember/test-helpers'; -import type { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from 'qunit'; import Store from 'ember-data/store'; diff --git a/tests/main/tests/integration/identifiers/scenarios-test.ts b/tests/main/tests/integration/identifiers/scenarios-test.ts index c595cde2dd3..55be5cf432f 100644 --- a/tests/main/tests/integration/identifiers/scenarios-test.ts +++ b/tests/main/tests/integration/identifiers/scenarios-test.ts @@ -1,6 +1,6 @@ import EmberObject, { set } from '@ember/object'; -import type { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from 'qunit'; import type Store from 'ember-data/store'; diff --git a/tests/main/tests/integration/record-data/record-data-errors-test.ts b/tests/main/tests/integration/record-data/record-data-errors-test.ts index 0acc771b53c..d74b0c542ff 100644 --- a/tests/main/tests/integration/record-data/record-data-errors-test.ts +++ b/tests/main/tests/integration/record-data/record-data-errors-test.ts @@ -1,17 +1,24 @@ import EmberObject from '@ember/object'; +import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; import type { RecordIdentifier, StableExistingRecordIdentifier, StableRecordIdentifier, -} from '@warp-drive/core/identifier'; +} from '@warp-drive/core-types/identifier'; +import type { + CollectionResourceDocument, + CollectionResourceRelationship, + JsonApiDocument, + SingleResourceDocument, + SingleResourceRelationship, +} from '@warp-drive/core-types/spec/raw'; import { module, test } from 'qunit'; import Store from 'ember-data/store'; import { setupTest } from 'ember-qunit'; import { InvalidError } from '@ember-data/adapter/error'; -import type { LocalRelationshipOperation } from '@ember-data/graph/-private/-operations'; import Model, { attr } from '@ember-data/model'; import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; import { recordIdentifierFor } from '@ember-data/store'; @@ -28,13 +35,6 @@ import type { import type { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; import type { Cache, ChangedAttributesHash, MergeOperation } from '@ember-data/store/-types/q/cache'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { - CollectionResourceDocument, - CollectionResourceRelationship, - JsonApiDocument, - SingleResourceDocument, - SingleResourceRelationship, -} from '@ember-data/store/-types/q/ember-data-json-api'; import type { JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; class Person extends Model { diff --git a/tests/main/tests/integration/record-data/record-data-state-test.ts b/tests/main/tests/integration/record-data/record-data-state-test.ts index 45fb3144fc7..b8642be0229 100644 --- a/tests/main/tests/integration/record-data/record-data-state-test.ts +++ b/tests/main/tests/integration/record-data/record-data-state-test.ts @@ -1,13 +1,20 @@ import EmberObject from '@ember/object'; import { settled } from '@ember/test-helpers'; -import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; +import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { + CollectionResourceDocument, + CollectionResourceRelationship, + JsonApiDocument, + SingleResourceDocument, + SingleResourceRelationship, +} from '@warp-drive/core-types/spec/raw'; import { module, test } from 'qunit'; import Store from 'ember-data/store'; import { setupTest } from 'ember-qunit'; -import { LocalRelationshipOperation } from '@ember-data/graph/-private/-operations'; import Model, { attr } from '@ember-data/model'; import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; import JSONAPISerializer from '@ember-data/serializer/json-api'; @@ -25,13 +32,6 @@ import type { import type { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; import type { Cache, ChangedAttributesHash, MergeOperation } from '@ember-data/store/-types/q/cache'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { - CollectionResourceDocument, - CollectionResourceRelationship, - JsonApiDocument, - SingleResourceDocument, - SingleResourceRelationship, -} from '@ember-data/store/-types/q/ember-data-json-api'; import type { JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; class Person extends Model { diff --git a/tests/main/tests/integration/record-data/record-data-test.ts b/tests/main/tests/integration/record-data/record-data-test.ts index f606581ad92..4181c14e49f 100644 --- a/tests/main/tests/integration/record-data/record-data-test.ts +++ b/tests/main/tests/integration/record-data/record-data-test.ts @@ -1,18 +1,25 @@ import EmberObject from '@ember/object'; import { settled } from '@ember/test-helpers'; +import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; import type { RecordIdentifier, StableExistingRecordIdentifier, StableRecordIdentifier, -} from '@warp-drive/core/identifier'; +} from '@warp-drive/core-types/identifier'; +import type { + CollectionResourceDocument, + CollectionResourceRelationship, + JsonApiDocument, + SingleResourceDocument, + SingleResourceRelationship, +} from '@warp-drive/core-types/spec/raw'; import { module, test } from 'qunit'; import Store from 'ember-data/store'; import { setupTest } from 'ember-qunit'; import JSONAPIAdapter from '@ember-data/adapter/json-api'; -import type { LocalRelationshipOperation } from '@ember-data/graph/-private/-operations'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; import JSONAPISerializer from '@ember-data/serializer/json-api'; @@ -29,13 +36,6 @@ import { import { StableDocumentIdentifier } from '@ember-data/store/-types/cache/identifier'; import type { Cache, ChangedAttributesHash, MergeOperation } from '@ember-data/store/-types/q/cache'; import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { - CollectionResourceDocument, - CollectionResourceRelationship, - JsonApiDocument, - SingleResourceDocument, - SingleResourceRelationship, -} from '@ember-data/store/-types/q/ember-data-json-api'; import type { JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; class Person extends Model { diff --git a/tests/main/tests/integration/record-data/store-wrapper-test.ts b/tests/main/tests/integration/record-data/store-wrapper-test.ts index 8ac5e6d25c3..c4870d69aa5 100644 --- a/tests/main/tests/integration/record-data/store-wrapper-test.ts +++ b/tests/main/tests/integration/record-data/store-wrapper-test.ts @@ -1,6 +1,6 @@ import { settled } from '@ember/test-helpers'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { module, test } from 'qunit'; import Store from 'ember-data/store'; diff --git a/tests/main/tests/integration/relationships/rollback-test.ts b/tests/main/tests/integration/relationships/rollback-test.ts index 574d29f5c18..7d71a91432a 100644 --- a/tests/main/tests/integration/relationships/rollback-test.ts +++ b/tests/main/tests/integration/relationships/rollback-test.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; diff --git a/tests/main/tests/unit/custom-class-support/custom-class-model-test.ts b/tests/main/tests/unit/custom-class-support/custom-class-model-test.ts index eb8d4088e34..ed77605d2da 100644 --- a/tests/main/tests/unit/custom-class-support/custom-class-model-test.ts +++ b/tests/main/tests/unit/custom-class-support/custom-class-model-test.ts @@ -1,4 +1,4 @@ -import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core/identifier'; +import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { module, test } from 'qunit'; import Store from 'ember-data/store'; @@ -8,7 +8,7 @@ import JSONAPIAdapter from '@ember-data/adapter/json-api'; import type { Snapshot } from '@ember-data/legacy-compat/-private'; import JSONAPISerializer from '@ember-data/serializer/json-api'; import { Cache } from '@ember-data/store/-types/q/cache'; -import type { AttributesSchema, RelationshipsSchema } from '@ember-data/store/-types/q/record-data-schemas'; +import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; import type { SchemaService } from '@ember-data/store/-types/q/schema-service'; module('unit/model - Custom Class Model', function (hooks: NestedHooks) { diff --git a/tests/performance/package.json b/tests/performance/package.json index ec42575486e..18285bea547 100644 --- a/tests/performance/package.json +++ b/tests/performance/package.json @@ -16,17 +16,22 @@ }, "scripts": { "build": "ember build", - "start": "ember serve" + "start": "ember serve", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependencies": { "@ember/string": "3.1.1", "ember-auto-import": "^2.6.3", "ember-data": "workspace:5.5.0-alpha.11", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "webpack": "^5.89.0" }, "dependenciesMeta": { "ember-data": { "injected": true + }, + "@ember/string": { + "injected": true } }, "devDependencies": { @@ -63,4 +68,4 @@ "extends": "../../package.json" }, "packageManager": "pnpm@8.9.2" -} \ No newline at end of file +} diff --git a/tests/recommended-json-api/app/services/store.ts b/tests/recommended-json-api/app/services/store.ts index 0c3ddb432c2..86ac8e81210 100644 --- a/tests/recommended-json-api/app/services/store.ts +++ b/tests/recommended-json-api/app/services/store.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import JSONAPICache from '@ember-data/json-api'; import type Model from '@ember-data/model'; diff --git a/tests/recommended-json-api/package.json b/tests/recommended-json-api/package.json index 14236467709..7cf3f689e58 100644 --- a/tests/recommended-json-api/package.json +++ b/tests/recommended-json-api/package.json @@ -17,7 +17,8 @@ "scripts": { "build": "ember build", "start": "ember test --port=0 --serve --no-launch", - "test": "ember test --test-port=0" + "test:examples": "ember test --test-port=0", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/json-api": { @@ -50,13 +51,23 @@ "@ember-data/unpublished-test-infra": { "injected": true }, - "@warp-drive/core": { + "@warp-drive/core-types": { + "injected": true + }, + "@ember/string": { + "injected": true + }, + "ember-inflector": { + "injected": true + }, + "@ember-data/debug": { "injected": true } }, "devDependencies": { "@babel/core": "^7.23.2", "@babel/runtime": "^7.23.2", + "@ember-data/debug": "workspace:5.5.0-alpha.11", "@ember-data/graph": "workspace:5.5.0-alpha.11", "@ember-data/json-api": "workspace:5.5.0-alpha.11", "@ember-data/legacy-compat": "workspace:5.5.0-alpha.11", @@ -67,7 +78,6 @@ "@ember-data/store": "workspace:5.5.0-alpha.11", "@ember-data/tracking": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", @@ -80,10 +90,10 @@ "@html-next/vertical-collection": "^4.0.2", "@types/ember__owner": "^4.0.6", "@types/morgan": "^1.9.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", - "ember-cli-blueprint-test-helpers": "^0.19.2", "ember-cli-dependency-checker": "^3.3.2", "ember-cli-htmlbars": "^6.3.0", "ember-cli-inject-live-reload": "^2.1.0", @@ -119,5 +129,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/warp-drive__schema-record/app/services/store.ts b/tests/warp-drive__schema-record/app/services/store.ts index 24145d32272..68c7d1aa001 100644 --- a/tests/warp-drive__schema-record/app/services/store.ts +++ b/tests/warp-drive__schema-record/app/services/store.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { instantiateRecord, teardownRecord } from '@warp-drive/schema-record/hooks'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; diff --git a/tests/warp-drive__schema-record/package.json b/tests/warp-drive__schema-record/package.json index c658c35d5dc..f66138e1bf5 100644 --- a/tests/warp-drive__schema-record/package.json +++ b/tests/warp-drive__schema-record/package.json @@ -15,9 +15,10 @@ "test": "tests" }, "scripts": { - "build": "ember build", + "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", "start": "ember test --port=0 --serve --no-launch", - "test": "ember test --test-port=0" + "test": "ember test --test-port=0 --path=dist-test", + "_syncPnpm": "pnpm sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/schema-record": { @@ -38,35 +39,36 @@ "@ember-data/graph": { "injected": true }, - "@ember-data/model": { + "@ember-data/private-build-infra": { "injected": true }, - "@ember-data/legacy-compat": { + "@ember-data/request-utils": { "injected": true }, - "@ember-data/private-build-infra": { + "@warp-drive/core-types": { "injected": true }, - "@ember-data/request-utils": { + "@ember-data/unpublished-test-infra": { "injected": true }, - "@warp-drive/core": { + "@ember/string": { + "injected": true + }, + "ember-inflector": { "injected": true } }, "devDependencies": { "@babel/core": "^7.23.2", "@babel/runtime": "^7.23.2", - "@ember-data/store": "workspace:5.5.0-alpha.11", - "@ember-data/request": "workspace:5.5.0-alpha.11", - "@ember-data/tracking": "workspace:5.5.0-alpha.11", - "@ember-data/json-api": "workspace:5.5.0-alpha.11", - "@ember-data/request-utils": "workspace:5.5.0-alpha.11", "@ember-data/graph": "workspace:5.5.0-alpha.11", - "@warp-drive/schema-record": "workspace:5.5.0-alpha.11", + "@ember-data/json-api": "workspace:5.5.0-alpha.11", "@ember-data/private-build-infra": "workspace:5.5.0-alpha.11", + "@ember-data/request": "workspace:5.5.0-alpha.11", + "@ember-data/request-utils": "workspace:5.5.0-alpha.11", + "@ember-data/store": "workspace:5.5.0-alpha.11", + "@ember-data/tracking": "workspace:5.5.0-alpha.11", "@ember-data/unpublished-test-infra": "workspace:5.5.0-alpha.11", - "@warp-drive/core": "workspace:5.5.0-alpha.11", "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.0.0", "@ember/string": "3.1.1", @@ -74,6 +76,8 @@ "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/ember__owner": "^4.0.6", + "@warp-drive/core-types": "workspace:5.5.0-alpha.11", + "@warp-drive/schema-record": "workspace:5.5.0-alpha.11", "ember-auto-import": "^2.6.3", "ember-cli": "~5.3.0", "ember-cli-babel": "^8.2.0", @@ -105,5 +109,8 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.9.2" -} \ No newline at end of file + "packageManager": "pnpm@8.9.2", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + } +} diff --git a/tests/warp-drive__schema-record/tests/reactivity/basic-fields-test.ts b/tests/warp-drive__schema-record/tests/reactivity/basic-fields-test.ts index a9472f6dded..c8a8f987bed 100644 --- a/tests/warp-drive__schema-record/tests/reactivity/basic-fields-test.ts +++ b/tests/warp-drive__schema-record/tests/reactivity/basic-fields-test.ts @@ -1,6 +1,6 @@ import { rerender } from '@ember/test-helpers'; -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; import type { FieldSchema, Transform } from '@warp-drive/schema-record/schema'; import { SchemaService } from '@warp-drive/schema-record/schema'; diff --git a/tests/warp-drive__schema-record/tests/reads/basic-fields-test.ts b/tests/warp-drive__schema-record/tests/reads/basic-fields-test.ts index a0e0846c62d..33c8bfe972b 100644 --- a/tests/warp-drive__schema-record/tests/reads/basic-fields-test.ts +++ b/tests/warp-drive__schema-record/tests/reads/basic-fields-test.ts @@ -1,4 +1,4 @@ -import type { StableRecordIdentifier } from '@warp-drive/core'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; import type { Transform } from '@warp-drive/schema-record/schema'; import { SchemaService } from '@warp-drive/schema-record/schema'; diff --git a/tests/warp-drive__schema/package.json b/tests/warp-drive__schema/package.json index a37fab647fc..b211e32cc1e 100644 --- a/tests/warp-drive__schema/package.json +++ b/tests/warp-drive__schema/package.json @@ -10,5 +10,11 @@ "directory": "tests/warp-drive__schema" }, "license": "MIT", - "author": "" -} \ No newline at end of file + "author": "", + "dependencies": { + "pnpm-sync-dependencies-meta-injected": "0.0.10" + }, + "scripts": { + "_syncPnpm": "pnpm sync-dependencies-meta-injected" + } +} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 4a1d45e8248..00000000000 --- a/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.root.json", - "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": false - }, - "files": [ - "packages/adapter/src/rest.ts", - ] - } diff --git a/tsconfig.root.json b/tsconfig.root.json deleted file mode 100644 index 4b460e0e0d9..00000000000 --- a/tsconfig.root.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "ES2020", - "moduleResolution": "node", - - // Enable faster builds - "incremental": true, - - "allowJs": false, - "checkJs": false, - - "alwaysStrict": true, - "strict": true, - "allowSyntheticDefaultImports": true, - - "noImplicitAny": true, - "noImplicitThis": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "noEmitOnError": false, - "strictNullChecks": true, - "noErrorTruncation": true, - "preserveConstEnums": false, - "experimentalDecorators": true, - "pretty": true, - "noEmit": true, - "skipLibCheck": true, - - // Support generation of source maps. Note: you must *also* enable source - // maps in your `ember-cli-babel` config and/or `babel.config.js`. - "declaration": true, - "declarationMap": true, - "inlineSourceMap": true, - "inlineSources": true, - - "baseUrl": ".", - "paths": { - "ember-data": ["packages/-ember-data/addon"], - "ember-data/*": ["packages/-ember-data/addon/*"], - "@ember-data/store": ["packages/store/src"], - "@ember-data/store/*": ["packages/store/src/*"], - "@ember-data/data-worker": ["packages/data-worker/src"], - "@ember-data/data-worker/*": ["packages/data-worker/src/*"], - "@ember-data/tracking": ["packages/tracking/unstable-preview-types"], - "@ember-data/tracking/*": ["packages/tracking/unstable-preview-types/*"], - "@warp-drive/holodeck": ["packages/holodeck/dist"], - "@warp-drive/holodeck/*": ["packages/holodeck/dist/*"], - "@warp-drive/diagnostic": ["packages/diagnostic/dist"], - "@warp-drive/diagnostic/*": ["packages/diagnostic/dist/*"], - "@warp-drive/core": ["packages/core/unstable-preview-types"], - "@warp-drive/core/*": ["packages/core/unstable-preview-types/*"], - "@ember-data/request": ["packages/request/unstable-preview-types"], - "@ember-data/request/*": ["packages/request/unstable-preview-types/*"], - "@warp-drive/schema-record": ["packages/schema-record/src"], - "@warp-drive/schema-record/*": ["packages/schema-record/src/*"], - "@ember-data/request-utils": ["packages/request-utils/src"], - "@ember-data/request-utils/*": ["packages/request-utils/src/*"], - "@ember-data/rest": ["packages/rest/src"], - "@ember-data/rest/*": ["packages/rest/src/*"], - "@ember-data/active-record": ["packages/active-record/src"], - "@ember-data/active-record/*": ["packages/active-record/src/*"], - "@ember-data/schema-record": ["packages/schema-record/src"], - "@ember-data/schema-record/*": ["packages/schema-record/src/*"], - "@ember-data/experimental-preview-types": ["packages/experimental-preview-types/src"], - "@ember-data/experimental-preview-types/*": ["packages/experimental-preview-types/src/*"], - "@ember-data/debug": ["packages/debug/addon"], - "@ember-data/debug/*": ["packages/debug/addon/*"], - "@ember-data/model": ["packages/model/src"], - "@ember-data/model/*": ["packages/model/src/*"], - "@ember-data/graph": ["packages/graph/src"], - "@ember-data/graph/*": ["packages/graph/src/*"], - "@ember-data/adapter": ["packages/adapter/src"], - "@ember-data/adapter/*": ["packages/adapter/src/*"], - "@ember-data/adapter/error": ["packages/adapter/src/error"], - "@ember-data/serializer": ["packages/serializer/src"], - "@ember-data/serializer/*": ["packages/serializer/src/*"], - "ember-data/test-support": ["packages/-ember-data/addon-test-support"], - "ember-data/test-support/*": ["packages/-ember-data/addon-test-support/*"], - "@ember-data/json-api": ["packages/json-api/src"], - "@ember-data/json-api/*": ["packages/json-api/src/*"], - "@ember-data/legacy-compat": ["packages/legacy-compat/src"], - "@ember-data/legacy-compat/*": ["packages/legacy-compat/src/*"], - "@ember-data/canary-features": ["packages/private-build-infra/virtual-packages/canary-features.d.ts"], - "@ember-data/debugging": ["packages/private-build-infra/virtual-packages/debugging.d.ts"], - "@ember-data/deprecations": ["packages/private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["packages/private-build-infra/virtual-packages/packages.d.ts"], - "@ember-data/env": ["packages/private-build-infra/virtual-packages/env.d.ts"], - "@ember-data/unpublished-test-infra/test-support": ["packages/unpublished-test-infra/addon-test-support"], - "@ember-data/unpublished-test-infra/test-support/*": ["packages/unpublished-test-infra/addon-test-support/*"], - "fastboot-test-app/tests/*": ["tests/*"], - "fastboot-test-app/*": ["app/*"], - "main-test-app/tests/*": ["tests/main/tests/*"], - "main-test-app/*": ["tests/main/app/*"], - "ember-data__graph/tests/*": ["tests/ember-data__graph/tests/*"], - "ember-data__graph/*": ["tests/ember-data__graph/app/*"], - "ember-data__request/tests/*": ["tests/ember-data__request/tests/*"], - "ember-data__request/*": ["tests/ember-data__request/app/*"], - "*": ["@types/*", "packages/fastboot-test-app/types/*"], - "ember-inflector": ["tests/main/node_modules/ember-inflector","packages/-ember-data/node_modules/ember-inflector"] - } - }, - "include": [ - "@types/**/*", - "packages/**/app/**/*", - "packages/**/tests/**/*", - "packages/holodeck/dist/**/*", - "packages/request-utils/src/**/*", - "packages/data-worker/src/**/*", - "packages/store/src/**/*", - "packages/adapter/src/**/*", - "packages/graph/src/**/*", - "packages/active-record/src/**/*", - "packages/schema-record/src/**/*", - "packages/rest/src/**/*", - "packages/-ember-data/addon/**/*", - "packages/serializer/addon/**/*", - "packages/model/src/**/*", - "packages/legacy-compat/src/**/*", - "packages/json-api/src/**/*", - "packages/serializer/src/**/*", - "packages/experimental-preview-types/src/**/*", - "packages/fastboot-test-app/types/**/*", - "packages/private-build-infra/canary-features/**/*", - "packages/**/test-support/**/*", - "packages/**/addon-test-support/**/*", - "tests/**/app/**/*", - "tests/**/addon/**/*", - "tests/**/tests/**/*", - "tests/recommended-json-api/workers/**/*", - ], - "exclude": ["node_modules", "packages/**/node_modules", "packages/**/dist", "packages/**/DEBUG"] -} diff --git a/turbo.json b/turbo.json new file mode 100644 index 00000000000..0b4a362042d --- /dev/null +++ b/turbo.json @@ -0,0 +1,112 @@ +{ + "baseBranch": "origin/main", + // Additive to package.json and turbo.json + // + // https://turbo.build/repo/docs/core-concepts/caching/file-inputs#specifying-additional-inputs + "globalDependencies": [ + "pnpm-lock.yaml", + "patches/*", + ".github/*" + ], + "pipeline": { + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + // + // Local Dev + // + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + "start": { + "dependsOn": ["_syncPnpm", "^build"], + "outputs": [], + "cache": false, + "persistent": true + }, + + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + // + // C.I. / C.D. + // + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + "build": { + "inputs": [ + // + V2-Addon convention + "src/**", + "tests/**", + "addon-main.*", + "tsconfig.json", + "babel.*", + "rollup-config.*" + ], + "outputs": [ + // V1-Addon convention + "addon/**", + "addon-test-support/**", + // V2-Addon convention + "dist/**", + "dist-test/**", + "declarations/**", + "unstable-preview-types/**" + ], + "dependsOn": ["_syncPnpm"] + }, + "build:tests": { + "inputs": [ + // + V2-Addon convention + "src/**", + "tests/**", + "addon-main.*", + "tsconfig.json", + "babel.*", + "rollup-config.*" + ], + "outputs": [ + // V1-Addon convention + "addon/**", + "addon-test-support/**", + // V2-Addon convention + "dist/**", + "dist-test/**", + "declarations/**", + "unstable-preview-types/**" + ], + "dependsOn": ["_syncPnpm", "^build"] + }, + "build:production": { + "inputs": [ + // + V2-Addon convention + "src/**", + "tests/**", + "ember-cli-build.js", + "addon-main.*", + "babel.*", + "rollup-config.*" + ], + "outputs": [ + // V1-Addon convention + "addon/**", + "addon-test-support/**", + // V2-Addon convention + "dist/**", + "dist-test/**", + "declarations/**" + ], + "dependsOn": ["_syncPnpm", "^build"] + }, + // See: https://github.com/pnpm/pnpm/issues/4965 + "_syncPnpm": { + "dependsOn": ["^build"], + "cache": false + }, + "test": { + "outputs": [], + "dependsOn": ["build:tests"] + }, + "test:production": { + "outputs": [], + "dependsOn": ["build:production"] + } + } +} \ No newline at end of file