From fd497de0c19572b96a594b9ff51205be92b54729 Mon Sep 17 00:00:00 2001 From: Chris Thoburn Date: Mon, 13 May 2024 01:20:11 -0700 Subject: [PATCH] feat: add new build-config package (#9292) * feat: build config * fixup * fixup * dont change * fix types * fixup lint * prep work for v1 downlevel * downlevel addons to v1 * fixup * fixes * try again? * fixup again * another attempt * add uplevel script * cleanup * remove accidental files * downlevel more * again? * try more * fix uplevel * fix * fixup * fix more tests? --- .github/renovate.json | 1 - .github/workflows/main.yml | 2 +- .gitignore | 19 +- .prettierignore | 3 + .vscode/settings.json | 5 +- config/babel/fix-mjs.cjs | 35 + config/eslint/base.cjs | 50 - config/eslint/browser.js | 54 + config/eslint/diagnostic.cjs | 53 - config/eslint/diagnostic.js | 23 + config/eslint/gts.js | 34 + config/eslint/ignore.cjs | 38 - config/eslint/ignore.js | 39 + config/eslint/{imports.cjs => imports.js} | 17 +- config/eslint/{isolation.cjs => isolation.js} | 6 +- config/eslint/mocha.cjs | 20 - config/eslint/mocha.js | 16 + config/eslint/node.cjs | 66 - config/eslint/node.js | 117 + config/eslint/parser.cjs | 19 - config/eslint/parser.js | 33 + config/eslint/qunit.cjs | 32 - config/eslint/qunit.js | 53 + config/eslint/typescript.cjs | 82 - config/eslint/typescript.js | 167 + config/package.json | 23 +- config/rollup/external.js | 72 +- config/rollup/gjs.js | 3 + config/rollup/keep-assets.js | 44 + config/vite/compile-types-plugin.js | 11 + config/vite/config.js | 55 + config/vite/fix-module-output-plugin.js | 59 + docs-generator/yuidoc.json | 6 +- guides/typescript/0-installation.md | 48 +- package.json | 49 +- packages/-ember-data/.eslintrc.cjs | 34 - packages/-ember-data/.npmignore | 45 - packages/-ember-data/addon-main.cjs | 16 + packages/-ember-data/addon/version.d.ts | 3 - .../-ember-data/app/transforms/boolean.js | 2 +- packages/-ember-data/app/transforms/date.js | 2 +- packages/-ember-data/app/transforms/number.js | 2 +- packages/-ember-data/app/transforms/string.js | 2 +- packages/-ember-data/babel.config.mjs | 11 + packages/-ember-data/eslint.config.mjs | 42 + packages/-ember-data/index.js | 14 - packages/-ember-data/package.json | 127 +- .../{addon => src}/-private/core.ts | 2 +- .../{addon => src}/-private/index.ts | 0 .../-ember-data/{addon => src}/adapter.ts | 0 .../{addon => src}/adapters/errors.ts | 0 .../{addon => src}/adapters/json-api.ts | 0 .../{addon => src}/adapters/rest.ts | 0 packages/-ember-data/{addon => src}/attr.ts | 0 packages/-ember-data/{addon => src}/index.ts | 14 +- packages/-ember-data/{addon => src}/model.ts | 0 .../{addon => src}/relationships.ts | 0 .../-ember-data/{addon => src}/serializer.ts | 0 .../serializers/embedded-records-mixin.ts | 0 .../{addon => src}/serializers/json-api.ts | 0 .../{addon => src}/serializers/json.ts | 0 .../{addon => src}/serializers/rest.ts | 0 .../{addon => src}/setup-container.ts | 0 packages/-ember-data/{addon => src}/store.ts | 12 +- .../index.js => src/test-support/index.ts} | 13 +- .../-ember-data/{addon => src}/transform.ts | 0 packages/-ember-data/src/version.ts | 4 + packages/-ember-data/tsconfig.json | 97 +- packages/-ember-data/vite.config.mjs | 26 + packages/active-record/.eslintrc.cjs | 26 - packages/active-record/addon-main.cjs | 5 + packages/active-record/addon-main.js | 19 - packages/active-record/babel.config.json | 8 - packages/active-record/babel.config.mjs | 11 + packages/active-record/eslint.config.mjs | 22 + packages/active-record/package.json | 111 +- packages/active-record/rollup.config.mjs | 33 - .../src/-private/builders/save-record.ts | 2 +- packages/active-record/tsconfig.json | 51 +- packages/active-record/vite.config.mjs | 12 + packages/adapter/.eslintrc.cjs | 34 - packages/adapter/addon-main.cjs | 5 + packages/adapter/addon-main.js | 94 - packages/adapter/babel.config.js | 13 - packages/adapter/babel.config.mjs | 12 + .../adapter/blueprints/adapter-test/index.js | 20 +- .../qunit-files/__root__/__path__/__test__.js | 7 +- packages/adapter/blueprints/adapter/index.js | 76 +- packages/adapter/eslint.config.mjs | 46 + packages/adapter/package.json | 55 +- packages/adapter/rollup.config.mjs | 41 - packages/adapter/src/-private.ts | 8 +- .../adapter/src/-private/build-url-mixin.ts | 4 +- .../src/-private/utils/continue-on-reject.ts | 2 +- .../-private/utils/determine-body-promise.ts | 2 +- packages/adapter/src/-private/utils/fetch.ts | 4 +- .../-private/utils/parse-response-headers.ts | 2 +- .../src/-private/utils/serialize-into-hash.ts | 12 +- .../-private/utils/serialize-query-params.ts | 2 +- packages/adapter/src/error.js | 57 +- packages/adapter/src/index.ts | 10 +- packages/adapter/src/json-api.ts | 6 +- packages/adapter/src/rest.ts | 60 +- packages/adapter/tsconfig.json | 69 +- packages/adapter/vite.config.mjs | 24 + .../LICENSE.md | 4 +- packages/build-config/NCC-1701-a-blue.svg | 4 + packages/build-config/NCC-1701-a.svg | 4 + packages/build-config/README.md | 101 + packages/build-config/babel.config.mjs | 3 + packages/build-config/cjs-src/addon-shim.js | 26 + .../babel-plugin-transform-asserts.js | 113 + .../babel-plugin-transform-deprecations.js} | 13 +- .../babel-plugin-transform-features.js} | 17 +- .../babel-plugin-transform-logging.js} | 13 +- packages/build-config/package.json | 69 + .../src/-private/utils/deprecations.ts} | 24 +- .../src/-private/utils/features.ts} | 32 +- .../src/-private/utils/get-env.ts | 12 + packages/build-config/src/babel-macros.ts | 70 + .../src/canary-features.ts} | 4 +- .../src/debugging.ts} | 27 +- .../src/deprecation-versions.ts} | 10 +- packages/build-config/src/deprecations.ts | 10 + packages/build-config/src/env.ts | 3 + packages/build-config/src/index.ts | 72 + packages/build-config/src/macros.ts | 7 + .../src/validate-exports.type-test.ts | 14 + packages/build-config/tsconfig.json | 45 + packages/build-config/vite.config-cjs.mjs | 24 + packages/build-config/vite.config.mjs | 23 + packages/codemods/.eslintrc.cjs | 28 - packages/codemods/eslint.config.mjs | 20 + packages/codemods/package.json | 3 +- packages/codemods/tsconfig.json | 2 + packages/core-types/.eslintrc.cjs | 26 - packages/core-types/addon-main.cjs | 101 +- packages/core-types/babel.config.js | 5 - packages/core-types/babel.config.mjs | 11 + packages/core-types/eslint.config.mjs | 22 + packages/core-types/package.json | 49 +- packages/core-types/rollup.config.mjs | 33 - packages/core-types/src/-private.ts | 160 + packages/core-types/src/cache/relationship.ts | 2 +- packages/core-types/src/graph.ts | 2 +- packages/core-types/src/record.ts | 31 +- packages/core-types/src/request.ts | 22 +- packages/core-types/src/schema.ts | 37 - packages/core-types/src/schema/fields.ts | 693 ++ packages/core-types/src/spec/document.ts | 2 +- packages/core-types/src/spec/error.ts | 2 +- .../src/spec/{raw.ts => json-api-raw.ts} | 35 +- packages/core-types/src/symbols.ts | 10 +- packages/core-types/tsconfig.json | 23 +- packages/core-types/vite.config.mjs | 28 + packages/debug/.eslintrc.cjs | 25 - packages/debug/.npmignore | 40 - packages/debug/addon-main.cjs | 5 + packages/debug/app/data-adapter.js | 1 - packages/debug/babel.config.mjs | 12 + packages/debug/eslint.config.mjs | 23 + packages/debug/index.js | 35 - packages/debug/package.json | 63 +- packages/debug/{addon => src}/data-adapter.ts | 37 +- packages/debug/{addon => src}/index.ts | 0 packages/debug/tsconfig.json | 71 + packages/debug/vite.config.mjs | 19 + packages/diagnostic/.eslintrc.cjs | 39 - packages/diagnostic/.npmignore | 1 - packages/diagnostic/addon-main.cjs | 4 +- packages/diagnostic/babel.config.json | 3 - packages/diagnostic/babel.config.mjs | 8 + packages/diagnostic/eslint.config.mjs | 31 + packages/diagnostic/package.json | 45 +- packages/diagnostic/rollup.config.mjs | 35 - packages/diagnostic/server/default-setup.js | 1 - packages/diagnostic/src/-types.ts | 6 +- .../diagnostic/src/emitters/diagnostic.ts | 6 +- packages/diagnostic/src/emitters/testem.ts | 12 +- packages/diagnostic/tsconfig.json | 4 +- packages/diagnostic/vite.config.mjs | 27 + packages/ember/.eslintrc.cjs | 26 - packages/ember/addon-main.cjs | 4 +- .../{babel.config.js => babel.config.mjs} | 6 +- packages/ember/eslint.config.mjs | 29 + packages/ember/package.json | 43 +- packages/ember/rollup.config.mjs | 45 - packages/ember/src/-private/await.gts | 7 +- packages/ember/src/-private/request.gts | 39 +- packages/ember/tsconfig.json | 47 +- packages/ember/vite.config.mjs | 22 + .../eslint.config.mjs | 17 + .../eslint-plugin-ember-data/package.json | 6 +- packages/graph/.eslintrc.cjs | 26 - packages/graph/.npmignore | 40 - packages/graph/addon-main.cjs | 95 +- packages/graph/babel.config.js | 13 - packages/graph/babel.config.mjs | 11 + packages/graph/eslint.config.mjs | 22 + packages/graph/package.json | 47 +- packages/graph/rollup.config.mjs | 37 - packages/graph/src/-private.ts | 8 +- packages/graph/src/-private/-diff.ts | 3 +- .../graph/src/-private/-edge-definition.ts | 5 +- packages/graph/src/-private/-utils.ts | 7 +- packages/graph/src/-private/coerce-id.ts | 3 +- .../-private/debug/assert-polymorphic-type.ts | 26 +- .../graph/src/-private/edges/collection.ts | 2 +- packages/graph/src/-private/edges/resource.ts | 2 +- packages/graph/src/-private/graph.ts | 17 +- packages/graph/src/-private/normalize-link.ts | 2 +- .../operations/add-to-related-records.ts | 3 +- .../-private/operations/merge-identifier.ts | 2 +- .../operations/remove-from-related-records.ts | 3 +- .../operations/replace-related-record.ts | 3 +- .../operations/replace-related-records.ts | 3 +- .../operations/update-relationship.ts | 12 +- packages/graph/tsconfig.json | 46 +- packages/graph/vite.config.mjs | 15 + packages/holodeck/.eslintrc.cjs | 26 - packages/holodeck/babel.config.json | 3 - packages/holodeck/babel.config.mjs | 8 + packages/holodeck/eslint.config.mjs | 22 + packages/holodeck/package.json | 34 +- packages/holodeck/rollup.config.mjs | 33 - packages/holodeck/{client => src}/index.ts | 0 packages/holodeck/{client => src}/mock.ts | 0 packages/holodeck/tsconfig.json | 33 +- packages/holodeck/vite.config.mjs | 13 + packages/json-api/.eslintrc.cjs | 26 - packages/json-api/.npmignore | 40 - packages/json-api/addon-main.cjs | 5 + packages/json-api/addon-main.js | 94 - packages/json-api/babel.config.js | 13 - packages/json-api/babel.config.mjs | 11 + packages/json-api/eslint.config.mjs | 22 + packages/json-api/package.json | 67 +- packages/json-api/rollup.config.mjs | 39 - .../src/-private/builders/save-record.ts | 3 +- packages/json-api/src/-private/cache.ts | 77 +- packages/json-api/src/-private/serialize.ts | 19 +- packages/json-api/tsconfig.json | 61 +- packages/json-api/vite.config.mjs | 15 + packages/legacy-compat/.eslintrc.cjs | 29 - packages/legacy-compat/addon-main.cjs | 5 + packages/legacy-compat/addon-main.js | 94 - packages/legacy-compat/babel.config.js | 13 - packages/legacy-compat/babel.config.mjs | 11 + packages/legacy-compat/eslint.config.mjs | 22 + packages/legacy-compat/package.json | 70 +- packages/legacy-compat/rollup.config.mjs | 33 - packages/legacy-compat/src/-private.ts | 6 +- .../legacy-compat/src/builders/find-all.ts | 7 +- .../legacy-compat/src/builders/find-record.ts | 9 +- packages/legacy-compat/src/builders/query.ts | 9 +- .../legacy-compat/src/builders/save-record.ts | 7 +- packages/legacy-compat/src/builders/utils.ts | 2 +- packages/legacy-compat/src/index.ts | 6 +- .../legacy-network-handler/fetch-manager.ts | 32 +- .../identifier-has-id.ts | 3 +- .../legacy-data-fetch.ts | 9 +- .../legacy-network-handler.ts | 33 +- .../minimum-adapter-interface.ts | 16 +- .../minimum-serializer-interface.ts | 6 +- .../serializer-response.ts | 7 +- .../snapshot-record-array.ts | 11 +- .../src/legacy-network-handler/snapshot.ts | 38 +- packages/legacy-compat/src/utils.ts | 8 +- packages/legacy-compat/tsconfig.json | 67 +- packages/legacy-compat/vite.config.mjs | 12 + packages/model/.eslintrc.cjs | 39 - packages/model/.npmignore | 40 - packages/model/addon-main.cjs | 5 + packages/model/addon-main.js | 94 - packages/model/babel.config.js | 13 - packages/model/babel.config.mjs | 12 + packages/model/blueprints/model-test/index.js | 26 +- .../qunit-files/__root__/__path__/__test__.js | 9 +- packages/model/blueprints/model/index.js | 23 +- packages/model/eslint.config.mjs | 34 + packages/model/package.json | 58 +- packages/model/rollup.config.mjs | 50 - packages/model/src/-private.ts | 7 +- packages/model/src/-private/attr.ts | 3 +- packages/model/src/-private/belongs-to.ts | 5 +- .../-private/debug/assert-polymorphic-type.ts | 9 +- packages/model/src/-private/errors.ts | 7 +- packages/model/src/-private/has-many.ts | 5 +- packages/model/src/-private/hooks.ts | 2 +- .../-private/legacy-relationships-support.ts | 111 +- packages/model/src/-private/many-array.ts | 38 +- packages/model/src/-private/model-methods.ts | 5 +- packages/model/src/-private/model.ts | 51 +- .../model/src/-private/model.type-test.ts | 4 +- packages/model/src/-private/notify-changes.ts | 6 +- .../model/src/-private/promise-belongs-to.ts | 7 +- .../model/src/-private/promise-many-array.ts | 9 +- packages/model/src/-private/record-state.ts | 12 +- .../src/-private/references/belongs-to.ts | 7 +- .../model/src/-private/references/has-many.ts | 14 +- .../model/src/-private/schema-provider.ts | 15 +- packages/model/src/index.ts | 4 +- packages/model/src/migration-support.ts | 9 +- packages/model/tsconfig.json | 71 +- packages/model/vite.config.mjs | 25 + packages/private-build-infra/.npmignore | 19 - packages/private-build-infra/CHANGELOG.md | 30 - packages/private-build-infra/README.md | 11 - .../ember-data-logo-dark.svg | 12 - .../ember-data-logo-light.svg | 12 - .../addon-build-config-for-data-package.js | 178 - .../src/create-version-module.js | 40 - .../private-build-infra/src/debug-macros.js | 73 - packages/private-build-infra/src/debugging.js | 16 - packages/private-build-infra/src/packages.js | 58 - .../src/stripped-build-plugins.js | 26 - .../index.js | 61 - .../babel-plugin-transform-debug-env/index.js | 59 - .../transforms/babel-plugin-transform-ext.js | 16 - .../index.js | 63 - .../babel-plugin-transform-packages/index.js | 65 - .../src/utilities/detect-module.js | 88 - .../src/utilities/edition-detector.js | 18 - .../extend-from-application-entity.js | 58 - .../src/utilities/get-env.js | 12 - .../utilities/module-prefix-for-project.js | 5 - .../src/utilities/require-module.js | 36 - .../src/utilities/test-framework-detector.js | 43 - .../src/v2-babel-build-pack.js | 37 - .../virtual-packages/canary-features.d.ts | 1 - .../virtual-packages/debugging.d.ts | 9 - .../virtual-packages/env.d.ts | 3 - .../virtual-packages/packages.d.ts | 11 - .../virtual-packages/packages.js | 11 - packages/request-utils/.eslintrc.cjs | 26 - packages/request-utils/addon-main.cjs | 5 + packages/request-utils/addon-main.js | 19 - packages/request-utils/babel.config.json | 8 - packages/request-utils/babel.config.mjs | 11 + packages/request-utils/eslint.config.mjs | 22 + packages/request-utils/package.json | 48 +- packages/request-utils/rollup.config.mjs | 33 - packages/request-utils/src/index.ts | 3 +- packages/request-utils/tsconfig.json | 27 +- packages/request-utils/vite.config.mjs | 12 + packages/request/.eslintrc.cjs | 26 - packages/request/addon-main.cjs | 5 + packages/request/addon-main.js | 94 - packages/request/babel.config.js | 12 - packages/request/babel.config.mjs | 11 + packages/request/eslint.config.mjs | 22 + packages/request/package.json | 54 +- packages/request/rollup.config.mjs | 33 - packages/request/src/-private/debug.ts | 16 +- packages/request/src/-private/manager.ts | 10 +- .../request/src/-private/promise-cache.ts | 6 +- packages/request/src/-private/utils.ts | 3 +- packages/request/tsconfig.json | 26 +- packages/request/vite.config.mjs | 12 + packages/rest/.eslintrc.cjs | 26 - packages/rest/addon-main.cjs | 5 + packages/rest/addon-main.js | 19 - packages/rest/babel.config.json | 8 - packages/rest/babel.config.mjs | 11 + packages/rest/eslint.config.mjs | 22 + packages/rest/package.json | 36 +- packages/rest/rollup.config.mjs | 33 - .../rest/src/-private/builders/save-record.ts | 2 +- packages/rest/tsconfig.json | 51 +- packages/rest/vite.config.mjs | 12 + packages/schema-record/.eslintrc.cjs | 26 - packages/schema-record/.npmignore | 40 - packages/schema-record/addon-main.cjs | 5 + packages/schema-record/addon-main.js | 94 - packages/schema-record/babel.config.js | 13 - packages/schema-record/babel.config.mjs | 11 + packages/schema-record/eslint.config.mjs | 22 + packages/schema-record/package.json | 48 +- packages/schema-record/rollup.config.mjs | 33 - packages/schema-record/src/-base-fields.ts | 78 - packages/schema-record/src/hooks.ts | 3 +- packages/schema-record/src/managed-array.ts | 19 +- packages/schema-record/src/managed-object.ts | 14 +- packages/schema-record/src/record.ts | 66 +- packages/schema-record/src/schema.ts | 88 +- packages/schema-record/src/symbols.ts | 45 + packages/schema-record/tsconfig.json | 43 +- packages/schema-record/vite.config.mjs | 13 + packages/schema/.npmignore | 1 - packages/schema/package.json | 10 +- packages/schema/tsconfig.json | 3 +- packages/serializer/.eslintrc.cjs | 34 - packages/serializer/.npmignore | 40 - packages/serializer/addon-main.cjs | 5 + packages/serializer/addon-main.js | 94 - packages/serializer/babel.config.js | 13 - packages/serializer/babel.config.mjs | 12 + .../blueprints/serializer-test/index.js | 20 +- .../qunit-files/__root__/__path__/__test__.js | 17 +- .../serializer/blueprints/serializer/index.js | 76 +- .../blueprints/transform-test/index.js | 20 +- .../qunit-files/__root__/__path__/__test__.js | 7 +- .../serializer/blueprints/transform/index.js | 18 +- packages/serializer/eslint.config.mjs | 40 + packages/serializer/package.json | 53 +- packages/serializer/rollup.config.mjs | 42 - packages/serializer/src/-private.ts | 12 - .../src/-private/embedded-records-mixin.js | 2 +- .../src/-private/transforms/boolean.ts | 2 +- .../src/-private/transforms/date.ts | 2 +- .../src/-private/transforms/number.ts | 2 +- .../src/-private/transforms/string.ts | 2 +- .../src/-private/transforms/transform.ts | 12 +- packages/serializer/src/index.ts | 4 +- packages/serializer/src/json-api.js | 3 +- packages/serializer/src/json.js | 6 +- packages/serializer/src/rest.js | 7 +- packages/serializer/src/transform.ts | 6 +- packages/serializer/tsconfig.json | 50 +- packages/serializer/vite.config.mjs | 26 + packages/store/.eslintrc.cjs | 26 - packages/store/.npmignore | 37 - packages/store/addon-main.cjs | 5 + packages/store/addon-main.js | 94 - packages/store/babel.config.js | 13 - packages/store/babel.config.mjs | 12 + packages/store/eslint.config.mjs | 22 + packages/store/package.json | 52 +- packages/store/rollup.config.mjs | 53 - packages/store/src/-private.ts | 32 +- packages/store/src/-private/cache-handler.ts | 7 +- .../store/src/-private/caches/cache-utils.ts | 17 +- .../src/-private/caches/identifier-cache.ts | 54 +- .../src/-private/caches/instance-cache.ts | 33 +- packages/store/src/-private/document.ts | 25 +- .../legacy-model-support/record-reference.ts | 7 +- .../legacy-model-support/shim-model-class.ts | 24 +- .../managers/cache-capabilities-manager.ts | 7 +- .../src/-private/managers/cache-manager.ts | 5 +- .../-private/managers/notification-manager.ts | 9 +- .../-private/managers/record-array-manager.ts | 14 +- .../src/-private/network/request-cache.ts | 12 +- .../record-arrays/identifier-array.ts | 48 +- packages/store/src/-private/store-service.ts | 89 +- .../src/-private/store-service.type-test.ts | 5 +- .../store/src/-private/utils/coerce-id.ts | 7 +- .../src/-private/utils/construct-resource.ts | 30 +- .../-private/utils/identifier-debug-consts.ts | 7 - .../src/-private/utils/is-non-empty-string.ts | 2 +- .../-private/utils/normalize-model-name.ts | 2 +- ...apper.ts => cache-capabilities-manager.ts} | 7 +- packages/store/src/-types/q/cache.ts | 64 - packages/store/src/-types/q/ds-model.ts | 20 +- packages/store/src/-types/q/identifier.ts | 3 - .../src/-types/q/record-data-json-api.ts | 2 +- packages/store/src/-types/q/schema-service.ts | 28 +- packages/store/src/index.ts | 4 +- packages/store/src/types.ts | 4 + packages/store/tsconfig.json | 37 +- packages/store/vite.config.mjs | 12 + packages/tracking/.eslintrc.cjs | 31 - packages/tracking/addon-main.cjs | 95 +- packages/tracking/babel.config.js | 13 - packages/tracking/babel.config.mjs | 11 + packages/tracking/eslint.config.mjs | 22 + packages/tracking/package.json | 49 +- packages/tracking/rollup.config.mjs | 40 - packages/tracking/src/-private.ts | 30 +- packages/tracking/src/index.ts | 3 +- packages/tracking/tsconfig.json | 32 +- packages/tracking/vite.config.mjs | 17 + .../unpublished-eslint-rules/package.json | 8 +- .../unpublished-test-infra/addon-main.cjs | 13 + .../addon-test-support/deep-copy.js | 53 - .../addon-test-support/public-props.js | 11 - .../addon-test-support/version.d.ts | 5 - .../unpublished-test-infra/babel.config.mjs | 11 + .../unpublished-test-infra/ember-cli-build.js | 34 - packages/unpublished-test-infra/index.js | 17 - packages/unpublished-test-infra/package.json | 135 +- .../src/node-test-helpers/fixture.js | 9 - .../generate-fake-package-manifest.js | 16 - .../setup-test-environment.js | 26 - .../asserts/assert-all-deprecations.ts | 6 +- .../test-support}/asserts/assert-assertion.ts | 0 .../test-support}/asserts/assert-better.ts | 0 .../asserts/assert-deprecation.ts | 0 .../asserts/assert-notification.ts | 2 +- .../test-support}/asserts/assert-warning.ts | 0 .../test-support}/asserts/check-matcher.ts | 0 .../test-support}/asserts/index.ts | 3 +- .../asserts/utils/is-thenable.ts | 0 .../test-support}/deprecated-test.ts | 0 .../test-support}/test-helpers.ts | 0 .../test-support}/test-in-debug.ts | 0 .../test-support}/test.ts | 2 +- .../test-support}/todo.js | 0 .../src/test-support/version.ts | 12 + packages/unpublished-test-infra/testem.js | 21 - .../{src => }/testem/custom-dot-reporter.js | 0 .../{src => }/testem/testem.js | 0 packages/unpublished-test-infra/tsconfig.json | 57 +- .../unpublished-test-infra/vite.config.mjs | 18 + pnpm-lock.yaml | 6767 ++++++++--------- .../core/publish/steps/generate-tarballs.ts | 4 + release/strategy.json | 11 - release/tsconfig.json | 1 + scripts/downlevel-addons.mjs | 157 + scripts/fix-dep-configuration.mjs | 198 + scripts/uplevel-adons.mjs | 76 + scripts/validate-deps.js | 21 +- tests/blueprints/.eslintrc.cjs | 32 - tests/blueprints/eslint.config.mjs | 32 + .../{rfc232-addon.js => addon-default.js} | 7 +- .../adapter-test/application-default.js | 7 +- .../fixtures/adapter-test/foo-default.js | 7 +- .../fixtures/adapter-test/rfc232.js | 13 - .../fixtures/addon/package/package.json | 2 +- .../fixtures/app/package/package.json | 2 +- .../{rfc232-addon.js => addon-default.js} | 9 +- .../fixtures/model-test/comment-default.js | 9 +- .../fixtures/model-test/foo-default.js | 9 +- .../fixtures/model-test/post-default.js | 9 +- .../blueprints/fixtures/model-test/rfc232.js | 14 - .../fixtures/serializer-test/addon-default.js | 23 + .../serializer-test/application-default.js | 17 +- .../fixtures/serializer-test/foo-default.js | 17 +- .../fixtures/serializer-test/rfc232-addon.js | 24 - .../fixtures/serializer-test/rfc232.js | 24 - .../{rfc232-addon.js => addon-default.js} | 7 +- .../fixtures/transform-test/default.js | 7 +- .../fixtures/transform-test/rfc232.js | 13 - tests/blueprints/package.json | 15 +- tests/blueprints/tests/adapter-test.js | 97 +- tests/blueprints/tests/model-test.js | 90 +- tests/blueprints/tests/serializer-test.js | 116 +- tests/blueprints/tests/transform-test.js | 92 +- tests/builders/.eslintrc.cjs | 36 - tests/builders/app/services/store.ts | 3 +- tests/builders/ember-cli-build.js | 40 +- tests/builders/eslint.config.mjs | 26 + tests/builders/package.json | 15 +- .../tests/integration/create-record-test.ts | 20 +- .../tests/integration/delete-record-test.ts | 20 +- .../tests/integration/update-record-test.ts | 20 +- .../tests/unit/parse-cache-control-test.ts | 4 +- tests/builders/tsconfig.json | 91 +- tests/codemods/.eslintrc.cjs | 20 - tests/codemods/eslint.config.mjs | 19 + tests/codemods/package.json | 13 +- tests/codemods/tsconfig.json | 1 + tests/docs/.eslintrc.cjs | 36 - tests/docs/eslint.config.mjs | 23 + tests/docs/fixtures/expected.js | 19 +- tests/docs/package.json | 6 +- tests/ember-data__adapter/.eslintrc.cjs | 37 - .../ember-data__adapter/app/services/store.ts | 3 +- tests/ember-data__adapter/ember-cli-build.js | 29 +- tests/ember-data__adapter/eslint.config.mjs | 36 + tests/ember-data__adapter/package.json | 14 +- .../tests/integration/belongs-to-test.js | 15 +- .../tests/integration/coalescing-test.js | 9 +- .../tests/integration/has-many-test.js | 21 +- .../tests/integration/queries-test.js | 5 +- .../ember-data__adapter/tests/test-helper.js | 2 +- tests/ember-data__adapter/tsconfig.json | 86 +- tests/ember-data__graph/.eslintrc.cjs | 36 - .../app/config/environment.d.ts | 1 + tests/ember-data__graph/app/services/store.ts | 3 +- tests/ember-data__graph/ember-cli-build.js | 56 +- tests/ember-data__graph/eslint.config.mjs | 26 + tests/ember-data__graph/package.json | 15 +- .../integration/graph/duplicate-data-test.ts | 187 +- .../integration/graph/edge-removal/helpers.ts | 2 +- .../integration/graph/edge-removal/setup.ts | 7 +- .../tests/integration/graph/edge-test.ts | 2 +- .../graph/polymorphism/implicit-keys-test.ts | 2 +- .../tests/integration/graph/unload-test.ts | 3 +- .../tests/{test-helper.js => test-helper.ts} | 12 +- tests/ember-data__graph/tsconfig.json | 92 +- tests/ember-data__json-api/.eslintrc.cjs | 36 - tests/ember-data__json-api/ember-cli-build.js | 45 +- tests/ember-data__json-api/eslint.config.mjs | 28 + tests/ember-data__json-api/package.json | 15 +- .../cache/collection-data-documents-test.ts | 192 +- .../integration/cache/error-documents-test.ts | 2 +- .../integration/cache/meta-documents-test.ts | 141 +- .../cache/resource-data-documents-test.ts | 253 +- .../tests/integration/serialize-test.ts | 13 +- tests/ember-data__json-api/tsconfig.json | 85 +- tests/ember-data__model/.eslintrc.cjs | 36 - tests/ember-data__model/ember-cli-build.js | 41 +- tests/ember-data__model/eslint.config.mjs | 36 + tests/ember-data__model/package.json | 15 +- .../tests/integration/model-for-test.ts | 14 +- tests/ember-data__model/tsconfig.json | 76 +- tests/ember-data__request/.eslintrc.cjs | 37 - tests/ember-data__request/ember-cli-build.js | 30 +- tests/ember-data__request/eslint.config.mjs | 36 + tests/ember-data__request/package.json | 15 +- .../tests/integration/abort-test.ts | 27 +- .../tests/integration/custom-abort-test.ts | 19 +- .../integration/error-propagation-test.ts | 21 +- .../integration/graceful-dev-errors-test.ts | 10 +- .../graceful-dev-handler-errors-test.ts | 10 +- .../tests/integration/immutability-test.ts | 10 +- .../integration/response-currying-test.ts | 28 +- .../tests/integration/response-test.ts | 6 +- .../tests/integration/setup-test.ts | 12 +- .../integration/stateful-handler-test.ts | 6 +- .../tests/integration/streams-test.ts | 30 +- tests/ember-data__request/tsconfig.json | 47 +- tests/ember-data__serializer/.eslintrc.cjs | 36 - .../app/services/store.ts | 3 +- .../ember-data__serializer/ember-cli-build.js | 32 +- .../ember-data__serializer/eslint.config.mjs | 38 + tests/ember-data__serializer/package.json | 11 +- tests/ember-data__serializer/testem.js | 3 +- .../tests/integration/push-payload-test.js | 2 +- .../tests/test-helper.js | 2 +- tests/ember-data__serializer/tsconfig.json | 81 +- tests/embroider-basic-compat/.eslintrc.cjs | 43 - .../app/adapters/application.ts | 2 - .../embroider-basic-compat/app/models/user.ts | 1 - .../embroider-basic-compat/ember-cli-build.js | 30 +- .../embroider-basic-compat/eslint.config.mjs | 32 + tests/embroider-basic-compat/package.json | 74 +- tests/embroider-basic-compat/testem.js | 3 +- tests/embroider-basic-compat/tsconfig.json | 91 +- tests/example-json-api/.eslintrc.cjs | 45 - .../app/components/book-list.ts | 2 +- .../app/components/infinite-books.ts | 2 +- .../app/components/legacy-infinite-books.ts | 10 +- .../app/routes/application.ts | 2 +- tests/example-json-api/ember-cli-build.js | 25 +- tests/example-json-api/eslint.config.mjs | 33 + tests/example-json-api/package.json | 11 +- tests/example-json-api/server/index.js | 2 - tests/example-json-api/testem.js | 3 +- tests/example-json-api/tests/test-helper.js | 2 +- tests/example-json-api/tsconfig.json | 76 +- tests/fastboot/.ember-cli | 9 - tests/fastboot/.eslintrc.cjs | 45 - tests/fastboot/.gitignore | 25 - tests/fastboot/app/adapters/application.ts | 1 - .../app/models/{person.js => person.ts} | 10 +- tests/fastboot/app/routes/index.js | 14 - tests/fastboot/app/routes/index.ts | 20 + .../app/services/{store.js => store.ts} | 0 tests/fastboot/ember-cli-build.js | 29 +- tests/fastboot/eslint.config.mjs | 44 + tests/fastboot/package.json | 35 +- tests/fastboot/testem.js | 3 +- tests/fastboot/tsconfig.json | 61 +- .../ember-cli-build.js | 34 +- tests/full-data-asset-size-app/package.json | 9 +- tests/main/.eslintrc.cjs | 77 - tests/main/config/ember-try.js | 4 +- tests/main/config/environment.js | 1 - tests/main/ember-cli-build.js | 43 +- tests/main/eslint.config.mjs | 92 + tests/main/package.json | 15 +- tests/main/testem.js | 2 +- .../tests/acceptance/record-array-test.js | 2 +- tests/main/tests/helpers/accessors.ts | 5 +- .../adapter/build-url-mixin-test.js | 3 +- .../tests/integration/adapter/find-test.js | 4 +- .../integration/adapter/rest-adapter-test.js | 25 +- .../adapter/rest-adapter/-ajax-mocks.js | 6 +- .../adapter/rest-adapter/find-record-test.js | 4 +- .../integration/adapter/store-adapter-test.js | 20 +- .../cache-handler/lifetimes-test.ts | 9 +- .../cache-handler/store-package-setup-test.ts | 61 +- .../tests/integration/debug-adapter-test.js | 31 +- .../integration/identifiers/cache-test.ts | 2 +- .../identifiers/configuration-test.ts | 5 +- .../identifiers/polymorphic-scenarios-test.ts | 2 - .../integration/identifiers/scenarios-test.ts | 5 +- .../legacy-compat/find-record-test.ts | 6 +- .../integration/record-array-manager-test.js | 2 +- .../tests/integration/record-array-test.js | 6 +- .../adapter-populated-record-array-test.js | 6 +- ....ts => cache-capabilities-manager-test.ts} | 83 +- .../record-data/record-data-errors-test.ts | 37 +- .../record-data/record-data-state-test.ts | 22 +- .../record-data/record-data-test.ts | 27 +- .../tests/integration/records/load-test.js | 2 +- .../integration/records/rematerialize-test.js | 7 +- .../references/autotracking-test.js | 2 +- .../relationships/belongs-to-test.js | 8 +- .../collection/mutating-has-many-test.ts | 2 +- .../relationships/has-many-test.js | 20 +- .../inverse-relationships-test.js | 2 +- .../relationships/json-api-links-test.js | 45 +- .../embedded-records-mixin-test.js | 2 +- .../serializers/json-serializer-test.js | 8 +- tests/main/tests/integration/snapshot-test.js | 20 +- .../tests/integration/store-extension-test.ts | 7 +- tests/main/tests/integration/store-test.js | 9 +- .../integration/store/adapter-for-test.js | 2 +- tests/main/tests/test-helper.js | 4 +- tests/main/tests/unit/adapter-errors-test.js | 58 +- .../custom-class-model-test.ts | 31 +- tests/main/tests/unit/debug-test.js | 4 +- .../unit/legacy-compat/formatted-id-test.js | 16 +- .../unit/legacy-compat/formatted-type-test.js | 10 +- .../unit/legacy-compat/is-equiv-id-test.js | 26 +- .../unit/legacy-compat/is-equiv-type-test.js | 20 +- tests/main/tests/unit/model-test.js | 2 +- .../unit/model/relationships/has-many-test.js | 6 +- .../model/relationships/record-array-test.js | 2 +- .../adapter-populated-record-array-test.js | 16 +- .../unit/record-arrays/record-array-test.js | 20 +- .../polymorphic-relationship-payloads-test.js | 9 +- tests/main/tsconfig.json | 95 +- tests/performance/.eslintrc.cjs | 31 - tests/performance/ember-cli-build.js | 2 - tests/performance/eslint.config.mjs | 24 + tests/performance/fixtures/index.js | 1 - tests/performance/package.json | 7 +- tests/schema/output/.gitkeep | 0 tests/warp-drive__ember/.eslintrc.cjs | 37 - tests/warp-drive__ember/app/services/store.ts | 2 +- tests/warp-drive__ember/ember-cli-build.js | 32 +- tests/warp-drive__ember/eslint.config.mjs | 45 + tests/warp-drive__ember/package.json | 17 +- .../integration/await-component-test.gts | 40 +- .../integration/get-promise-state-test.gts | 111 +- .../integration/get-request-state-test.gts | 66 +- .../integration/request-component-test.gts | 129 +- tests/warp-drive__ember/tests/test-helper.ts | 2 +- tests/warp-drive__ember/tsconfig.json | 99 +- tests/warp-drive__schema-record/.eslintrc.cjs | 36 - .../app/services/store.ts | 5 +- .../ember-cli-build.js | 31 +- .../eslint.config.mjs | 28 + tests/warp-drive__schema-record/package.json | 15 +- tests/warp-drive__schema-record/testem.js | 3 +- .../tests/-utils/normalize-payload.ts | 2 +- .../tests/-utils/reactive-context.ts | 4 +- .../tests/legacy/mode-test.ts | 13 +- .../legacy/reactivity/basic-fields-test.ts | 2 +- .../tests/legacy/reads/basic-fields-test.ts | 6 +- .../tests/reactivity/array-test.ts | 3 +- .../tests/reactivity/basic-fields-test.ts | 4 +- .../tests/reactivity/derivation-test.ts | 7 +- .../tests/reactivity/resource-test.ts | 3 +- .../tests/reads/array-test.ts | 11 +- .../tests/reads/basic-fields-test.ts | 8 +- .../tests/reads/derivation-test.ts | 2 - .../tests/reads/object-test.ts | 11 +- .../tests/reads/resource-test.ts | 3 +- .../tests/test-helper.js | 2 +- .../tests/writes/array-test.ts | 48 +- .../tests/writes/object-test.ts | 26 +- tests/warp-drive__schema-record/tsconfig.json | 83 +- tests/warp-drive__schema/package.json | 6 +- tsconfig.json | 27 + turbo.json | 134 +- 759 files changed, 13553 insertions(+), 13235 deletions(-) create mode 100644 config/babel/fix-mjs.cjs delete mode 100644 config/eslint/base.cjs create mode 100644 config/eslint/browser.js delete mode 100644 config/eslint/diagnostic.cjs create mode 100644 config/eslint/diagnostic.js create mode 100644 config/eslint/gts.js delete mode 100644 config/eslint/ignore.cjs create mode 100644 config/eslint/ignore.js rename config/eslint/{imports.cjs => imports.js} (81%) rename config/eslint/{isolation.cjs => isolation.js} (96%) delete mode 100644 config/eslint/mocha.cjs create mode 100644 config/eslint/mocha.js delete mode 100644 config/eslint/node.cjs create mode 100644 config/eslint/node.js delete mode 100644 config/eslint/parser.cjs create mode 100644 config/eslint/parser.js delete mode 100644 config/eslint/qunit.cjs create mode 100644 config/eslint/qunit.js delete mode 100644 config/eslint/typescript.cjs create mode 100644 config/eslint/typescript.js create mode 100644 config/rollup/gjs.js create mode 100644 config/rollup/keep-assets.js create mode 100644 config/vite/compile-types-plugin.js create mode 100644 config/vite/config.js create mode 100644 config/vite/fix-module-output-plugin.js delete mode 100644 packages/-ember-data/.eslintrc.cjs delete mode 100644 packages/-ember-data/.npmignore create mode 100644 packages/-ember-data/addon-main.cjs delete mode 100644 packages/-ember-data/addon/version.d.ts create mode 100644 packages/-ember-data/babel.config.mjs create mode 100644 packages/-ember-data/eslint.config.mjs delete mode 100644 packages/-ember-data/index.js rename packages/-ember-data/{addon => src}/-private/core.ts (91%) rename packages/-ember-data/{addon => src}/-private/index.ts (100%) rename packages/-ember-data/{addon => src}/adapter.ts (100%) rename packages/-ember-data/{addon => src}/adapters/errors.ts (100%) rename packages/-ember-data/{addon => src}/adapters/json-api.ts (100%) rename packages/-ember-data/{addon => src}/adapters/rest.ts (100%) rename packages/-ember-data/{addon => src}/attr.ts (100%) rename packages/-ember-data/{addon => src}/index.ts (97%) rename packages/-ember-data/{addon => src}/model.ts (100%) rename packages/-ember-data/{addon => src}/relationships.ts (100%) rename packages/-ember-data/{addon => src}/serializer.ts (100%) rename packages/-ember-data/{addon => src}/serializers/embedded-records-mixin.ts (100%) rename packages/-ember-data/{addon => src}/serializers/json-api.ts (100%) rename packages/-ember-data/{addon => src}/serializers/json.ts (100%) rename packages/-ember-data/{addon => src}/serializers/rest.ts (100%) rename packages/-ember-data/{addon => src}/setup-container.ts (100%) rename packages/-ember-data/{addon => src}/store.ts (84%) rename packages/-ember-data/{addon-test-support/index.js => src/test-support/index.ts} (62%) rename packages/-ember-data/{addon => src}/transform.ts (100%) create mode 100644 packages/-ember-data/src/version.ts create mode 100644 packages/-ember-data/vite.config.mjs delete mode 100644 packages/active-record/.eslintrc.cjs create mode 100644 packages/active-record/addon-main.cjs delete mode 100644 packages/active-record/addon-main.js delete mode 100644 packages/active-record/babel.config.json create mode 100644 packages/active-record/babel.config.mjs create mode 100644 packages/active-record/eslint.config.mjs delete mode 100644 packages/active-record/rollup.config.mjs create mode 100644 packages/active-record/vite.config.mjs delete mode 100644 packages/adapter/.eslintrc.cjs create mode 100644 packages/adapter/addon-main.cjs delete mode 100644 packages/adapter/addon-main.js delete mode 100644 packages/adapter/babel.config.js create mode 100644 packages/adapter/babel.config.mjs create mode 100644 packages/adapter/eslint.config.mjs delete mode 100644 packages/adapter/rollup.config.mjs create mode 100644 packages/adapter/vite.config.mjs rename packages/{private-build-infra => build-config}/LICENSE.md (87%) create mode 100644 packages/build-config/NCC-1701-a-blue.svg create mode 100644 packages/build-config/NCC-1701-a.svg create mode 100644 packages/build-config/README.md create mode 100644 packages/build-config/babel.config.mjs create mode 100644 packages/build-config/cjs-src/addon-shim.js create mode 100644 packages/build-config/cjs-src/transforms/babel-plugin-transform-asserts.js rename packages/{private-build-infra/src/transforms/babel-plugin-transform-deprecations/index.js => build-config/cjs-src/transforms/babel-plugin-transform-deprecations.js} (83%) rename packages/{private-build-infra/src/transforms/babel-plugin-transform-features/index.js => build-config/cjs-src/transforms/babel-plugin-transform-features.js} (80%) rename packages/{private-build-infra/src/transforms/babel-plugin-transform-logging/index.js => build-config/cjs-src/transforms/babel-plugin-transform-logging.js} (83%) create mode 100644 packages/build-config/package.json rename packages/{private-build-infra/src/deprecations.js => build-config/src/-private/utils/deprecations.ts} (52%) rename packages/{private-build-infra/src/features.js => build-config/src/-private/utils/features.ts} (63%) create mode 100644 packages/build-config/src/-private/utils/get-env.ts create mode 100644 packages/build-config/src/babel-macros.ts rename packages/{private-build-infra/virtual-packages/canary-features.js => build-config/src/canary-features.ts} (94%) rename packages/{private-build-infra/virtual-packages/debugging.js => build-config/src/debugging.ts} (70%) rename packages/{private-build-infra/virtual-packages/deprecations.js => build-config/src/deprecation-versions.ts} (98%) create mode 100644 packages/build-config/src/deprecations.ts create mode 100644 packages/build-config/src/env.ts create mode 100644 packages/build-config/src/index.ts create mode 100644 packages/build-config/src/macros.ts create mode 100644 packages/build-config/src/validate-exports.type-test.ts create mode 100644 packages/build-config/tsconfig.json create mode 100644 packages/build-config/vite.config-cjs.mjs create mode 100644 packages/build-config/vite.config.mjs delete mode 100644 packages/codemods/.eslintrc.cjs create mode 100644 packages/codemods/eslint.config.mjs delete mode 100644 packages/core-types/.eslintrc.cjs delete mode 100644 packages/core-types/babel.config.js create mode 100644 packages/core-types/babel.config.mjs create mode 100644 packages/core-types/eslint.config.mjs delete mode 100644 packages/core-types/rollup.config.mjs create mode 100644 packages/core-types/src/-private.ts delete mode 100644 packages/core-types/src/schema.ts create mode 100644 packages/core-types/src/schema/fields.ts rename packages/core-types/src/spec/{raw.ts => json-api-raw.ts} (82%) create mode 100644 packages/core-types/vite.config.mjs delete mode 100644 packages/debug/.eslintrc.cjs delete mode 100644 packages/debug/.npmignore create mode 100644 packages/debug/addon-main.cjs delete mode 100644 packages/debug/app/data-adapter.js create mode 100644 packages/debug/babel.config.mjs create mode 100644 packages/debug/eslint.config.mjs delete mode 100644 packages/debug/index.js rename packages/debug/{addon => src}/data-adapter.ts (94%) rename packages/debug/{addon => src}/index.ts (100%) create mode 100644 packages/debug/tsconfig.json create mode 100644 packages/debug/vite.config.mjs delete mode 100644 packages/diagnostic/.eslintrc.cjs delete mode 100644 packages/diagnostic/.npmignore delete mode 100644 packages/diagnostic/babel.config.json create mode 100644 packages/diagnostic/babel.config.mjs create mode 100644 packages/diagnostic/eslint.config.mjs delete mode 100644 packages/diagnostic/rollup.config.mjs create mode 100644 packages/diagnostic/vite.config.mjs delete mode 100644 packages/ember/.eslintrc.cjs rename packages/ember/{babel.config.js => babel.config.mjs} (81%) create mode 100644 packages/ember/eslint.config.mjs delete mode 100644 packages/ember/rollup.config.mjs create mode 100644 packages/ember/vite.config.mjs create mode 100644 packages/eslint-plugin-ember-data/eslint.config.mjs delete mode 100644 packages/graph/.eslintrc.cjs delete mode 100644 packages/graph/.npmignore delete mode 100644 packages/graph/babel.config.js create mode 100644 packages/graph/babel.config.mjs create mode 100644 packages/graph/eslint.config.mjs delete mode 100644 packages/graph/rollup.config.mjs create mode 100644 packages/graph/vite.config.mjs delete mode 100644 packages/holodeck/.eslintrc.cjs delete mode 100644 packages/holodeck/babel.config.json create mode 100644 packages/holodeck/babel.config.mjs create mode 100644 packages/holodeck/eslint.config.mjs delete mode 100644 packages/holodeck/rollup.config.mjs rename packages/holodeck/{client => src}/index.ts (100%) rename packages/holodeck/{client => src}/mock.ts (100%) create mode 100644 packages/holodeck/vite.config.mjs delete mode 100644 packages/json-api/.eslintrc.cjs delete mode 100644 packages/json-api/.npmignore create mode 100644 packages/json-api/addon-main.cjs delete mode 100644 packages/json-api/addon-main.js delete mode 100644 packages/json-api/babel.config.js create mode 100644 packages/json-api/babel.config.mjs create mode 100644 packages/json-api/eslint.config.mjs delete mode 100644 packages/json-api/rollup.config.mjs create mode 100644 packages/json-api/vite.config.mjs delete mode 100644 packages/legacy-compat/.eslintrc.cjs create mode 100644 packages/legacy-compat/addon-main.cjs delete mode 100644 packages/legacy-compat/addon-main.js delete mode 100644 packages/legacy-compat/babel.config.js create mode 100644 packages/legacy-compat/babel.config.mjs create mode 100644 packages/legacy-compat/eslint.config.mjs delete mode 100644 packages/legacy-compat/rollup.config.mjs create mode 100644 packages/legacy-compat/vite.config.mjs delete mode 100644 packages/model/.eslintrc.cjs delete mode 100644 packages/model/.npmignore create mode 100644 packages/model/addon-main.cjs delete mode 100644 packages/model/addon-main.js delete mode 100644 packages/model/babel.config.js create mode 100644 packages/model/babel.config.mjs create mode 100644 packages/model/eslint.config.mjs delete mode 100644 packages/model/rollup.config.mjs create mode 100644 packages/model/vite.config.mjs delete mode 100644 packages/private-build-infra/.npmignore delete mode 100644 packages/private-build-infra/CHANGELOG.md delete mode 100644 packages/private-build-infra/README.md delete mode 100644 packages/private-build-infra/ember-data-logo-dark.svg delete mode 100644 packages/private-build-infra/ember-data-logo-light.svg delete mode 100644 packages/private-build-infra/src/addon-build-config-for-data-package.js delete mode 100644 packages/private-build-infra/src/create-version-module.js delete mode 100644 packages/private-build-infra/src/debug-macros.js delete mode 100644 packages/private-build-infra/src/debugging.js delete mode 100644 packages/private-build-infra/src/packages.js delete mode 100644 packages/private-build-infra/src/stripped-build-plugins.js delete mode 100644 packages/private-build-infra/src/transforms/babel-plugin-convert-existence-checks-to-macros/index.js delete mode 100644 packages/private-build-infra/src/transforms/babel-plugin-transform-debug-env/index.js delete mode 100644 packages/private-build-infra/src/transforms/babel-plugin-transform-ext.js delete mode 100644 packages/private-build-infra/src/transforms/babel-plugin-transform-has-debug-package/index.js delete mode 100644 packages/private-build-infra/src/transforms/babel-plugin-transform-packages/index.js delete mode 100644 packages/private-build-infra/src/utilities/detect-module.js delete mode 100644 packages/private-build-infra/src/utilities/edition-detector.js delete mode 100644 packages/private-build-infra/src/utilities/extend-from-application-entity.js delete mode 100644 packages/private-build-infra/src/utilities/get-env.js delete mode 100644 packages/private-build-infra/src/utilities/module-prefix-for-project.js delete mode 100644 packages/private-build-infra/src/utilities/require-module.js delete mode 100644 packages/private-build-infra/src/utilities/test-framework-detector.js delete mode 100644 packages/private-build-infra/src/v2-babel-build-pack.js delete mode 100644 packages/private-build-infra/virtual-packages/canary-features.d.ts delete mode 100644 packages/private-build-infra/virtual-packages/debugging.d.ts delete mode 100644 packages/private-build-infra/virtual-packages/env.d.ts delete mode 100644 packages/private-build-infra/virtual-packages/packages.d.ts delete mode 100644 packages/private-build-infra/virtual-packages/packages.js delete mode 100644 packages/request-utils/.eslintrc.cjs create mode 100644 packages/request-utils/addon-main.cjs delete mode 100644 packages/request-utils/addon-main.js delete mode 100644 packages/request-utils/babel.config.json create mode 100644 packages/request-utils/babel.config.mjs create mode 100644 packages/request-utils/eslint.config.mjs delete mode 100644 packages/request-utils/rollup.config.mjs create mode 100644 packages/request-utils/vite.config.mjs delete mode 100644 packages/request/.eslintrc.cjs create mode 100644 packages/request/addon-main.cjs delete mode 100644 packages/request/addon-main.js delete mode 100644 packages/request/babel.config.js create mode 100644 packages/request/babel.config.mjs create mode 100644 packages/request/eslint.config.mjs delete mode 100644 packages/request/rollup.config.mjs create mode 100644 packages/request/vite.config.mjs delete mode 100644 packages/rest/.eslintrc.cjs create mode 100644 packages/rest/addon-main.cjs delete mode 100644 packages/rest/addon-main.js delete mode 100644 packages/rest/babel.config.json create mode 100644 packages/rest/babel.config.mjs create mode 100644 packages/rest/eslint.config.mjs delete mode 100644 packages/rest/rollup.config.mjs create mode 100644 packages/rest/vite.config.mjs delete mode 100644 packages/schema-record/.eslintrc.cjs delete mode 100644 packages/schema-record/.npmignore create mode 100644 packages/schema-record/addon-main.cjs delete mode 100644 packages/schema-record/addon-main.js delete mode 100644 packages/schema-record/babel.config.js create mode 100644 packages/schema-record/babel.config.mjs create mode 100644 packages/schema-record/eslint.config.mjs delete mode 100644 packages/schema-record/rollup.config.mjs delete mode 100644 packages/schema-record/src/-base-fields.ts create mode 100644 packages/schema-record/src/symbols.ts create mode 100644 packages/schema-record/vite.config.mjs delete mode 100644 packages/schema/.npmignore delete mode 100644 packages/serializer/.eslintrc.cjs delete mode 100644 packages/serializer/.npmignore create mode 100644 packages/serializer/addon-main.cjs delete mode 100644 packages/serializer/addon-main.js delete mode 100644 packages/serializer/babel.config.js create mode 100644 packages/serializer/babel.config.mjs create mode 100644 packages/serializer/eslint.config.mjs delete mode 100644 packages/serializer/rollup.config.mjs delete mode 100644 packages/serializer/src/-private.ts create mode 100644 packages/serializer/vite.config.mjs delete mode 100644 packages/store/.eslintrc.cjs delete mode 100644 packages/store/.npmignore create mode 100644 packages/store/addon-main.cjs delete mode 100644 packages/store/addon-main.js delete mode 100644 packages/store/babel.config.js create mode 100644 packages/store/babel.config.mjs create mode 100644 packages/store/eslint.config.mjs delete mode 100644 packages/store/rollup.config.mjs delete mode 100644 packages/store/src/-private/utils/identifier-debug-consts.ts rename packages/store/src/-types/q/{cache-store-wrapper.ts => cache-capabilities-manager.ts} (96%) delete mode 100644 packages/store/src/-types/q/cache.ts create mode 100644 packages/store/src/types.ts create mode 100644 packages/store/vite.config.mjs delete mode 100644 packages/tracking/.eslintrc.cjs delete mode 100644 packages/tracking/babel.config.js create mode 100644 packages/tracking/babel.config.mjs create mode 100644 packages/tracking/eslint.config.mjs delete mode 100644 packages/tracking/rollup.config.mjs create mode 100644 packages/tracking/vite.config.mjs create mode 100644 packages/unpublished-test-infra/addon-main.cjs delete mode 100644 packages/unpublished-test-infra/addon-test-support/deep-copy.js delete mode 100644 packages/unpublished-test-infra/addon-test-support/public-props.js delete mode 100644 packages/unpublished-test-infra/addon-test-support/version.d.ts create mode 100644 packages/unpublished-test-infra/babel.config.mjs delete mode 100644 packages/unpublished-test-infra/ember-cli-build.js delete mode 100644 packages/unpublished-test-infra/index.js delete mode 100644 packages/unpublished-test-infra/src/node-test-helpers/fixture.js delete mode 100644 packages/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest.js delete mode 100644 packages/unpublished-test-infra/src/node-test-helpers/setup-test-environment.js rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/assert-all-deprecations.ts (94%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/assert-assertion.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/assert-better.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/assert-deprecation.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/assert-notification.ts (98%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/assert-warning.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/check-matcher.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/index.ts (97%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/asserts/utils/is-thenable.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/deprecated-test.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/test-helpers.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/test-in-debug.ts (100%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/test.ts (97%) rename packages/unpublished-test-infra/{addon-test-support => src/test-support}/todo.js (100%) create mode 100644 packages/unpublished-test-infra/src/test-support/version.ts delete mode 100644 packages/unpublished-test-infra/testem.js rename packages/unpublished-test-infra/{src => }/testem/custom-dot-reporter.js (100%) rename packages/unpublished-test-infra/{src => }/testem/testem.js (100%) create mode 100644 packages/unpublished-test-infra/vite.config.mjs create mode 100644 scripts/downlevel-addons.mjs create mode 100644 scripts/fix-dep-configuration.mjs create mode 100644 scripts/uplevel-adons.mjs delete mode 100644 tests/blueprints/.eslintrc.cjs create mode 100644 tests/blueprints/eslint.config.mjs rename tests/blueprints/fixtures/adapter-test/{rfc232-addon.js => addon-default.js} (72%) delete mode 100644 tests/blueprints/fixtures/adapter-test/rfc232.js rename tests/blueprints/fixtures/model-test/{rfc232-addon.js => addon-default.js} (63%) delete mode 100644 tests/blueprints/fixtures/model-test/rfc232.js create mode 100644 tests/blueprints/fixtures/serializer-test/addon-default.js delete mode 100644 tests/blueprints/fixtures/serializer-test/rfc232-addon.js delete mode 100644 tests/blueprints/fixtures/serializer-test/rfc232.js rename tests/blueprints/fixtures/transform-test/{rfc232-addon.js => addon-default.js} (70%) delete mode 100644 tests/blueprints/fixtures/transform-test/rfc232.js delete mode 100644 tests/builders/.eslintrc.cjs create mode 100644 tests/builders/eslint.config.mjs delete mode 100644 tests/codemods/.eslintrc.cjs create mode 100644 tests/codemods/eslint.config.mjs delete mode 100644 tests/docs/.eslintrc.cjs create mode 100644 tests/docs/eslint.config.mjs delete mode 100644 tests/ember-data__adapter/.eslintrc.cjs create mode 100644 tests/ember-data__adapter/eslint.config.mjs delete mode 100644 tests/ember-data__graph/.eslintrc.cjs create mode 100644 tests/ember-data__graph/eslint.config.mjs rename tests/ember-data__graph/tests/{test-helper.js => test-helper.ts} (75%) delete mode 100644 tests/ember-data__json-api/.eslintrc.cjs create mode 100644 tests/ember-data__json-api/eslint.config.mjs delete mode 100644 tests/ember-data__model/.eslintrc.cjs create mode 100644 tests/ember-data__model/eslint.config.mjs delete mode 100644 tests/ember-data__request/.eslintrc.cjs create mode 100644 tests/ember-data__request/eslint.config.mjs delete mode 100644 tests/ember-data__serializer/.eslintrc.cjs create mode 100644 tests/ember-data__serializer/eslint.config.mjs delete mode 100644 tests/embroider-basic-compat/.eslintrc.cjs create mode 100644 tests/embroider-basic-compat/eslint.config.mjs delete mode 100644 tests/example-json-api/.eslintrc.cjs create mode 100644 tests/example-json-api/eslint.config.mjs delete mode 100644 tests/fastboot/.ember-cli delete mode 100644 tests/fastboot/.eslintrc.cjs delete mode 100644 tests/fastboot/.gitignore rename tests/fastboot/app/models/{person.js => person.ts} (58%) delete mode 100644 tests/fastboot/app/routes/index.js create mode 100644 tests/fastboot/app/routes/index.ts rename tests/fastboot/app/services/{store.js => store.ts} (100%) create mode 100644 tests/fastboot/eslint.config.mjs delete mode 100644 tests/main/.eslintrc.cjs create mode 100644 tests/main/eslint.config.mjs rename tests/main/tests/integration/record-data/{store-wrapper-test.ts => cache-capabilities-manager-test.ts} (78%) delete mode 100644 tests/performance/.eslintrc.cjs create mode 100644 tests/performance/eslint.config.mjs delete mode 100644 tests/schema/output/.gitkeep delete mode 100644 tests/warp-drive__ember/.eslintrc.cjs create mode 100644 tests/warp-drive__ember/eslint.config.mjs delete mode 100644 tests/warp-drive__schema-record/.eslintrc.cjs create mode 100644 tests/warp-drive__schema-record/eslint.config.mjs create mode 100644 tsconfig.json diff --git a/.github/renovate.json b/.github/renovate.json index 0aa5488e9de..cefb500881b 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -60,7 +60,6 @@ { "matchPackageNames": [ "chai", - "mocha", "qunit-dom", "sinon", "ember-exam", diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index edffacd0c9d..5c598aaf585 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -103,7 +103,7 @@ jobs: key: failed-test-log_${{ github.sha }} - name: Development - run: timeout $BROWSER_TIMEOUT pnpm test + run: timeout $BROWSER_TIMEOUT pnpm run test env: TESTEM_CI_LAUNCHER: ${{ matrix.launcher }} CI: true diff --git a/.gitignore b/.gitignore index 8b4fd637032..61f344eb1f2 100644 --- a/.gitignore +++ b/.gitignore @@ -8,24 +8,7 @@ dist dist-* tmp unstable-preview-types -# packages/-ember-data/addon -packages/active-record/addon -packages/adapter/addon -packages/core-types/addon -packages/data-worker/addon -# packages/debug/addon -packages/graph/addon -packages/json-api/addon -packages/legacy-compat/addon -packages/model/addon -packages/request-utils/addon -packages/request/addon -packages/rest/addon -packages/schema-record/addon/ -packages/serializer/addon -packages/store/addon -packages/tracking/addon -packages/ember/addon +packages/*/addon # dependencies bower_components diff --git a/.prettierignore b/.prettierignore index 88ed0a8538c..983164e8e09 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,6 +2,9 @@ # generated files pnpm-lock.yaml +dist +unstable-preview-types +preview-types # we disagree with prettier and we are even more opinionated than they are *.hbs diff --git a/.vscode/settings.json b/.vscode/settings.json index ac79e8ed21d..15be3e34298 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,7 @@ { "eslint.format.enable": true, "eslint.workingDirectories": [{ "mode": "auto" }, "packages/*", "tests/*"], - "eslint.options": { "reportUnusedDisableDirectives": "error" }, + "eslint.useFlatConfig": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, @@ -40,5 +40,6 @@ "editor.tabSize": 4 }, "typescript.preferences.importModuleSpecifier": "project-relative", - "bun.debugTerminal.enabled": true + "bun.debugTerminal.enabled": true, + "eslint.debug": true } diff --git a/config/babel/fix-mjs.cjs b/config/babel/fix-mjs.cjs new file mode 100644 index 00000000000..d059aab1316 --- /dev/null +++ b/config/babel/fix-mjs.cjs @@ -0,0 +1,35 @@ +module.exports = function () { + const addonLocation = process.env.ADDON_LOCATION; + const pkgPath = addonLocation + '/package.json'; + const pkg = require(pkgPath); + const isV1Addon = !pkg['ember-addon'] || pkg['ember-addon'].version === 1; + + function replaceExt(node) { + if (node.value.endsWith('.mjs')) { + node.value = node.value.replace('.mjs', '.js'); + } + if (isV1Addon) { + if (node.value.endsWith('.js')) { + node.value = node.value.replace('.js', ''); + } + } + } + + return { + name: '@warp-drive/internal-config/fix-mjs', + visitor: { + Program(path) { + path.node.body.forEach((node) => { + if (node.type === 'ImportDeclaration' || (node.type === 'ExportNamedDeclaration' && node.source)) { + replaceExt(node.source); + } + }); + }, + CallExpression(path) { + if (path.node.callee.type === 'Import') { + replaceExt(path.node.arguments[0]); + } + }, + }, + }; +}; diff --git a/config/eslint/base.cjs b/config/eslint/base.cjs deleted file mode 100644 index a191a8e4116..00000000000 --- a/config/eslint/base.cjs +++ /dev/null @@ -1,50 +0,0 @@ -const path = require('path'); - -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', - }; -} - -function plugins() { - return []; -} - -function extend() { - return [ - 'eslint:recommended', - 'prettier', // NOTE: must be last - ]; -} - -function settings() { - return { - globals: {}, - env: { - browser: true, - node: false, - es2022: true, - }, - }; -} - -module.exports = { - rules, - plugins, - extend, - settings, -}; diff --git a/config/eslint/browser.js b/config/eslint/browser.js new file mode 100644 index 00000000000..5fd77b263d2 --- /dev/null +++ b/config/eslint/browser.js @@ -0,0 +1,54 @@ +// @ts-check +import js from '@eslint/js'; +import prettier from 'eslint-config-prettier'; +import * as imports from './imports.js'; +import * as isolation from './isolation.js'; +import * as ts from './typescript.js'; + +// function resolve(name) { +// const fullPath = import.meta.resolve(name); +// if (fullPath.startsWith('file://')) { +// return fullPath.slice(7); +// } +// } + +export function rules(config = {}) { + const ourRules = { + 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', + }; + + return Object.assign( + {}, + js.configs.recommended.rules, + prettier.rules, + imports.rules(), + isolation.rules(config), + ourRules + ); +} + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function browser(config = {}) { + config.files = Array.isArray(config.files) ? config.files : ['**/*.{js,gjs}']; + const base = ts.browser(config); + // @ts-expect-error + base.languageOptions.parserOptions.project = null; + base.rules = rules(config); + base.plugins = imports.plugins(); + + return base; +} diff --git a/config/eslint/diagnostic.cjs b/config/eslint/diagnostic.cjs deleted file mode 100644 index c5eb1e3d429..00000000000 --- a/config/eslint/diagnostic.cjs +++ /dev/null @@ -1,53 +0,0 @@ -const isolation = require('./isolation.cjs'); - -function defaults(config = {}) { - return { - files: config.files || ['tests/**/*-test.{js,ts}'], - // HACK: diagnostic API significantly overlaps with the qunit API, so we're - // using the qunit plugin to lint diagnostic files. - extends: ['plugin:qunit/recommended'], - rules: Object.assign( - isolation.rules({ - allowedImports: ['@ember/debug', '@ember/test-helpers', ...(config.allowedImports ?? [])], - }), - config?.rules, - { - 'qunit/no-assert-equal': 'off', - 'qunit/no-assert-logical-expression': 'off', - 'qunit/no-conditional-assertions': 'off', - 'qunit/no-early-return': 'off', - 'qunit/no-ok-equality': 'off', - 'qunit/require-expect': 'off', - } - ), - }; -} - -function config() { - return { - files: ['./diagnostic.js'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2022, - }, - env: { - browser: false, - node: true, - es6: true, - }, - plugins: ['n'], - extends: 'plugin:n/recommended', - rules: { - // It's ok to use unpublished files here since we don't ship these - 'n/no-unpublished-require': 'off', - // TODO: '@warp-drive/diagnostic/server/default-setup.js' keeps setting these off - 'n/no-missing-import': 'off', - 'n/no-unpublished-import': 'off', - }, - }; -} - -module.exports = { - config, - defaults, -}; diff --git a/config/eslint/diagnostic.js b/config/eslint/diagnostic.js new file mode 100644 index 00000000000..cb864fbf5d7 --- /dev/null +++ b/config/eslint/diagnostic.js @@ -0,0 +1,23 @@ +import * as isolation from './isolation.js'; +import * as qunit from './qunit.js'; + +const QUNIT_BANNED_IMPORTS = ['ember-qunit', 'qunit', 'ember-exam']; + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function browser(config = {}) { + const base = qunit.ember(config); + base.rules = Object.assign( + base.rules, + { + 'qunit/no-assert-equal': 'off', + }, + isolation.rules({ + allowedImports: ['@ember/test-helpers', '@ember/test-waiters', ...(config.allowedImports ?? [])].filter( + (v) => !QUNIT_BANNED_IMPORTS.includes(v) + ), + }), + config.rules ?? {} + ); + + return base; +} diff --git a/config/eslint/gts.js b/config/eslint/gts.js new file mode 100644 index 00000000000..76be3d3c72c --- /dev/null +++ b/config/eslint/gts.js @@ -0,0 +1,34 @@ +import noop from 'ember-eslint-parser/noop'; +import emberEslintParser from 'ember-eslint-parser'; +import * as ts from './typescript.js'; + +export function browser(config) { + config.files = config.files ?? ['**/*.{gts,gjs}']; + const base = ts.browser(config); + + const parser = Object.assign( + { + meta: { + name: 'ember-eslint-parser', + version: '*', + }, + }, + emberEslintParser + ); + + base.languageOptions.parser = parser; + base.processor = 'ember/noop'; + base.plugins = Object.assign({}, base.plugins, { + ember: { + meta: { + name: 'ember', + version: '*', + }, + processors: { + noop, + }, + }, + }); + + return base; +} diff --git a/config/eslint/ignore.cjs b/config/eslint/ignore.cjs deleted file mode 100644 index 7be233bc73c..00000000000 --- a/config/eslint/ignore.cjs +++ /dev/null @@ -1,38 +0,0 @@ -const RULES = [ - // # unconventional js - 'blueprints/', - '!tests/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', - 'tests/__testfixtures__', -]; - -function ignoreRules(allowAddon) { - const rules = allowAddon ? [] : ['addon']; - - return rules.concat(RULES); -} - -module.exports = { - ignoreRules, -}; diff --git a/config/eslint/ignore.js b/config/eslint/ignore.js new file mode 100644 index 00000000000..8f901c5d9fe --- /dev/null +++ b/config/eslint/ignore.js @@ -0,0 +1,39 @@ +const RULES = [ + // # unconventional js + 'blueprints/*', + '!./tests/blueprints/*', + 'vendor/*', + + // # Declaration files + '**/*.d.ts', + + // # compiled output + 'dist/*', + 'dist-*/*', + 'addon/*', + 'tmp/*', + 'tmp*/*', + 'DEBUG/*', + 'DEBUG*/*', + '.git/*', + '.broccoli-cache/*', + 'unstable-preview-types/*', + + // # Special Cases + 'docs/*', + 'coverage/*', + 'node_modules/*', + '.node_modules.ember-try/*', + 'package.json.ember-try', + 'tests/__testfixtures__', +]; + +export function ignoreRules() { + return RULES.slice(); +} + +export function globalIgnores(additionalIgnores) { + return { + ignores: ignoreRules().concat(additionalIgnores ?? []), + }; +} diff --git a/config/eslint/imports.cjs b/config/eslint/imports.js similarity index 81% rename from config/eslint/imports.cjs rename to config/eslint/imports.js index 97fc0a04ce6..8653ec46d29 100644 --- a/config/eslint/imports.cjs +++ b/config/eslint/imports.js @@ -1,3 +1,6 @@ +import SimpleImportSortPlugin from 'eslint-plugin-simple-import-sort'; +import ImportPlugin from 'eslint-plugin-import'; + // See https://github.com/lydell/eslint-plugin-simple-import-sort#custom-grouping const ImportSortGroups = [ // Side effect imports. @@ -25,7 +28,7 @@ const ImportSortGroups = [ [`^\.`], ]; -function rules() { +export function rules() { return { // Imports 'import/first': 'error', @@ -35,11 +38,9 @@ function rules() { }; } -function plugins() { - return ['simple-import-sort', 'import']; +export function plugins() { + return { + 'simple-import-sort': SimpleImportSortPlugin, + import: ImportPlugin, + }; } - -module.exports = { - plugins, - rules, -}; diff --git a/config/eslint/isolation.cjs b/config/eslint/isolation.js similarity index 96% rename from config/eslint/isolation.cjs rename to config/eslint/isolation.js index 4e3b0290e75..4f51fa6def7 100644 --- a/config/eslint/isolation.cjs +++ b/config/eslint/isolation.js @@ -42,7 +42,7 @@ const RESTRICTED_IMPORTS = [ 'qunit', 'testem', ]; -function rules(options) { +export function rules(options) { return { 'no-restricted-imports': [ 'error', @@ -63,7 +63,3 @@ function rules(options) { ], }; } - -module.exports = { - rules, -}; diff --git a/config/eslint/mocha.cjs b/config/eslint/mocha.cjs deleted file mode 100644 index fc50ce88a28..00000000000 --- a/config/eslint/mocha.cjs +++ /dev/null @@ -1,20 +0,0 @@ -const isolation = require('./isolation.cjs'); - -function defaults(config = {}) { - return { - files: config.files || ['tests/**/*-test.{js,ts}'], - plugins: ['mocha'], - extends: ['plugin:mocha/recommended'], - env: { - node: true, - }, - rules: { - // We use setup to set up beforeEach hooks, etc, which should be OK - 'mocha/no-setup-in-describe': 'off', - }, - }; -} - -module.exports = { - defaults, -}; diff --git a/config/eslint/mocha.js b/config/eslint/mocha.js new file mode 100644 index 00000000000..adbb54cdd78 --- /dev/null +++ b/config/eslint/mocha.js @@ -0,0 +1,16 @@ +import * as node from './node.js'; +import mochaPlugin from 'eslint-plugin-mocha'; + +export function cjs(config = {}) { + config.files = config.files || ['tests/**/*.{js,ts}']; + const base = node.cjs(config); + const recommended = mochaPlugin.configs.flat.recommended; + + base.plugins = Object.assign(base.plugins, recommended.plugins); + base.rules = Object.assign(base.rules, recommended.rules, { + // We use setup to set up beforeEach hooks, etc, which should be OK + 'mocha/no-setup-in-describe': 'off', + }); + + return base; +} diff --git a/config/eslint/node.cjs b/config/eslint/node.cjs deleted file mode 100644 index b90c70b2e81..00000000000 --- a/config/eslint/node.cjs +++ /dev/null @@ -1,66 +0,0 @@ -function defaults(config) { - const result = { - files: !config?.useModules - ? ['./index.js', './addon-main.cjs', './addon-main.js', './config/environment.js', './config/targets.js'] - : [], - parserOptions: { - sourceType: config?.useModules ? 'module' : 'script', - ecmaVersion: 2022, - ...(config?.parserOptions ?? {}), - }, - env: { - browser: false, - node: true, - es6: true, - }, - globals: config?.globals || {}, - plugins: ['n'], - extends: 'plugin:n/recommended', - }; - - if (config?.files) { - result.files.push(...config.files); - } - - return result; -} - -function config(config) { - const result = { - files: [ - './.eslintrc.cjs', - './babel.config.js', - './ember-cli-build.js', - './rollup.config.mjs', - './testem.js', - './config/ember-try.js', - ], - parserOptions: { - sourceType: config?.useModules ? 'module' : 'script', - ecmaVersion: 2022, - }, - env: { - browser: false, - node: true, - es6: true, - }, - globals: config?.globals || {}, - plugins: ['n'], - extends: 'plugin:n/recommended', - rules: { - // It's ok to use unpublished files here since we don't ship these - 'n/no-unpublished-require': 'off', - }, - }; - - if (config?.files) { - result.files.push(...config.files); - } - - return result; -} - -module.exports = { - defaults, - config, -}; diff --git a/config/eslint/node.js b/config/eslint/node.js new file mode 100644 index 00000000000..03f6a09c5c1 --- /dev/null +++ b/config/eslint/node.js @@ -0,0 +1,117 @@ +// @ts-check +import nodePlugin from 'eslint-plugin-n'; +import globals from 'globals'; + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function cjs(config) { + const result = { + files: [ + 'addon-main.cjs', + 'addon-main.js', + 'babel.config.cjs', + 'config/ember-try.cjs', + 'config/ember-try.js', + 'config/environment.js', + 'config/targets.js', + 'ember-cli-build.cjs', + 'ember-cli-build.js', + 'eslint.config.cjs', + 'rollup.config.cjs', + 'rollup.config.js', + 'testem.cjs', + 'testem.js', + ], + }; + + if (config?.files) { + result.files.push(...config.files); + } + + const finalConfig = Object.assign({}, nodePlugin.configs['flat/recommended-script'], result); + finalConfig.linterOptions = { + reportUnusedDisableDirectives: 'error', + }; + finalConfig.languageOptions = Object.assign({}, finalConfig.languageOptions, { + /** @type {'commonjs'} */ + sourceType: 'commonjs', + /** @type {2022} */ + ecmaVersion: 2022, + globals: Object.assign({}, globals.node, finalConfig.languageOptions.globals, config?.globals ?? {}), + }); + finalConfig.languageOptions.parserOptions = Object.assign({}, finalConfig.languageOptions.parserOptions, { + ...(config?.parserOptions ?? {}), + }); + + finalConfig.rules = Object.assign( + {}, + finalConfig.rules, + { + 'n/no-missing-import': [ + 'error', + { + // this rule has a bug where if a package has never been published + // is generates a false report that its imports are missing + // it also has a bug where it doesn't properly follow exports in package.json + allowModules: ['@warp-drive/build-config', '@warp-drive/diagnostic'], + }, + ], + }, + config?.rules ?? {} + ); + + return finalConfig; +} + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function esm(config) { + const result = { + files: [ + 'addon-main.mjs', + 'babel.config.mjs', + 'diagnostic.js', + 'diagnostic.mjs', + 'eslint.config.mjs', + 'holodeck.js', + 'holodeck.mjs', + 'rollup.config.mjs', + 'testem.mjs', + ], + }; + + if (config?.files) { + result.files.push(...config.files); + } + + const finalConfig = Object.assign({}, nodePlugin.configs['flat/recommended-module'], result); + finalConfig.linterOptions = { + reportUnusedDisableDirectives: 'error', + }; + finalConfig.languageOptions = Object.assign({}, finalConfig.languageOptions, { + /** @type {'module'} */ + sourceType: 'module', + /** @type {2022} */ + ecmaVersion: 2022, + globals: Object.assign({}, globals.nodeBuiltin, finalConfig.languageOptions.globals, config?.globals ?? {}), + }); + finalConfig.languageOptions.parserOptions = Object.assign({}, finalConfig.languageOptions.parserOptions, { + ...(config?.parserOptions ?? {}), + }); + + finalConfig.rules = Object.assign( + {}, + finalConfig.rules, + { + 'n/no-missing-import': [ + 'error', + { + // this rule has a bug where if a package has never been published + // is generates a false report that its imports are missing + allowModules: ['@warp-drive/build-config', '@warp-drive/diagnostic'], + }, + ], + }, + config?.rules ?? {} + ); + + return finalConfig; +} diff --git a/config/eslint/parser.cjs b/config/eslint/parser.cjs deleted file mode 100644 index 38e898287df..00000000000 --- a/config/eslint/parser.cjs +++ /dev/null @@ -1,19 +0,0 @@ -function defaults() { - return { - parser: '@babel/eslint-parser', - root: true, - parserOptions: { - ecmaVersion: 2022, - sourceType: 'module', - babelOptions: { - // eslint-disable-next-line n/no-unpublished-require - plugins: [[require.resolve('@babel/plugin-proposal-decorators'), { legacy: true }]], - }, - requireConfigFile: false, - }, - }; -} - -module.exports = { - defaults, -}; diff --git a/config/eslint/parser.js b/config/eslint/parser.js new file mode 100644 index 00000000000..6f6cb484a6a --- /dev/null +++ b/config/eslint/parser.js @@ -0,0 +1,33 @@ +import babelParser from '@babel/eslint-parser'; + +function resolve(name) { + const fullPath = import.meta.resolve(name); + if (fullPath.startsWith('file://')) { + return fullPath.slice(7); + } +} + +export function languageOptions() { + return { + parser: babelParser, + /** @type {2022} */ + ecmaVersion: 2022, + /** @type {'module'} */ + sourceType: 'module', + parserOptions: { + requireConfigFile: false, + babelOptions: { + babelrc: false, + configFile: false, + // eslint-disable-next-line n/no-unpublished-require + plugins: [[resolve('@babel/plugin-proposal-decorators'), { legacy: true }]], + }, + }, + }; +} + +export function defaults() { + return { + languageOptions: languageOptions(), + }; +} diff --git a/config/eslint/qunit.cjs b/config/eslint/qunit.cjs deleted file mode 100644 index 49cddfa736f..00000000000 --- a/config/eslint/qunit.cjs +++ /dev/null @@ -1,32 +0,0 @@ -const isolation = require('./isolation.cjs'); - -function defaults(config = {}) { - return { - files: config.files || ['tests/**/*-test.{js,ts}'], - extends: ['plugin:qunit/recommended'], - rules: Object.assign( - isolation.rules({ - allowedImports: [ - '@ember/debug', - '@ember/test-helpers', - '@ember/test-waiters', - 'ember-qunit', - 'qunit', - ...(config.allowedImports ?? []), - ], - }), - config?.rules, - { - 'qunit/no-assert-logical-expression': 'off', - 'qunit/no-conditional-assertions': 'off', - 'qunit/no-early-return': 'off', - 'qunit/no-ok-equality': 'off', - 'qunit/require-expect': 'off', - } - ), - }; -} - -module.exports = { - defaults, -}; diff --git a/config/eslint/qunit.js b/config/eslint/qunit.js new file mode 100644 index 00000000000..f55f5c2fdbb --- /dev/null +++ b/config/eslint/qunit.js @@ -0,0 +1,53 @@ +import * as isolation from './isolation.js'; +import * as typescript from './typescript.js'; +import lintQUnit from 'eslint-plugin-qunit'; + +const QUNIT_IMPORTS = ['@ember/test-helpers', '@ember/test-waiters', 'ember-qunit', 'qunit']; + +export function rules(config = {}) { + const ourRules = { + 'qunit/no-assert-logical-expression': 'off', + 'qunit/no-conditional-assertions': 'off', + 'qunit/no-early-return': 'off', + 'qunit/no-ok-equality': 'off', + 'qunit/require-expect': 'off', + }; + + config.allowedImports = Array.isArray(config.allowedImports) + ? config.allowedImports.concat(QUNIT_IMPORTS) + : QUNIT_IMPORTS.slice(); + + return Object.assign({}, lintQUnit.configs.recommended.rules, isolation.rules(config), ourRules); +} + +export function plugins() { + return { qunit: lintQUnit }; +} + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function ember(config = {}) { + config.allowedImports = Array.isArray(config.allowedImports) + ? config.allowedImports.concat(QUNIT_IMPORTS) + : QUNIT_IMPORTS.slice(); + + config.files = config.files || ['tests/**/*.{js,ts,gjs,gts}']; + + const base = typescript.browser(config); + return { + // languageOptions: base.languageOptions, + files: config.files, + plugins: plugins(), + rules: rules(config), + }; +} + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function node(config = {}) { + config.allowedImports = Array.isArray(config.allowedImports) ? config.allowedImports.concat(['qunit']) : ['qunit']; + + return { + files: config.files || ['tests/**/*.{js,ts}'], + plugins: plugins(), + rules: rules(config), + }; +} diff --git a/config/eslint/typescript.cjs b/config/eslint/typescript.cjs deleted file mode 100644 index 08c2d56667c..00000000000 --- a/config/eslint/typescript.cjs +++ /dev/null @@ -1,82 +0,0 @@ -function rules(config) { - return Object.assign( - { - '@typescript-eslint/adjacent-overload-signatures': 'error', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/consistent-type-exports': 'error', - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - disallowTypeAnnotations: false, - }, - ], - 'no-loop-func': 'off', - '@typescript-eslint/no-loop-func': 'error', - '@typescript-eslint/no-misused-promises': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - 'no-shadow': 'off', - '@typescript-eslint/no-shadow': 'error', - 'no-throw-literal': 'off', - '@typescript-eslint/no-import-type-side-effects': 'error', - '@typescript-eslint/no-inferrable-types': 'error', - '@typescript-eslint/no-meaningless-void-operator': 'error', - '@typescript-eslint/no-throw-literal': 'error', - // Many failures for these; they seem intentional so I don't want to just auto-fix: - // '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', - // '@typescript-eslint/no-unnecessary-condition': 'error', - '@typescript-eslint/no-unnecessary-type-arguments': 'error', - '@typescript-eslint/no-unnecessary-type-assertion': 'error', - '@typescript-eslint/no-unnecessary-type-constraint': 'error', - '@typescript-eslint/no-unsafe-declaration-merging': 'off', - '@typescript-eslint/no-unused-vars': ['error', { args: 'none' }], - 'no-useless-constructor': 'off', - '@typescript-eslint/no-useless-constructor': 'error', - '@typescript-eslint/prefer-includes': 'error', - // Auto-fix changes the types in some of these cases, which didn't seem safe: - // '@typescript-eslint/prefer-optional-chain': 'error', - '@typescript-eslint/prefer-reduce-type-parameter': 'error', - '@typescript-eslint/prefer-return-this-type': 'error', - '@typescript-eslint/prefer-ts-expect-error': 'error', - 'prefer-const': 'error', - 'prefer-rest-params': 'off', - }, - config?.rules ?? {} - ); -} - -function plugins() { - return ['@typescript-eslint']; -} - -function extend() { - return ['plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-type-checked']; -} - -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/eslint/typescript.js b/config/eslint/typescript.js new file mode 100644 index 00000000000..d3dc0f80923 --- /dev/null +++ b/config/eslint/typescript.js @@ -0,0 +1,167 @@ +// @ts-check +import * as js from './browser.js'; +import * as imports from './imports.js'; +import tseslint from 'typescript-eslint'; +import globals from 'globals'; + +/** @returns {import('eslint').Linter.FlatConfig} */ +function mergeTsConfigs(configArray) { + const merged = { + languageOptions: {}, + rules: {}, + }; + for (const config of configArray) { + merged.languageOptions = config.languageOptions ? config.languageOptions : merged.languageOptions; + merged.plugins = config.plugins ? config.plugins : merged.plugins; + merged.rules = config.rules ? Object.assign(merged.rules, config.rules) : merged.rules; + } + + return merged; +} + +export function rules(config = {}) { + const ourRules = { + '@typescript-eslint/no-invalid-void-type': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/adjacent-overload-signatures': 'error', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/unified-signatures': 'off', + '@typescript-eslint/consistent-type-exports': 'error', + '@typescript-eslint/no-dynamic-delete': 'off', + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + disallowTypeAnnotations: false, + }, + ], + 'no-loop-func': 'off', + '@typescript-eslint/no-loop-func': 'error', + '@typescript-eslint/no-misused-promises': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': 'error', + 'no-throw-literal': 'off', + '@typescript-eslint/no-import-type-side-effects': 'error', + '@typescript-eslint/no-inferrable-types': 'error', + '@typescript-eslint/no-meaningless-void-operator': 'error', + '@typescript-eslint/no-throw-literal': 'error', + // Many failures for these; they seem intentional so I don't want to just auto-fix: + // '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', + // '@typescript-eslint/no-unnecessary-condition': 'error', + '@typescript-eslint/no-unnecessary-type-arguments': 'error', + '@typescript-eslint/no-unnecessary-type-assertion': 'error', + '@typescript-eslint/no-unnecessary-type-constraint': 'error', + '@typescript-eslint/no-unsafe-declaration-merging': 'off', + '@typescript-eslint/no-unused-vars': ['error', { args: 'none' }], + 'no-useless-constructor': 'off', + '@typescript-eslint/no-useless-constructor': 'error', + '@typescript-eslint/prefer-includes': 'error', + // Auto-fix changes the types in some of these cases, which didn't seem safe: + // '@typescript-eslint/prefer-optional-chain': 'error', + '@typescript-eslint/prefer-reduce-type-parameter': 'error', + '@typescript-eslint/prefer-return-this-type': 'error', + '@typescript-eslint/prefer-ts-expect-error': 'error', + 'prefer-const': 'error', + 'prefer-rest-params': 'off', + }; + + const finalized = {}; + + if (config.recommended || typeof config.recommended !== 'boolean') { + Object.assign(finalized, mergeTsConfigs(tseslint.configs.recommended).rules); + } + if (config.typeChecked || typeof config.recommended !== 'boolean') { + Object.assign(finalized, mergeTsConfigs(tseslint.configs.recommendedTypeChecked).rules); + } + if (config.strict || typeof config.recommended !== 'boolean') { + Object.assign(finalized, mergeTsConfigs(tseslint.configs.strict).rules); + } + + Object.assign(finalized, ourRules, config?.rules ?? {}); + + return finalized; +} + +export function parser() { + const merged = mergeTsConfigs(tseslint.configs.recommended); + // @ts-expect-error + return merged.languageOptions.parser; +} + +export function plugins() { + return { + '@typescript-eslint': tseslint.plugin, + }; +} + +export function constructFileGlobs(srcDirs, files) { + const globs = []; + + for (const dir of srcDirs) { + const hasSlash = dir.endsWith('/'); + for (const file of files) { + const needsSlash = !hasSlash && !file.startsWith('/'); + globs.push(`${dir}${needsSlash ? '/' : ''}${file}`); + } + } + + return globs; +} + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function browser(config) { + config.files = config.files ?? ['**/*.ts']; + /** @type {string[]} */ + const files = Array.isArray(config.srcDirs) ? constructFileGlobs(config.srcDirs, config.files) : config.files; + + return { + files, + linterOptions: { + reportUnusedDisableDirectives: 'error', + }, + languageOptions: { + parser: parser(), + parserOptions: { + project: './tsconfig.json', + extraFileExtensions: ['.gts', '.gjs'], + }, + /** @type {2022} */ + ecmaVersion: 2022, + /** @type {'module'} */ + sourceType: 'module', + globals: Object.assign({}, globals.browser, config.globals), + }, + rules: Object.assign({}, js.rules(config), rules(config)), + // @ts-expect-error + plugins: Object.assign({}, imports.plugins(), plugins()), + }; +} + +/** @returns {import('eslint').Linter.FlatConfig} */ +export function node(config) { + config.files = config.files ?? ['**/*.ts']; + /** @type {string[]} */ + const files = Array.isArray(config.srcDirs) ? constructFileGlobs(config.srcDirs, config.files) : config.files; + + return { + files, + linterOptions: { + reportUnusedDisableDirectives: 'error', + }, + languageOptions: { + parser: parser(), + parserOptions: { + project: './tsconfig.json', + extraFileExtensions: ['.gts', '.gjs'], + }, + /** @type {2022} */ + ecmaVersion: 2022, + /** @type {'module'} */ + sourceType: 'module', + globals: Object.assign({}, globals.node, config.globals), + }, + rules: Object.assign({}, js.rules(config), rules(config)), + // @ts-expect-error + plugins: Object.assign({}, imports.plugins(), plugins()), + }; +} diff --git a/config/package.json b/config/package.json index ffd123543db..11b6ce7d185 100644 --- a/config/package.json +++ b/config/package.json @@ -2,12 +2,18 @@ "name": "@warp-drive/internal-config", "private": true, "version": "5.4.0-alpha.64", + "type": "module", "dependencies": { + "@babel/cli": "^7.24.5", "@babel/core": "^7.24.4", - "@babel/eslint-parser": "^7.24.1", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@typescript-eslint/eslint-plugin": "^7.6.0", - "@typescript-eslint/parser": "^7.6.0", + "@rollup/plugin-babel": "^6.0.4", + "@typescript-eslint/eslint-plugin": "^7.7.0", + "@typescript-eslint/parser": "^7.7.0", + "typescript-eslint": "^7.7.0", + "@embroider/addon-dev": "^4.3.1", + "@eslint/js": "^8.57.0", + "globals": "^15.0.0", + "ember-eslint-parser": "^0.4.2", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", @@ -15,10 +21,15 @@ "eslint-plugin-n": "^16.6.2", "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-simple-import-sort": "^12.0.0", - "typescript": "^5.4.5" + "minimatch": "^9.0.4", + "rollup": "^4.17.2", + "typescript": "^5.4.5", + "vite": "^5.2.11", + "vite-plugin-dts": "^3.9.0", + "walk-sync": "^3.0.0" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../package.json" diff --git a/config/rollup/external.js b/config/rollup/external.js index a8f1e8ea947..f65507dd201 100644 --- a/config/rollup/external.js +++ b/config/rollup/external.js @@ -1,7 +1,55 @@ -const path = require('path'); +import path from 'path'; +import fs from 'fs'; +import { globSync } from 'fs'; -function external(manual = []) { - const pkg = require(path.join(process.cwd(), './package.json')); +function loadConfig() { + const configPath = path.join(process.cwd(), './package.json'); + const pkg = JSON.parse(fs.readFileSync(configPath, 'utf-8')); + return pkg; +} + +export function entryPoints(globs, resolve, options) { + const files = []; + + // expand all globs + globs.forEach((glob) => { + glob.includes('*') || glob.includes('{') ? files.push(...globSync(glob)) : files.push(glob); + }); + + const srcDir = resolve(options.srcDir.startsWith('.') ? options.srcDir : './' + options.srcDir).slice(7) + '/'; + + // resolve all files to full paths + const allFiles = files.map((v) => { + if (!v.startsWith('.')) { + v = './' + v; + } + + const file = resolve(v); + if (file.startsWith('file://')) { + return file.slice(7); + } + return file; + }); + + const fileMap = {}; + allFiles.forEach((file) => { + let name; + if (options.flatten) { + // extract the file name sans directory and extension + name = path.basename(file, path.extname(file)); + } else { + // extract the file name sans srcDir directory and extension + name = file.replace(srcDir, ''); + name = name.slice(0, name.length - path.extname(name).length); + } + fileMap[name] = file; + }); + // console.log({ srcDir, fileMap }); + return fileMap; +} + +export function external(manual = []) { + const pkg = loadConfig(); const deps = Object.keys(pkg.dependencies || {}); const peers = Object.keys(pkg.peerDependencies || {}); const all = new Set([...deps, ...peers, ...manual]); @@ -24,14 +72,22 @@ function external(manual = []) { } } + if (id.startsWith('@warp-drive/build-config/') && pkg.devDependencies?.['@warp-drive/build-config']) { + return true; + } + + if (id.startsWith('@embroider/macros') && pkg.devDependencies?.['@embroider/macros']) { + return true; + } + + if (id.startsWith('expect-type') && pkg.devDependencies?.['expect-type']) { + return true; + } + if (id.startsWith('@ember/') || id.startsWith('@ember-data/') || id.startsWith('@warp-drive/')) { - throw new Error(`Unexpected import: ${id}`); + throw new Error(`Unexpected import: '${id}' is neither a dependency nor a peerDependency.`); } return false; }; } - -module.exports = { - external, -}; diff --git a/config/rollup/gjs.js b/config/rollup/gjs.js new file mode 100644 index 00000000000..0244310a5e9 --- /dev/null +++ b/config/rollup/gjs.js @@ -0,0 +1,3 @@ +import { Addon } from '@embroider/addon-dev/rollup'; + +export const gjs = Addon.prototype.gjs; diff --git a/config/rollup/keep-assets.js b/config/rollup/keep-assets.js new file mode 100644 index 00000000000..2ba5bab2535 --- /dev/null +++ b/config/rollup/keep-assets.js @@ -0,0 +1,44 @@ +import walkSync from 'walk-sync'; +import { readFileSync } from 'fs'; +import { dirname, join, resolve } from 'path'; +import { minimatch } from 'minimatch'; + +export function keepAssets({ from, include }) { + return { + name: 'copy-assets', + + // Prior to https://github.com/rollup/rollup/pull/5270, we cannot call this + // from within `generateBundle` + buildStart() { + this.addWatchFile(from); + }, + + // imports of assets should be left alone in the source code. This can cover + // the case of .css as defined in the embroider v2 addon spec. + async resolveId(source, importer, options) { + const resolution = await this.resolve(source, importer, { + skipSelf: true, + ...options, + }); + if (resolution && importer && include.some((pattern) => minimatch(resolution.id, pattern))) { + return { id: resolve(dirname(importer), source), external: 'relative' }; + } + return resolution; + }, + + // the assets go into the output directory in the same relative locations as + // in the input directory + async generateBundle() { + for (let name of walkSync(from, { + globs: include, + directories: false, + })) { + this.emitFile({ + type: 'asset', + fileName: name, + source: readFileSync(join(from, name)), + }); + } + }, + }; +} diff --git a/config/vite/compile-types-plugin.js b/config/vite/compile-types-plugin.js new file mode 100644 index 00000000000..ea8af950e66 --- /dev/null +++ b/config/vite/compile-types-plugin.js @@ -0,0 +1,11 @@ +import child_process from 'child_process'; + +export function CompileTypesPlugin(useGlint) { + return { + name: 'compile-types-with-tsc', + + closeBundle: () => { + child_process.spawnSync(useGlint ? 'glint' : 'tsc', ['--build'], { stdio: 'inherit' }); + }, + }; +} diff --git a/config/vite/config.js b/config/vite/config.js new file mode 100644 index 00000000000..05f616822e9 --- /dev/null +++ b/config/vite/config.js @@ -0,0 +1,55 @@ +import { babel } from '@rollup/plugin-babel'; +import { external, entryPoints } from '../rollup/external.js'; +import { defineConfig } from 'vite'; +import dts from 'vite-plugin-dts'; +import { FixModuleOutputPlugin } from './fix-module-output-plugin.js'; +// import { CompileTypesPlugin } from './compile-types-plugin.js'; + +export function createConfig(options, resolve) { + options.srcDir = options.srcDir ?? './src'; + options.fixModule = options.fixModule ?? true; + options.rollupTypes = options.rollupTypes ?? false; + options.compileTypes = options.compileTypes ?? true; + + return defineConfig({ + esbuild: false, + logLevel: 'error', + reportCompressedSize: false, + build: { + outDir: 'dist', + emptyOutDir: options.emptyOutDir ?? true, + target: ['esnext', 'firefox121'], + minify: false, + sourcemap: true, + lib: { + entry: entryPoints(options.entryPoints, resolve, options), + formats: options.format ? [options.format] : ['es'], + }, + rollupOptions: { + external: external(options.externals), + plugins: options.rollup?.plugins, + output: { + preserveModules: options.rollup?.preserveModules ?? false, + }, + }, + }, + plugins: [ + babel({ + babelHelpers: 'bundled', + extensions: ['.js', '.ts', '.gjs', '.gts'], + }), + options.compileTypes === true && options.rollupTypes === true + ? dts({ + rollupTypes: true, + outDir: 'unstable-preview-types', + logLevel: 'silent', + afterDiagnostic: (diagnostic) => {}, + }) + : undefined, + options.fixModule ? FixModuleOutputPlugin : undefined, + // options.compileTypes === true && options.rollupTypes === false ? CompileTypesPlugin(options.useGlint) : undefined, + ] + .concat(options.plugins || []) + .filter(Boolean), + }); +} diff --git a/config/vite/fix-module-output-plugin.js b/config/vite/fix-module-output-plugin.js new file mode 100644 index 00000000000..9077cd47287 --- /dev/null +++ b/config/vite/fix-module-output-plugin.js @@ -0,0 +1,59 @@ +import child_process from 'child_process'; +import { globSync, readFileSync, writeFileSync } from 'fs'; +import path from 'path'; + +const DEBUG = process.env.DEBUG === '*'; + +export const FixModuleOutputPlugin = { + name: 'use-weird-non-ESM-ember-convention', + + closeBundle: () => { + /** + * Related issues + * - https://github.com/embroider-build/embroider/issues/1672 + * - https://github.com/embroider-build/embroider/pull/1572 + * - https://github.com/embroider-build/embroider/issues/1675 + * + * Fixed in embroider@4 and especially @embroider/vite + */ + const files = globSync('./dist/**/*.mjs'); + if (files.length === 0) { + DEBUG && console.log('🟡 No MJS files found to rename to JS'); + return; + } + + for (const file of files) { + child_process.spawnSync('mv', [file, file.replace(/\.mjs$/, '.js')], { stdio: 'inherit' }); + DEBUG && console.log(`\t⚠️ Renamed MJS module ${file} to JS in a CJS package`); + } + + // babel ./dist --out-dir dist --plugins=../../config/babel/fix-mjs.js + const distDir = path.join(process.cwd(), 'dist'); + const babelPlugin = path.join(import.meta.dirname, '../babel/fix-mjs.cjs'); + const args = ['exec', 'babel', distDir, '--out-dir', distDir, '--plugins', babelPlugin]; + child_process.spawnSync('pnpm', args, { + stdio: 'inherit', + cwd: import.meta.dirname, + env: { ...process.env, ADDON_LOCATION: process.cwd() }, + }); + DEBUG && console.log(`\t⚠️ Fixes ${files.length} files to import/export from .js instead of .mjs`); + + const mapFiles = globSync('./dist/**/*.mjs.map'); + if (mapFiles.length === 0) { + DEBUG && console.log('🟡 No MJS map files found to rename to JS'); + return; + } + + for (const file of mapFiles) { + // replace any .mjs references in the map files to .js + const map = path.join(process.cwd(), file); + const mapContent = readFileSync(map, { encoding: 'utf-8' }); + const newContent = mapContent.replaceAll('.mjs', '.js'); + writeFileSync(map, newContent, { encoding: 'utf-8' }); + + // rename the map files + child_process.spawnSync('mv', [file, file.replace(/\.mjs.map$/, '.js.map')], { stdio: 'inherit' }); + DEBUG && console.log(`\t⚠️ Renamed MJS map ${file} to JS in a CJS package`); + } + }, +}; diff --git a/docs-generator/yuidoc.json b/docs-generator/yuidoc.json index 9e59e53d204..77f0bb8dad2 100644 --- a/docs-generator/yuidoc.json +++ b/docs-generator/yuidoc.json @@ -8,10 +8,10 @@ "preprocessor": "./yui-docs-preprocessor.js", "excludeTags": ["internal", "feature", "typedoc", "see", "link", "inheritdoc"], "paths": [ - "../packages/-ember-data/addon", + "../packages/-ember-data/src", "../packages/core-types/src", - "../packages/debug/addon", - "../packages/private-build-infra/virtual-packages", + "../packages/debug/src", + "../packages/build-config/src", "../packages/adapter/src", "../packages/model/src", "../packages/serializer/src", diff --git a/guides/typescript/0-installation.md b/guides/typescript/0-installation.md index 46212b7f86d..b69aa15617a 100644 --- a/guides/typescript/0-installation.md +++ b/guides/typescript/0-installation.md @@ -85,18 +85,18 @@ Here's an example change to package.json which drops all use of types from `@typ - "@types/ember__test": "4.0.6", - "@types/ember__utils": "4.0.7", - "ember-data": "~5.3.3", -+ "ember-data": "5.4.0-alpha.52", -+ "@ember-data/store": "5.4.0-alpha.52", -+ "@ember-data/adapter": "5.4.0-alpha.52", -+ "@ember-data/graph": "5.4.0-alpha.52", -+ "@ember-data/json-api": "5.4.0-alpha.52", -+ "@ember-data/legacy-compat": "5.4.0-alpha.52", -+ "@ember-data/request": "5.4.0-alpha.52", -+ "@ember-data/request-utils": "5.4.0-alpha.52", -+ "@ember-data/serializer": "5.4.0-alpha.52", -+ "@ember-data/model": "5.4.0-alpha.52", -+ "@ember-data/tracking": "5.4.0-alpha.52", -+ "@warp-drive/core-types": "0.0.0-alpha.38", ++ "ember-data": "5.4.0-alpha.64", ++ "@ember-data/store": "5.4.0-alpha.64", ++ "@ember-data/adapter": "5.4.0-alpha.64", ++ "@ember-data/graph": "5.4.0-alpha.64", ++ "@ember-data/json-api": "5.4.0-alpha.64", ++ "@ember-data/legacy-compat": "5.4.0-alpha.64", ++ "@ember-data/request": "5.4.0-alpha.64", ++ "@ember-data/request-utils": "5.4.0-alpha.64", ++ "@ember-data/serializer": "5.4.0-alpha.64", ++ "@ember-data/model": "5.4.0-alpha.64", ++ "@ember-data/tracking": "5.4.0-alpha.64", ++ "@warp-drive/core-types": "0.0.0-alpha.50", ``` > [!TIP] @@ -172,17 +172,17 @@ Here's an example change to package.json which drops all use of types from `@typ - "@types/ember__template": "4.0.7", - "@types/ember__test": "4.0.6", - "@types/ember__utils": "4.0.7", -+ "@ember-data-types/adapter": "^5.4.0-alpha.52", -+ "@ember-data-types/model": "^5.4.0-alpha.52", -+ "@ember-data-types/serializer": "^5.4.0-alpha.52", -+ "@ember-data-types/store": "^5.4.0-alpha.52", -+ "@ember-data-types/graph": "^5.4.0-alpha.52", -+ "@ember-data-types/json-api": "^5.4.0-alpha.52", -+ "@ember-data-types/legacy-compat": "^5.4.0-alpha.52", -+ "@ember-data-types/request": "^5.4.0-alpha.52", -+ "@ember-data-types/request-utils": "^5.4.0-alpha.52", -+ "@ember-data-types/tracking": "^5.4.0-alpha.52", -+ "@warp-drive-types/core-types": "^0.0.0-alpha.38", ++ "@ember-data-types/adapter": "^5.4.0-alpha.64", ++ "@ember-data-types/model": "^5.4.0-alpha.64", ++ "@ember-data-types/serializer": "^5.4.0-alpha.64", ++ "@ember-data-types/store": "^5.4.0-alpha.64", ++ "@ember-data-types/graph": "^5.4.0-alpha.64", ++ "@ember-data-types/json-api": "^5.4.0-alpha.64", ++ "@ember-data-types/legacy-compat": "^5.4.0-alpha.64", ++ "@ember-data-types/request": "^5.4.0-alpha.64", ++ "@ember-data-types/request-utils": "^5.4.0-alpha.64", ++ "@ember-data-types/tracking": "^5.4.0-alpha.64", ++ "@warp-drive-types/core-types": "^0.0.0-alpha.50", "ember-data": "^4.12.7", -+ "ember-data-types": "^5.4.0-alpha.52", ++ "ember-data-types": "^5.4.0-alpha.64", ``` diff --git a/package.json b/package.json index b490f81e3fa..3810e78167a 100644 --- a/package.json +++ b/package.json @@ -7,19 +7,24 @@ "url": "git+ssh://git@github.com:emberjs/data.git" }, "scripts": { - "takeoff": "FORCE_COLOR=2 pnpm install --reporter=append-only", - "prepare": "pnpm build", + "takeoff": "FORCE_COLOR=2 pnpm install --prefer-offline --reporter=append-only", + "prepare": "turbo run build:infra; pnpm --filter './packages/*' run --parallel --if-present sync-hardlinks; turbo run build:pkg; pnpm run prepare:types; pnpm run _task:sync-hardlinks;", + "prepare:types": "tsc --build; turbo run build:glint;", "release": "./release/index.ts", - "build": "turbo _build --log-order=stream --filter=./packages/* --concurrency=1; pnpm run sync:tests", - "sync:tests": "pnpm run --filter=./tests/* -r --workspace-concurrency=1 --if-present _syncPnpm", + "build": "turbo _build --log-order=stream --filter=./packages/* --concurrency=10;", + "_task:sync-hardlinks": "pnpm run -r --parallel --if-present sync-hardlinks;", "build:docs": "mkdir -p packages/-ember-data/dist && cd ./docs-generator && node ./compile-docs.js", - "lint": "bun run turbo --log-order=stream lint --concurrency=1", + "lint:tests": "turbo --log-order=stream lint --filter=./tests/* --continue --concurrency=10", + "lint:pkg": "turbo --log-order=stream lint --filter=./packages/* --continue --concurrency=10", + "lint": "pnpm run _task:sync-hardlinks; turbo --log-order=stream lint --continue --concurrency=10", + "lint:fix": "pnpm run _task:sync-hardlinks; turbo --log-order=stream lint --continue --concurrency=10 -- --fix", "lint:prettier": "prettier --check --cache --cache-location=.prettier-cache --log-level=warn .", "lint:prettier:fix": "prettier --write --cache --cache-location=.prettier-cache --log-level=warn .", "preinstall": "npx only-allow pnpm", - "check:types": "bun run turbo --log-order=stream check:types --concurrency=1", - "test": "pnpm turbo test --concurrency=1", - "test:production": "pnpm turbo test:production --concurrency=1", + "check:test-types": "turbo --log-order=stream check:types --filter=./{tests,config}/* --continue --concurrency=10", + "check:types": "pnpm run _task:sync-hardlinks; bun run check:test-types", + "test": "pnpm run _task:sync-hardlinks; pnpm turbo test --concurrency=1", + "test:production": "pnpm run _task:sync-hardlinks; pnpm turbo test:production --concurrency=1", "test:try-one": "pnpm --filter main-test-app run test:try-one", "test:docs": "FORCE_COLOR=2 pnpm build:docs && pnpm run -r --workspace-concurrency=-1 --if-present test:docs", "test:blueprints": "pnpm run -r --workspace-concurrency=-1 --if-present test:blueprints", @@ -41,10 +46,10 @@ "common-tags": "^1.8.2", "debug": "^4.3.4", "execa": "^8.0.1", + "comment-json": "^4.2.3", "git-repo-version": "^1.0.2", "globby": "^14.0.0", "lerna-changelog": "^2.2.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10", "prettier": "^3.2.5", "prettier-plugin-ember-template-tag": "^2.0.2", "rimraf": "^5.0.5", @@ -59,13 +64,13 @@ "turbo": "^1.13.2" }, "engines": { - "node": ">= 18.20.2", + "node": ">= 22.1.0", "yarn": "use pnpm", "npm": "use pnpm", "pnpm": "8.15.6" }, "volta": { - "node": "18.20.2", + "node": "22.1.0", "pnpm": "8.15.6" }, "packageManager": "pnpm@8.15.6", @@ -107,6 +112,21 @@ "ember-source": "*", "@ember/test-helpers": "*" } + }, + "ember-auto-import": { + "dependencies": { + "webpack": "*" + } + }, + "ember-source": { + "dependencies": { + "webpack": "*" + } + }, + "@ember/test-helpers": { + "dependencies": { + "webpack": "*" + } } }, "overrides": { @@ -116,9 +136,12 @@ "broccoli-merge-trees": "^4.2.0", "@glimmer/validator": "^0.89.0", "@glint/template": "^1.4.0", + "@ember/test-helpers": "3.3.0", + "ember-source": "~5.7.0", "ember-cli-babel": "^8.2.0", "ember-cli-htmlbars": "^6.3.0", "ember-cli-typescript": "^5.2.1", + "webpack": "5.91.0", "@ember/string": "3.1.1", "qunit": "2.19.4", "ember-compatibility-helpers": "^1.2.7", @@ -126,9 +149,7 @@ }, "peerDependencyRules": { "ignoreMissing": [ - "rsvp", - "webpack", - "ember-auto-import" + "rsvp" ], "allowAny": [ "ember-source", diff --git a/packages/-ember-data/.eslintrc.cjs b/packages/-ember-data/.eslintrc.cjs deleted file mode 100644 index 2b46dd160a1..00000000000 --- a/packages/-ember-data/.eslintrc.cjs +++ /dev/null @@ -1,34 +0,0 @@ -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 qunit = require('@warp-drive/internal-config/eslint/qunit.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.config(), - node.defaults(), - typescript.defaults(), - qunit.defaults({ - files: ['addon-test-support/**/*.{js,ts}'], - }), - ], -}; diff --git a/packages/-ember-data/.npmignore b/packages/-ember-data/.npmignore deleted file mode 100644 index d4910ea2c6f..00000000000 --- a/packages/-ember-data/.npmignore +++ /dev/null @@ -1,45 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts -yarn-error.log - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# ember-data -/bin -/docs -/node-tests -.appveyor.yml -lib/scripts - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json diff --git a/packages/-ember-data/addon-main.cjs b/packages/-ember-data/addon-main.cjs new file mode 100644 index 00000000000..b2baca19f95 --- /dev/null +++ b/packages/-ember-data/addon-main.cjs @@ -0,0 +1,16 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +const addon = addonShim(__dirname); +addon.options = addon.options || {}; +addon.options['@embroider/macros'] = addon.options['@embroider/macros'] || {}; +const pkg = require('./package.json'); +addon.options['@embroider/macros'].setOwnConfig = { + VERSION: pkg.version, +}; +if (pkg['ember-addon'].version === 1) { + delete addon.treeForApp; +} + +module.exports = addon; diff --git a/packages/-ember-data/addon/version.d.ts b/packages/-ember-data/addon/version.d.ts deleted file mode 100644 index 3aad10ba0f4..00000000000 --- a/packages/-ember-data/addon/version.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -const VERSION: string; - -export default VERSION; diff --git a/packages/-ember-data/app/transforms/boolean.js b/packages/-ember-data/app/transforms/boolean.js index 1abb64ba90c..f81d226ec8e 100644 --- a/packages/-ember-data/app/transforms/boolean.js +++ b/packages/-ember-data/app/transforms/boolean.js @@ -1,6 +1,6 @@ import { deprecate } from '@ember/debug'; -export { BooleanTransform as default } from '@ember-data/serializer/-private'; +export { BooleanTransform as default } from '@ember-data/serializer/transform'; deprecate( "You are relying on ember-data auto-magically installing the BooleanTransform. Use `export { BooleanTransform as default } from '@ember-data/serializer/transform';` in app/transforms/boolean.js instead", diff --git a/packages/-ember-data/app/transforms/date.js b/packages/-ember-data/app/transforms/date.js index f08afc83f30..855f5c5b72f 100644 --- a/packages/-ember-data/app/transforms/date.js +++ b/packages/-ember-data/app/transforms/date.js @@ -1,6 +1,6 @@ import { deprecate } from '@ember/debug'; -export { DateTransform as default } from '@ember-data/serializer/-private'; +export { DateTransform as default } from '@ember-data/serializer/transform'; deprecate( "You are relying on ember-data auto-magically installing the DateTransform. Use `export { DateTransform as default } from '@ember-data/serializer/transform';` in app/transforms/date.js instead", diff --git a/packages/-ember-data/app/transforms/number.js b/packages/-ember-data/app/transforms/number.js index d6aa4bd0bf4..710d397de3a 100644 --- a/packages/-ember-data/app/transforms/number.js +++ b/packages/-ember-data/app/transforms/number.js @@ -1,6 +1,6 @@ import { deprecate } from '@ember/debug'; -export { NumberTransform as default } from '@ember-data/serializer/-private'; +export { NumberTransform as default } from '@ember-data/serializer/transform'; deprecate( "You are relying on ember-data auto-magically installing the NumberTransform. Use `export { NumberTransform as default } from '@ember-data/serializer/transform';` in app/transforms/number.js instead", diff --git a/packages/-ember-data/app/transforms/string.js b/packages/-ember-data/app/transforms/string.js index e3e61669be9..956a4fcdcb1 100644 --- a/packages/-ember-data/app/transforms/string.js +++ b/packages/-ember-data/app/transforms/string.js @@ -1,6 +1,6 @@ import { deprecate } from '@ember/debug'; -export { StringTransform as default } from '@ember-data/serializer/-private'; +export { StringTransform as default } from '@ember-data/serializer/transform'; deprecate( "You are relying on ember-data auto-magically installing the StringTransform. Use `export { StringTransform as default } from '@ember-data/serializer/transform';` in app/transforms/string.js instead", diff --git a/packages/-ember-data/babel.config.mjs b/packages/-ember-data/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/-ember-data/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/-ember-data/eslint.config.mjs b/packages/-ember-data/eslint.config.mjs new file mode 100644 index 00000000000..a9ddf75ce43 --- /dev/null +++ b/packages/-ember-data/eslint.config.mjs @@ -0,0 +1,42 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: [ + '@embroider/macros', + '@ember/application/namespace', + 'ember', + 'ember-inflector', + '@ember/debug', + '@ember/array/proxy', + '@ember/object/promise-proxy-mixin', + '@ember/object/proxy', + '@ember/application', + ], + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + }, + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + qunit.ember({ + files: ['src/test-support/**/*.{js,ts}'], + allowedImports: ['@ember/debug', '@ember/owner'], + }), +]; diff --git a/packages/-ember-data/index.js b/packages/-ember-data/index.js deleted file mode 100644 index 801abd94d8e..00000000000 --- a/packages/-ember-data/index.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; -const merge = require('broccoli-merge-trees'); -const addonBuildConfigForDataPackage = require('@ember-data/private-build-infra/src/addon-build-config-for-data-package'); -const version = require('@ember-data/private-build-infra/src/create-version-module'); - -const addonBaseConfig = addonBuildConfigForDataPackage(require('./package.json')); - -module.exports = Object.assign({}, addonBaseConfig, { - treeForAddon(tree) { - this._originalSuper = this._super; - tree = merge([tree, version()]); - return this._super.treeForAddon.call(this, tree); - }, -}); diff --git a/packages/-ember-data/package.json b/packages/-ember-data/package.json index b8f46589117..27197227866 100644 --- a/packages/-ember-data/package.json +++ b/packages/-ember-data/package.json @@ -2,6 +2,9 @@ "name": "ember-data", "version": "5.4.0-alpha.64", "description": "The lightweight reactive data library for JavaScript applications", + "keywords": [ + "ember-addon" + ], "repository": { "type": "git", "url": "git+ssh://git@github.com:emberjs/data.git", @@ -12,12 +15,22 @@ "test": "tests" }, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "move-dts": "bun ../../scripts/copy-declarations.mjs addon", - "build:types": "tsc --build", - "_build": "bun run build:types && bun run move-dts", - "prepack": "bun run _build && cd ../../ && bun run build:docs", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run _build && cd ../../ && bun run build:docs" + }, + "ember-addon": { + "main": "addon-main.cjs", + "type": "addon", + "version": 1, + "app-js": { + "./initializers/ember-data.js": "./app/initializers/ember-data.js", + "./services/store.js": "./app/services/store.js", + "./transforms/date.js": "./app/transforms/date.js", + "./transforms/number.js": "./app/transforms/number.js", + "./transforms/string.js": "./app/transforms/string.js", + "./transforms/boolean.js": "./app/transforms/boolean.js" + } }, "files": [ "dist/docs/data.json", @@ -25,9 +38,8 @@ "ember-data-logo-light.svg", "LICENSE.md", "README.md", - "index.js", - "addon", - "addon-test-support", + "addon-main.cjs", + "dist", "app", "blueprints", "unstable-preview-types" @@ -35,41 +47,19 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" + }, + "./test-support": { + "types": "./unstable-preview-types/test-support/index.d.ts", + "default": "./dist/test-support/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "author": "", "license": "MIT", - "peerDependencies": { - "@ember/string": "^3.1.1" - }, - "dependencies": { - "@ember-data/adapter": "workspace:5.4.0-alpha.64", - "@ember-data/debug": "workspace:5.4.0-alpha.64", - "@ember-data/graph": "workspace:5.4.0-alpha.64", - "@ember-data/json-api": "workspace:5.4.0-alpha.64", - "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", - "@ember-data/model": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", - "@ember-data/request": "workspace:5.4.0-alpha.64", - "@ember-data/request-utils": "workspace:5.4.0-alpha.64", - "@ember-data/serializer": "workspace:5.4.0-alpha.64", - "@ember-data/store": "workspace:5.4.0-alpha.64", - "@ember-data/tracking": "workspace:5.4.0-alpha.64", - "@ember/edition-utils": "^1.2.0", - "@embroider/macros": "^1.15.1", - "@warp-drive/core-types": "workspace:0.0.0-alpha.50", - "broccoli-merge-trees": "^4.2.0", - "ember-auto-import": "^2.7.2", - "ember-cli-babel": "^8.2.0", - "ember-inflector": "^4.0.2", - "typescript": "^5.4.5", - "webpack": "^5.91.0" - }, "dependenciesMeta": { "@ember-data/adapter": { "injected": true @@ -104,9 +94,6 @@ "@ember-data/tracking": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember/string": { "injected": true }, @@ -115,28 +102,68 @@ }, "ember-inflector": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true + } + }, + "dependencies": { + "@ember-data/adapter": "workspace:5.4.0-alpha.64", + "@ember-data/debug": "workspace:5.4.0-alpha.64", + "@ember-data/graph": "workspace:5.4.0-alpha.64", + "@ember-data/json-api": "workspace:5.4.0-alpha.64", + "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", + "@ember-data/model": "workspace:5.4.0-alpha.64", + "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/request-utils": "workspace:5.4.0-alpha.64", + "@ember-data/serializer": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@ember/edition-utils": "^1.2.0", + "@embroider/macros": "^1.15.1", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "ember-inflector": "^4.0.2", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" + }, + "peerDependencies": { + "@ember/string": "^3.1.1", + "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", + "qunit": "^2.18.0" + }, + "peerDependenciesMeta": { + "@ember/test-helpers": { + "optional": true + }, + "@ember/test-waiters": { + "optional": true + }, + "qunit": { + "optional": true } }, "devDependencies": { "@babel/core": "^7.24.4", + "@babel/plugin-transform-typescript": "^7.24.4", + "@babel/preset-env": "^7.24.4", + "@babel/preset-typescript": "^7.24.1", "@ember/string": "3.1.1", + "@ember/test-waiters": "^3.1.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", + "@types/qunit": "^2.19.10", + "@ember/test-helpers": "^3.3.0", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", "eslint": "^8.57.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10" + "pnpm-sync-dependencies-meta-injected": "0.0.10", + "vite": "^5.2.11", + "typescript": "^5.4.5", + "qunit": "^2.18.0" }, "engines": { - "node": ">= 18.20.2" - }, - "keywords": [ - "ember-addon" - ], - "ember-addon": { - "main": "index.js", - "type": "addon", - "version": 1 + "node": ">= 22.1.0" }, "ember": { "edition": "octane" diff --git a/packages/-ember-data/addon/-private/core.ts b/packages/-ember-data/src/-private/core.ts similarity index 91% rename from packages/-ember-data/addon/-private/core.ts rename to packages/-ember-data/src/-private/core.ts index 9089738acaa..54fdb8270ec 100644 --- a/packages/-ember-data/addon/-private/core.ts +++ b/packages/-ember-data/src/-private/core.ts @@ -1,7 +1,7 @@ import Namespace from '@ember/application/namespace'; import Ember from 'ember'; -import VERSION from 'ember-data/version'; +import VERSION from '../version'; export interface DS extends Namespace { VERSION: string; diff --git a/packages/-ember-data/addon/-private/index.ts b/packages/-ember-data/src/-private/index.ts similarity index 100% rename from packages/-ember-data/addon/-private/index.ts rename to packages/-ember-data/src/-private/index.ts diff --git a/packages/-ember-data/addon/adapter.ts b/packages/-ember-data/src/adapter.ts similarity index 100% rename from packages/-ember-data/addon/adapter.ts rename to packages/-ember-data/src/adapter.ts diff --git a/packages/-ember-data/addon/adapters/errors.ts b/packages/-ember-data/src/adapters/errors.ts similarity index 100% rename from packages/-ember-data/addon/adapters/errors.ts rename to packages/-ember-data/src/adapters/errors.ts diff --git a/packages/-ember-data/addon/adapters/json-api.ts b/packages/-ember-data/src/adapters/json-api.ts similarity index 100% rename from packages/-ember-data/addon/adapters/json-api.ts rename to packages/-ember-data/src/adapters/json-api.ts diff --git a/packages/-ember-data/addon/adapters/rest.ts b/packages/-ember-data/src/adapters/rest.ts similarity index 100% rename from packages/-ember-data/addon/adapters/rest.ts rename to packages/-ember-data/src/adapters/rest.ts diff --git a/packages/-ember-data/addon/attr.ts b/packages/-ember-data/src/attr.ts similarity index 100% rename from packages/-ember-data/addon/attr.ts rename to packages/-ember-data/src/attr.ts diff --git a/packages/-ember-data/addon/index.ts b/packages/-ember-data/src/index.ts similarity index 97% rename from packages/-ember-data/addon/index.ts rename to packages/-ember-data/src/index.ts index c9e851d4187..39effef386b 100644 --- a/packages/-ember-data/addon/index.ts +++ b/packages/-ember-data/src/index.ts @@ -182,11 +182,15 @@ import JSONAPIAdapter from '@ember-data/adapter/json-api'; import RESTAdapter from '@ember-data/adapter/rest'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import Serializer from '@ember-data/serializer'; -import { BooleanTransform, DateTransform, NumberTransform, StringTransform } from '@ember-data/serializer/-private'; import JSONSerializer from '@ember-data/serializer/json'; import JSONAPISerializer from '@ember-data/serializer/json-api'; import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest'; -import Transform from '@ember-data/serializer/transform'; +import Transform, { + BooleanTransform, + DateTransform, + NumberTransform, + StringTransform, +} from '@ember-data/serializer/transform'; import { DS, @@ -198,7 +202,7 @@ import { RecordArrayManager, Snapshot, Store, -} from './-private'; +} from './-private/index'; import setupContainer from './setup-container'; deprecate( @@ -235,7 +239,6 @@ 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; @@ -281,8 +284,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; + DS.DebugAdapter = importSync('@ember-data/debug') as typeof import('@ember-data/debug').default; } DS.ManyArray = ManyArray; diff --git a/packages/-ember-data/addon/model.ts b/packages/-ember-data/src/model.ts similarity index 100% rename from packages/-ember-data/addon/model.ts rename to packages/-ember-data/src/model.ts diff --git a/packages/-ember-data/addon/relationships.ts b/packages/-ember-data/src/relationships.ts similarity index 100% rename from packages/-ember-data/addon/relationships.ts rename to packages/-ember-data/src/relationships.ts diff --git a/packages/-ember-data/addon/serializer.ts b/packages/-ember-data/src/serializer.ts similarity index 100% rename from packages/-ember-data/addon/serializer.ts rename to packages/-ember-data/src/serializer.ts diff --git a/packages/-ember-data/addon/serializers/embedded-records-mixin.ts b/packages/-ember-data/src/serializers/embedded-records-mixin.ts similarity index 100% rename from packages/-ember-data/addon/serializers/embedded-records-mixin.ts rename to packages/-ember-data/src/serializers/embedded-records-mixin.ts diff --git a/packages/-ember-data/addon/serializers/json-api.ts b/packages/-ember-data/src/serializers/json-api.ts similarity index 100% rename from packages/-ember-data/addon/serializers/json-api.ts rename to packages/-ember-data/src/serializers/json-api.ts diff --git a/packages/-ember-data/addon/serializers/json.ts b/packages/-ember-data/src/serializers/json.ts similarity index 100% rename from packages/-ember-data/addon/serializers/json.ts rename to packages/-ember-data/src/serializers/json.ts diff --git a/packages/-ember-data/addon/serializers/rest.ts b/packages/-ember-data/src/serializers/rest.ts similarity index 100% rename from packages/-ember-data/addon/serializers/rest.ts rename to packages/-ember-data/src/serializers/rest.ts diff --git a/packages/-ember-data/addon/setup-container.ts b/packages/-ember-data/src/setup-container.ts similarity index 100% rename from packages/-ember-data/addon/setup-container.ts rename to packages/-ember-data/src/setup-container.ts diff --git a/packages/-ember-data/addon/store.ts b/packages/-ember-data/src/store.ts similarity index 84% rename from packages/-ember-data/addon/store.ts rename to packages/-ember-data/src/store.ts index 22910a65f9a..f96cab98976 100644 --- a/packages/-ember-data/addon/store.ts +++ b/packages/-ember-data/src/store.ts @@ -1,5 +1,3 @@ -import type { StableRecordIdentifier } from '@warp-drive/core-types'; - import JSONAPICache from '@ember-data/json-api'; import { adapterFor, @@ -10,17 +8,17 @@ import { serializeRecord, serializerFor, } from '@ember-data/legacy-compat'; -import { FetchManager } from '@ember-data/legacy-compat/-private'; +import type { FetchManager } from '@ember-data/legacy-compat/-private'; import type Model from '@ember-data/model'; -import type { ModelStore } from '@ember-data/model/-private/model'; +import type { ModelStore } from '@ember-data/model/-private'; import { buildSchema, instantiateRecord, modelFor, teardownRecord } from '@ember-data/model/hooks'; import RequestManager from '@ember-data/request'; import Fetch from '@ember-data/request/fetch'; import BaseStore, { CacheHandler } from '@ember-data/store'; +import type { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; +import type { StableRecordIdentifier } from '@warp-drive/core-types'; 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'; -import { TypeFromInstance } from '@warp-drive/core-types/record'; +import type { TypeFromInstance } from '@warp-drive/core-types/record'; function hasRequestManager(store: BaseStore): boolean { return 'requestManager' in store; diff --git a/packages/-ember-data/addon-test-support/index.js b/packages/-ember-data/src/test-support/index.ts similarity index 62% rename from packages/-ember-data/addon-test-support/index.js rename to packages/-ember-data/src/test-support/index.ts index 4bc6ab39567..b4ec66d35d3 100644 --- a/packages/-ember-data/addon-test-support/index.js +++ b/packages/-ember-data/src/test-support/index.ts @@ -1,9 +1,11 @@ -import { assert } from '@ember/debug'; +import type Owner from '@ember/owner'; import { render as renderTemplate, settled } from '@ember/test-helpers'; import * as QUnit from 'qunit'; +import type Store from '@ember-data/store'; import { PRODUCTION } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; /* Temporary replacement for the render test helper @@ -11,17 +13,18 @@ import { PRODUCTION } from '@warp-drive/build-config/env'; an app to incrementally migrate to tests that render async relationships in stages with potential for tests in between. */ -export async function render(template) { +export async function render(template: object) { await renderTemplate(template); - const owner = QUnit.config.current.testEnvironment.owner; - const pending = owner.lookup('service:store')._getAllPending(); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const owner = QUnit.config.current.testEnvironment.owner as Owner; + const pending = (owner.lookup('service:store') as Store)._getAllPending(); // this should only be necessary in production tests // where @ember/test-waiters is deactivated :() if (PRODUCTION) { assert( `No pending requests exist in this test, use \`import { render } from '@ember/test-helpers';\``, - pending.length + pending?.length ); await pending; diff --git a/packages/-ember-data/addon/transform.ts b/packages/-ember-data/src/transform.ts similarity index 100% rename from packages/-ember-data/addon/transform.ts rename to packages/-ember-data/src/transform.ts diff --git a/packages/-ember-data/src/version.ts b/packages/-ember-data/src/version.ts new file mode 100644 index 00000000000..7816c776d2e --- /dev/null +++ b/packages/-ember-data/src/version.ts @@ -0,0 +1,4 @@ +import { getOwnConfig } from '@embroider/macros'; + +const VERSION = getOwnConfig<{ VERSION: string }>().VERSION; +export default VERSION; diff --git a/packages/-ember-data/tsconfig.json b/packages/-ember-data/tsconfig.json index dff854b1b21..a7834450ba3 100644 --- a/packages/-ember-data/tsconfig.json +++ b/packages/-ember-data/tsconfig.json @@ -1,6 +1,5 @@ { - "include": ["addon/**/*"], - "baseUrl": ".", + "include": ["src/**/*"], "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,49 +7,95 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, - "rootDir": "addon", - + "rootDir": "src", + "baseUrl": ".", "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"], - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/adapter": ["../adapter/unstable-preview-types"], + "@ember-data/adapter/*": ["../adapter/unstable-preview-types/*"], + "@ember-data/debug": ["../debug/unstable-preview-types"], + "@ember-data/debug/*": ["../debug/unstable-preview-types/*"], + "@ember-data/graph": ["../graph/unstable-preview-types"], + "@ember-data/graph/*": ["../graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../model/unstable-preview-types"], + "@ember-data/model/*": ["../model/unstable-preview-types/*"], + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../request-utils/unstable-preview-types/*"], + "@ember-data/serializer": ["../serializer/unstable-preview-types"], + "@ember-data/serializer/*": ["../serializer/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"] } }, "references": [ - { "path": "../adapter" }, - { "path": "../graph" }, - { "path": "../json-api" }, - { "path": "../legacy-compat" }, - { "path": "../model" }, - { "path": "../request" }, - { "path": "../request-utils" }, - { "path": "../serializer" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../adapter" + }, + { + "path": "../graph" + }, + { + "path": "../json-api" + }, + { + "path": "../legacy-compat" + }, + { + "path": "../model" + }, + { + "path": "../request" + }, + { + "path": "../request-utils" + }, + { + "path": "../serializer" + }, + { + "path": "../store" + }, + { + "path": "../debug" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/-ember-data/vite.config.mjs b/packages/-ember-data/vite.config.mjs new file mode 100644 index 00000000000..12a68c56b7f --- /dev/null +++ b/packages/-ember-data/vite.config.mjs @@ -0,0 +1,26 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/application/namespace', + 'ember', + '@ember/debug', + '@ember/array/proxy', + '@ember/object/promise-proxy-mixin', + '@ember/object/proxy', + '@ember/application', + '@ember/owner', + 'ember-inflector', + 'qunit', + '@ember/test-waiters', + '@ember/test-helpers', +]; + +export const entryPoints = ['./src/**/*.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/active-record/.eslintrc.cjs b/packages/active-record/.eslintrc.cjs deleted file mode 100644 index dbf68cb61a9..00000000000 --- a/packages/active-record/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/active-record/addon-main.cjs b/packages/active-record/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/active-record/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/active-record/addon-main.js b/packages/active-record/addon-main.js deleted file mode 100644 index 459ef9174ca..00000000000 --- a/packages/active-record/addon-main.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - name: require('./package.json').name, - - treeForVendor() { - return; - }, - treeForPublic() { - return; - }, - treeForStyles() { - return; - }, - treeForAddonStyles() { - return; - }, - treeForApp() { - return; - }, -}; diff --git a/packages/active-record/babel.config.json b/packages/active-record/babel.config.json deleted file mode 100644 index 0e04314a08c..00000000000 --- a/packages/active-record/babel.config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "plugins": [ - "@babel/plugin-transform-runtime", - ["@babel/plugin-transform-typescript", { "allowDeclareFields": true }], - ["@babel/plugin-proposal-decorators", { "legacy": true }], - "@babel/plugin-transform-class-properties" - ] -} diff --git a/packages/active-record/babel.config.mjs b/packages/active-record/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/active-record/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/active-record/eslint.config.mjs b/packages/active-record/eslint.config.mjs new file mode 100644 index 00000000000..4a57441ad69 --- /dev/null +++ b/packages/active-record/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['ember-inflector', '@ember/string'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/active-record/package.json b/packages/active-record/package.json index cb5f31947fe..0ec70c9fb59 100644 --- a/packages/active-record/package.json +++ b/packages/active-record/package.json @@ -13,15 +13,40 @@ "homepage": "https://github.com/emberjs/data", "bugs": "https://github.com/emberjs/data/issues", "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "keywords": [ "ember-addon" ], - "volta": { - "extends": "../../package.json" + "files": [ + "addon-main.cjs", + "dist", + "README.md", + "LICENSE.md", + "ember-data-logo-dark.svg", + "ember-data-logo-light.svg", + "unstable-preview-types" + ], + "exports": { + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./dist/*.js" + } + }, + "scripts": { + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" + }, + "ember-addon": { + "main": "addon-main.cjs", + "type": "addon", + "version": 1 }, "dependencies": { + "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-cli-babel": "^8.2.0" }, "peerDependencies": { @@ -31,6 +56,24 @@ "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "ember-inflector": "^4.0.2" }, + "devDependencies": { + "@babel/core": "^7.24.4", + "@babel/plugin-transform-typescript": "^7.24.4", + "@babel/preset-typescript": "^7.24.1", + "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/request-utils": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@ember/string": "^3.1.1", + "@glimmer/component": "^1.1.2", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "ember-inflector": "^4.0.2", + "ember-source": "~5.7.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10", + "vite": "^5.2.11", + "typescript": "^5.4.5" + }, "dependenciesMeta": { "ember-inflector": { "injected": true @@ -41,6 +84,9 @@ "@warp-drive/core-types": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@ember-data/store": { "injected": true }, @@ -54,63 +100,10 @@ "injected": true } }, - "files": [ - "addon-main.js", - "addon", - "README.md", - "LICENSE.md", - "ember-data-logo-dark.svg", - "ember-data-logo-light.svg", - "unstable-preview-types" - ], - "exports": { - "./*": { - "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" - } - }, - "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" - }, - "ember-addon": { - "main": "addon-main.js", - "type": "addon", - "version": 1 - }, - "devDependencies": { - "@babel/cli": "^7.24.1", - "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", - "@babel/plugin-transform-typescript": "^7.24.4", - "@babel/preset-env": "^7.24.4", - "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", - "@ember-data/request": "workspace:5.4.0-alpha.64", - "@ember-data/request-utils": "workspace:5.4.0-alpha.64", - "@ember-data/store": "workspace:5.4.0-alpha.64", - "@ember-data/tracking": "workspace:5.4.0-alpha.64", - "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", - "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", - "@warp-drive/core-types": "workspace:0.0.0-alpha.50", - "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", - "ember-inflector": "^4.0.2", - "ember-source": "~5.7.0", - "rollup": "^4.14.3", - "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10" - }, "ember": { "edition": "octane" + }, + "volta": { + "extends": "../../package.json" } } diff --git a/packages/active-record/rollup.config.mjs b/packages/active-record/rollup.config.mjs deleted file mode 100644 index 683b7c9b8b0..00000000000 --- a/packages/active-record/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external(['@ember/debug']), - - 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(['request.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/active-record/src/-private/builders/save-record.ts b/packages/active-record/src/-private/builders/save-record.ts index 4f055c805b4..3e64613e7ea 100644 --- a/packages/active-record/src/-private/builders/save-record.ts +++ b/packages/active-record/src/-private/builders/save-record.ts @@ -1,4 +1,3 @@ -import { assert } from '@ember/debug'; import { underscore } from '@ember/string'; import { pluralize } from 'ember-inflector'; @@ -10,6 +9,7 @@ import { type UpdateRecordUrlOptions, } from '@ember-data/request-utils'; import { recordIdentifierFor } from '@ember-data/store'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { ConstrainedRequestOptions, diff --git a/packages/active-record/tsconfig.json b/packages/active-record/tsconfig.json index e9832428f85..eb3e30415db 100644 --- a/packages/active-record/tsconfig.json +++ b/packages/active-record/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,42 +7,60 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../request" }, - { "path": "../request-utils" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../request" + }, + { + "path": "../request-utils" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/active-record/vite.config.mjs b/packages/active-record/vite.config.mjs new file mode 100644 index 00000000000..7840d9c894a --- /dev/null +++ b/packages/active-record/vite.config.mjs @@ -0,0 +1,12 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = []; +export const entryPoints = ['./src/request.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/adapter/.eslintrc.cjs b/packages/adapter/.eslintrc.cjs deleted file mode 100644 index 8b791b08b4b..00000000000 --- a/packages/adapter/.eslintrc.cjs +++ /dev/null @@ -1,34 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/adapter/addon-main.cjs b/packages/adapter/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/adapter/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/adapter/addon-main.js b/packages/adapter/addon-main.js deleted file mode 100644 index 16a41526809..00000000000 --- a/packages/adapter/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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/adapter/babel.config.js b/packages/adapter/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/adapter/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/adapter/babel.config.mjs b/packages/adapter/babel.config.mjs new file mode 100644 index 00000000000..c23b859273f --- /dev/null +++ b/packages/adapter/babel.config.mjs @@ -0,0 +1,12 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ['module:decorator-transforms', { runtime: { import: 'decorator-transforms/runtime' } }], + ], +}; diff --git a/packages/adapter/blueprints/adapter-test/index.js b/packages/adapter/blueprints/adapter-test/index.js index 3181a7f245f..309f6ce25ca 100644 --- a/packages/adapter/blueprints/adapter-test/index.js +++ b/packages/adapter/blueprints/adapter-test/index.js @@ -1,15 +1,15 @@ const path = require('path'); const testInfo = require('ember-cli-test-info'); -const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); -const modulePrefixForProject = require('@ember-data/private-build-infra/src/utilities/module-prefix-for-project'); +const { dasherize } = require('ember-cli-string-utils'); -module.exports = useTestFrameworkDetector({ - description: 'Generates an ember-data adapter unit test', +module.exports = { + description: 'Generates an EmberData adapter unit test', + supportsAddon() { return false; }, root: __dirname, - fileMapTokens(options) { + fileMapTokens() { return { __root__() { return 'tests'; @@ -21,9 +21,15 @@ module.exports = useTestFrameworkDetector({ }, locals(options) { + const modulePrefix = dasherize(options.project.config().modulePrefix); return { friendlyTestDescription: testInfo.description(options.entity.name, 'Unit', 'Adapter'), - modulePrefix: modulePrefixForProject(options.project), + modulePrefix, }; }, -}); + + filesPath() { + return path.join(__dirname, 'qunit-files') + } +}; + diff --git a/packages/adapter/blueprints/adapter-test/qunit-files/__root__/__path__/__test__.js b/packages/adapter/blueprints/adapter-test/qunit-files/__root__/__path__/__test__.js index 5d9889eb364..60dfe272bdb 100644 --- a/packages/adapter/blueprints/adapter-test/qunit-files/__root__/__path__/__test__.js +++ b/packages/adapter/blueprints/adapter-test/qunit-files/__root__/__path__/__test__.js @@ -1,13 +1,12 @@ -import { module, test } from 'qunit'; - import { setupTest } from '<%= modulePrefix %>/tests/helpers'; +import { module, test } from 'qunit'; module('<%= friendlyTestDescription %>', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let adapter = this.owner.lookup('adapter:<%= dasherizedModuleName %>'); - assert.ok(adapter); + const adapter = this.owner.lookup('adapter:<%= dasherizedModuleName %>'); + assert.ok(adapter, 'adapter exists'); }); }); diff --git a/packages/adapter/blueprints/adapter/index.js b/packages/adapter/blueprints/adapter/index.js index 77ab1bcb103..75dd0e42ad7 100644 --- a/packages/adapter/blueprints/adapter/index.js +++ b/packages/adapter/blueprints/adapter/index.js @@ -1,14 +1,80 @@ -const extendFromApplicationEntity = require('@ember-data/private-build-infra/src/utilities/extend-from-application-entity'); -const useEditionDetector = require('@ember-data/private-build-infra/src/utilities/edition-detector'); +const path = require('path'); +const fs = require('fs'); -module.exports = useEditionDetector({ - description: 'Generates an ember-data adapter.', +const stringUtil = require('ember-cli-string-utils'); +const pathUtil = require('ember-cli-path-utils'); + +const { has } = require('@ember/edition-utils'); + +module.exports = { + description: 'Generates an ember-data Adapter.', availableOptions: [{ name: 'base-class', type: String }], root: __dirname, + filesPath() { + let hasOctane = has('octane'); + if (hasOctane && process.env.EMBER_EDITION === 'classic') { + hasOctane = false; //forcible override + } + let rootPath = hasOctane ? 'native-files' : 'files'; + return path.join(__dirname, rootPath); + }, + locals(options) { return extendFromApplicationEntity('adapter', 'JSONAPIAdapter', options); }, -}); +}; + +function extendFromApplicationEntity(type, baseClass, options) { + let isAddon = options.inRepoAddon || options.project.isEmberCLIAddon(); + + let entityName = options.entity.name; + let relativePath = pathUtil.getRelativePath(options.entity.name); + + if (options.pod && options.podPath) { + relativePath = pathUtil.getRelativePath(options.podPath + options.entity.name); + } + + let applicationEntityPath = path.join(options.project.root, 'app', `${type}s`, 'application.js'); + + let hasApplicationEntity = fs.existsSync(applicationEntityPath); + if (!isAddon && !options.baseClass && entityName !== 'application' && hasApplicationEntity) { + options.baseClass = 'application'; + } + + if (options.baseClass === entityName) { + throw new Error( + stringUtil.classify(type) + + 's cannot extend from themself. To resolve this, remove the `--base-class` option or change to a different base-class.' + ); + } + + let importStatement; + + if (options.baseClass) { + let baseClassPath = options.baseClass; + baseClass = stringUtil.classify(baseClassPath.replace('/', '-')); + baseClass = baseClass + stringUtil.classify(type); + + importStatement = `import ${baseClass} from '${relativePath}${baseClassPath}';`; + } else { + let baseClassPath = `@ember-data/${type}`; + + if (baseClass.startsWith('JSONAPI')) { + baseClassPath += '/json-api'; + } + + if (baseClass.startsWith('REST')) { + baseClassPath += '/rest'; + } + + importStatement = `import ${baseClass} from '${baseClassPath}';`; + } + + return { + importStatement, + baseClass, + }; +} diff --git a/packages/adapter/eslint.config.mjs b/packages/adapter/eslint.config.mjs new file mode 100644 index 00000000000..30da9a38859 --- /dev/null +++ b/packages/adapter/eslint.config.mjs @@ -0,0 +1,46 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js) ================ + js.browser({ + srcDirs: ['src'], + allowedImports: [ + '@ember/object', + '@ember/application', + '@ember/service', + '@ember/debug', + 'ember-inflector', + '@ember/object/mixin', + '@ember/string', + ], + }), + + // browser (ts) ================ + typescript.browser({ + files: ['**/*.ts', '**/*.gts'], + srcDirs: ['src'], + allowedImports: [ + '@ember/object', + '@ember/application', + '@ember/service', + '@ember/debug', + 'ember-inflector', + '@ember/object/mixin', + '@ember/string', + ], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/adapter/package.json b/packages/adapter/package.json index ec674996420..471a6458b3d 100644 --- a/packages/adapter/package.json +++ b/packages/adapter/package.json @@ -14,23 +14,21 @@ "author": "", "directories": {}, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, "files": [ "unstable-preview-types", "blueprints", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -39,11 +37,11 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "peerDependencies": { @@ -54,9 +52,6 @@ "@warp-drive/core-types": "workspace:0.0.0-alpha.50" }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@ember/string": { "injected": true }, @@ -86,25 +81,24 @@ }, "@ember-data/request-utils": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@embroider/macros": "^1.15.1", - "ember-cli-babel": "^8.2.0", - "ember-cli-test-info": "^1.0.0" + "ember-cli-test-info": "^1.0.0", + "ember-cli-string-utils": "^1.1.0", + "ember-cli-path-utils": "^1.0.0", + "@ember/edition-utils": "1.2.0", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", - "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", @@ -112,24 +106,21 @@ "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@ember/test-waiters": "^3.1.0", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", + "decorator-transforms": "^1.1.0", "@types/jquery": "^3.5.29", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-inflector": "^4.0.2", "ember-source": "~5.7.0", - "rollup": "^4.14.3", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10" + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/adapter/rollup.config.mjs b/packages/adapter/rollup.config.mjs deleted file mode 100644 index 8daafecff0f..00000000000 --- a/packages/adapter/rollup.config.mjs +++ /dev/null @@ -1,41 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external([ - '@embroider/macros', - '@ember/service', // inject the store to base Adapter - '@ember-data/store/-private', - '@ember/debug', // assert, deprecate - '@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 - // addon. Anything not listed here may get optimized away. - addon.publicEntrypoints(['index.js', 'error.js', 'json-api.js', 'rest.js', '-private.js']), - - nodeResolve({ extensions: ['.ts', '.js'] }), - babel({ - extensions: ['.ts', '.js'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/adapter/src/-private.ts b/packages/adapter/src/-private.ts index 4e05290b7ed..fc8d0b781a1 100644 --- a/packages/adapter/src/-private.ts +++ b/packages/adapter/src/-private.ts @@ -2,9 +2,9 @@ @module @ember-data/adapter */ -export { default as parseResponseHeaders } from './-private/utils/parse-response-headers'; +export { parseResponseHeaders } from './-private/utils/parse-response-headers'; export { determineBodyPromise } from './-private/utils/determine-body-promise'; export { serializeQueryParams } from './-private/utils/serialize-query-params'; -export { default as fetch, setupFastboot } from './-private/utils/fetch'; -export { default as BuildURLMixin } from './-private/build-url-mixin'; -export { default as serializeIntoHash } from './-private/utils/serialize-into-hash'; +export { getFetchFunction as fetch, setupFastboot } from './-private/utils/fetch'; +export { BuildURLMixin } from './-private/build-url-mixin'; +export { serializeIntoHash } from './-private/utils/serialize-into-hash'; diff --git a/packages/adapter/src/-private/build-url-mixin.ts b/packages/adapter/src/-private/build-url-mixin.ts index 93182157c4c..cfd9edbd15e 100644 --- a/packages/adapter/src/-private/build-url-mixin.ts +++ b/packages/adapter/src/-private/build-url-mixin.ts @@ -19,7 +19,7 @@ import type { Snapshot, SnapshotRecordArray } from '@ember-data/legacy-compat/-p // `interface BuildURLMixin { buildURL: typeof buildURL }` // then an extending class overwriting one of the methods will break because typescript // thinks it is a switch from an instance prop (that is a method) to an instance method. -interface BuildURLMixin { +export interface BuildURLMixin { buildURL( this: MixtBuildURLMixin, modelName: string, @@ -693,4 +693,4 @@ const mixinProps: BuildURLMixin = { pathForType, }; -export default Mixin.create(mixinProps); +export const BuildURLMixin = Mixin.create(mixinProps); diff --git a/packages/adapter/src/-private/utils/continue-on-reject.ts b/packages/adapter/src/-private/utils/continue-on-reject.ts index 250e8433ac4..4c1ec8cfc6b 100644 --- a/packages/adapter/src/-private/utils/continue-on-reject.ts +++ b/packages/adapter/src/-private/utils/continue-on-reject.ts @@ -4,6 +4,6 @@ * * @internal */ -export default function continueOnReject(promise: Promise): Promise { +export function continueOnReject(promise: Promise): Promise { return Promise.resolve(promise).catch((e) => e as T); } diff --git a/packages/adapter/src/-private/utils/determine-body-promise.ts b/packages/adapter/src/-private/utils/determine-body-promise.ts index 99fd8925432..b361c8db91a 100644 --- a/packages/adapter/src/-private/utils/determine-body-promise.ts +++ b/packages/adapter/src/-private/utils/determine-body-promise.ts @@ -3,7 +3,7 @@ import { warn } from '@ember/debug'; import { DEBUG } from '@warp-drive/build-config/env'; import type { RequestData } from '../../rest'; -import continueOnReject from './continue-on-reject'; +import { continueOnReject } from './continue-on-reject'; type Payload = Error | Record | unknown[] | string | undefined; diff --git a/packages/adapter/src/-private/utils/fetch.ts b/packages/adapter/src/-private/utils/fetch.ts index 8dd752dff91..b43e4219bc5 100644 --- a/packages/adapter/src/-private/utils/fetch.ts +++ b/packages/adapter/src/-private/utils/fetch.ts @@ -1,4 +1,4 @@ -import { assert } from '@ember/debug'; +import { assert } from '@warp-drive/build-config/macros'; type FetchFunction = (input: RequestInfo, init?: RequestInit | undefined) => Promise; @@ -6,7 +6,7 @@ let _fetch: (() => FetchFunction) | null = null; type MockRequest = { protocol?: string; get(key: string): string | undefined }; let REQUEST: MockRequest = null as unknown as MockRequest; -export default function getFetchFunction(): FetchFunction { +export function getFetchFunction(): FetchFunction { // return cached fetch function if (_fetch !== null) { return _fetch(); diff --git a/packages/adapter/src/-private/utils/parse-response-headers.ts b/packages/adapter/src/-private/utils/parse-response-headers.ts index 3369092c308..09fd71011dc 100644 --- a/packages/adapter/src/-private/utils/parse-response-headers.ts +++ b/packages/adapter/src/-private/utils/parse-response-headers.ts @@ -1,6 +1,6 @@ const newline = /\r?\n/; -export default function parseResponseHeaders(headersString: string): Record { +export function parseResponseHeaders(headersString: string): Record { const headers = Object.create(null) as Record; if (!headersString) { diff --git a/packages/adapter/src/-private/utils/serialize-into-hash.ts b/packages/adapter/src/-private/utils/serialize-into-hash.ts index 8bc1651c42b..d0f7b27f8ad 100644 --- a/packages/adapter/src/-private/utils/serialize-into-hash.ts +++ b/packages/adapter/src/-private/utils/serialize-into-hash.ts @@ -1,18 +1,14 @@ -import { assert } from '@ember/debug'; - +import type { MinimumSerializerInterface, SerializerOptions } from '@ember-data/legacy-compat'; import { type Snapshot, upgradeStore } from '@ember-data/legacy-compat/-private'; -import type { - MinimumSerializerInterface, - SerializerOptions, -} 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 { ModelSchema } from '@ember-data/store/types'; +import { assert } from '@warp-drive/build-config/macros'; type SerializerWithSerializeIntoHash = MinimumSerializerInterface & { serializeIntoHash?(hash: object, modelClass: ModelSchema, snapshot: Snapshot, options?: SerializerOptions): void; }; -export default function serializeIntoHash( +export function serializeIntoHash( store: Store, modelClass: ModelSchema, snapshot: Snapshot, diff --git a/packages/adapter/src/-private/utils/serialize-query-params.ts b/packages/adapter/src/-private/utils/serialize-query-params.ts index d9315ea68a5..ae509c9aeac 100644 --- a/packages/adapter/src/-private/utils/serialize-query-params.ts +++ b/packages/adapter/src/-private/utils/serialize-query-params.ts @@ -1,4 +1,4 @@ -import { assert } from '@ember/debug'; +import { assert } from '@warp-drive/build-config/macros'; const RBRACKET = /\[\]$/; diff --git a/packages/adapter/src/error.js b/packages/adapter/src/error.js index 23eb11c62ba..f19e7149b9d 100644 --- a/packages/adapter/src/error.js +++ b/packages/adapter/src/error.js @@ -1,7 +1,8 @@ /** @module @ember-data/adapter/error */ -import { assert } from '@ember/debug'; +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; /** ## Overview @@ -50,7 +51,6 @@ import { assert } from '@ember/debug'; `under-maintenance` route: ```app/routes/application.js - import Route from '@ember/routing/route'; import MaintenanceError from '../adapters/maintenance-error'; export default class ApplicationRoute extends Route { @@ -71,7 +71,7 @@ import { assert } from '@ember/debug'; @class AdapterError @public */ -function AdapterError(errors, message = 'Adapter operation failed') { +function _AdapterError(errors, message = 'Adapter operation failed') { this.isAdapterError = true; const error = Error.call(this, message); @@ -93,6 +93,12 @@ function AdapterError(errors, message = 'Adapter operation failed') { ]; } +_AdapterError.prototype = Object.create(Error.prototype); +_AdapterError.prototype.code = 'AdapterError'; +_AdapterError.extend = extendFn(_AdapterError); + +const AdapterError = getOrSetGlobal('AdapterError', _AdapterError); + export default AdapterError; function extendFn(ErrorClass) { @@ -112,10 +118,6 @@ function extend(ParentErrorClass, defaultMessage) { return ErrorClass; } -AdapterError.prototype = Object.create(Error.prototype); -AdapterError.prototype.code = 'AdapterError'; -AdapterError.extend = extendFn(AdapterError); - /** A `InvalidError` is used by an adapter to signal the external API was unable to process a request because the content was not @@ -177,7 +179,10 @@ AdapterError.extend = extendFn(AdapterError); @extends AdapterError */ // TODO @deprecate extractError documentation -export const InvalidError = extend(AdapterError, 'The adapter rejected the commit because it was invalid'); +export const InvalidError = getOrSetGlobal( + 'InvalidError', + extend(AdapterError, 'The adapter rejected the commit because it was invalid') +); InvalidError.prototype.code = 'InvalidError'; /** @@ -189,9 +194,7 @@ InvalidError.prototype.code = 'InvalidError'; connection if an adapter operation has timed out: ```app/routes/application.js - import Route from '@ember/routing/route'; import { TimeoutError } from '@ember-data/adapter/error'; - import { action } from '@ember/object'; export default class ApplicationRoute extends Route { @action @@ -211,7 +214,7 @@ InvalidError.prototype.code = 'InvalidError'; @public @extends AdapterError */ -export const TimeoutError = extend(AdapterError, 'The adapter operation timed out'); +export const TimeoutError = getOrSetGlobal('TimeoutError', extend(AdapterError, 'The adapter operation timed out')); TimeoutError.prototype.code = 'TimeoutError'; /** @@ -224,7 +227,7 @@ TimeoutError.prototype.code = 'TimeoutError'; @public @extends AdapterError */ -export const AbortError = extend(AdapterError, 'The adapter operation was aborted'); +export const AbortError = getOrSetGlobal('AbortError', extend(AdapterError, 'The adapter operation was aborted')); AbortError.prototype.code = 'AbortError'; /** @@ -237,9 +240,7 @@ AbortError.prototype.code = 'AbortError'; request is unauthorized: ```app/routes/application.js - import Route from '@ember/routing/route'; import { UnauthorizedError } from '@ember-data/adapter/error'; - import { action } from '@ember/object'; export default class ApplicationRoute extends Route { @action @@ -259,7 +260,10 @@ AbortError.prototype.code = 'AbortError'; @public @extends AdapterError */ -export const UnauthorizedError = extend(AdapterError, 'The adapter operation is unauthorized'); +export const UnauthorizedError = getOrSetGlobal( + 'UnauthorizedError', + extend(AdapterError, 'The adapter operation is unauthorized') +); UnauthorizedError.prototype.code = 'UnauthorizedError'; /** @@ -273,7 +277,10 @@ UnauthorizedError.prototype.code = 'UnauthorizedError'; @public @extends AdapterError */ -export const ForbiddenError = extend(AdapterError, 'The adapter operation is forbidden'); +export const ForbiddenError = getOrSetGlobal( + 'ForbiddenError', + extend(AdapterError, 'The adapter operation is forbidden') +); ForbiddenError.prototype.code = 'ForbiddenError'; /** @@ -285,10 +292,7 @@ ForbiddenError.prototype.code = 'ForbiddenError'; for a specific model that does not exist. For example: ```app/routes/post.js - import Route from '@ember/routing/route'; import { NotFoundError } from '@ember-data/adapter/error'; - import { inject as service } from '@ember/service'; - import { action } from '@ember/object'; export default class PostRoute extends Route { @service store; @@ -312,7 +316,10 @@ ForbiddenError.prototype.code = 'ForbiddenError'; @public @extends AdapterError */ -export const NotFoundError = extend(AdapterError, 'The adapter could not find the resource'); +export const NotFoundError = getOrSetGlobal( + 'NotFoundError', + extend(AdapterError, 'The adapter could not find the resource') +); NotFoundError.prototype.code = 'NotFoundError'; /** @@ -326,7 +333,10 @@ NotFoundError.prototype.code = 'NotFoundError'; @public @extends AdapterError */ -export const ConflictError = extend(AdapterError, 'The adapter operation failed due to a conflict'); +export const ConflictError = getOrSetGlobal( + 'ConflictError', + extend(AdapterError, 'The adapter operation failed due to a conflict') +); ConflictError.prototype.code = 'ConflictError'; /** @@ -338,5 +348,8 @@ ConflictError.prototype.code = 'ConflictError'; @public @extends AdapterError */ -export const ServerError = extend(AdapterError, 'The adapter operation failed due to a server error'); +export const ServerError = getOrSetGlobal( + 'ServerError', + extend(AdapterError, 'The adapter operation failed due to a server error') +); ServerError.prototype.code = 'ServerError'; diff --git a/packages/adapter/src/index.ts b/packages/adapter/src/index.ts index d009f1802b9..11375333241 100644 --- a/packages/adapter/src/index.ts +++ b/packages/adapter/src/index.ts @@ -187,19 +187,15 @@ By default when using with Ember you only need to implement this hook if you wan @main @ember-data/adapter */ -import { assert } from '@ember/debug'; import EmberObject from '@ember/object'; import { inject as service } from '@ember/service'; +import type { AdapterPayload, MinimumAdapterInterface, SerializerOptions } from '@ember-data/legacy-compat'; import type { Snapshot, SnapshotRecordArray } from '@ember-data/legacy-compat/-private'; -import type { - AdapterPayload, - MinimumAdapterInterface, -} from '@ember-data/legacy-compat/legacy-network-handler/minimum-adapter-interface'; -import type { SerializerOptions } 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 { ModelSchema } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; /** An adapter is an object that receives requests from a store and diff --git a/packages/adapter/src/json-api.ts b/packages/adapter/src/json-api.ts index 98e2a21611f..8f1444b080b 100644 --- a/packages/adapter/src/json-api.ts +++ b/packages/adapter/src/json-api.ts @@ -1,15 +1,15 @@ /** @module @ember-data/adapter/json-api */ -import { assert } from '@ember/debug'; import { dasherize } from '@ember/string'; import { pluralize } from 'ember-inflector'; +import type { AdapterPayload } from '@ember-data/legacy-compat'; import type { Snapshot } from '@ember-data/legacy-compat/-private'; -import type { AdapterPayload } from '@ember-data/legacy-compat/legacy-network-handler/minimum-adapter-interface'; import type Store from '@ember-data/store'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { ModelSchema } from '@ember-data/store/types'; +import { assert } from '@warp-drive/build-config/macros'; import type { HTTPMethod } from '@warp-drive/core-types/request'; import { serializeIntoHash } from './-private'; diff --git a/packages/adapter/src/rest.ts b/packages/adapter/src/rest.ts index c2439a7123f..a1a9d3164dd 100644 --- a/packages/adapter/src/rest.ts +++ b/packages/adapter/src/rest.ts @@ -5,14 +5,15 @@ @module @ember-data/adapter/rest */ import { getOwner } from '@ember/application'; -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; import { computed } from '@ember/object'; +import type { AdapterPayload } from '@ember-data/legacy-compat'; 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 Store from '@ember-data/store'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { ModelSchema } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { HTTPMethod } from '@warp-drive/core-types/request'; import { determineBodyPromise, fetch, parseResponseHeaders, serializeIntoHash, serializeQueryParams } from './-private'; @@ -270,15 +271,14 @@ declare const jQuery: JQueryStatic | undefined; Some APIs require HTTP headers, e.g. to provide an API key. Arbitrary headers can be set as key/value pairs on the `RESTAdapter`'s `headers` - object and Ember Data will send them along with each ajax request. + object and EmberData will send them along with each ajax request. ```app/adapters/application.js import RESTAdapter from '@ember-data/adapter/rest'; - import { computed } from '@ember/object'; export default class ApplicationAdapter extends RESTAdapter { - headers: computed(function() { + get headers() { return { 'API_KEY': 'secret key', 'ANOTHER_HEADER': 'Some header value' @@ -287,45 +287,6 @@ declare const jQuery: JQueryStatic | undefined; } ``` - `headers` can also be used as a computed property to support dynamic - headers. In the example below, the `session` object has been - injected into an adapter by Ember's container. - - ```app/adapters/application.js - import RESTAdapter from '@ember-data/adapter/rest'; - import { computed } from '@ember/object'; - - export default class ApplicationAdapter extends RESTAdapter { - headers: computed('session.authToken', function() { - return { - 'API_KEY': this.session.authToken, - 'ANOTHER_HEADER': 'Some header value' - }; - }) - } - ``` - - In some cases, your dynamic headers may require data from some - object outside of Ember's observer system (for example - `document.cookie`). You can use the - [volatile](/api/classes/Ember.ComputedProperty.html?anchor=volatile) - function to set the property into a non-cached mode causing the headers to - be recomputed with every request. - - ```app/adapters/application.js - import RESTAdapter from '@ember-data/adapter/rest'; - import { computed } from '@ember/object'; - - export default class ApplicationAdapter extends RESTAdapter { - headers: computed(function() { - return { - 'API_KEY': document.cookie.match(/apiKey\=([^;]*)/)['1'], - 'ANOTHER_HEADER': 'Some header value' - }; - }).volatile() - } - ``` - @class RESTAdapter @main @ember-data/adapter/rest @public @@ -530,15 +491,14 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { ```app/adapters/application.js import RESTAdapter from '@ember-data/adapter/rest'; - import { computed } from '@ember/object'; export default class ApplicationAdapter extends RESTAdapter { - headers: computed(function() { + get headers() { return { 'API_KEY': 'secret key', 'ANOTHER_HEADER': 'Some header value' }; - }) + } } ``` @@ -996,7 +956,7 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { headers: Record, payload: Payload, requestData: RequestData - ): Payload | AdapterError { + ): Payload | typeof AdapterError { if (this.isSuccess(status, headers, payload)) { return payload; } else if (this.isInvalid(status, headers, payload)) { @@ -1021,7 +981,7 @@ class RESTAdapter extends Adapter.extend(BuildURLMixin) { } } - return new AdapterError(errors, detailedMessage); + return new AdapterError(errors, detailedMessage) as unknown as typeof AdapterError; } /** diff --git a/packages/adapter/tsconfig.json b/packages/adapter/tsconfig.json index 3e5a250bc88..99664283962 100644 --- a/packages/adapter/tsconfig.json +++ b/packages/adapter/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*", "../../@types/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,6 +7,7 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, @@ -16,39 +16,68 @@ "experimentalDecorators": true, "noImplicitAny": false, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types", "@types/jquery"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/graph": ["../graph/unstable-preview-types"], + "@ember-data/graph/*": ["../graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../legacy-compat/unstable-preview-types/*"], + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"] } }, "references": [ - { "path": "../graph" }, - { "path": "../json-api" }, - { "path": "../legacy-compat" }, - { "path": "../request" }, - { "path": "../request-utils" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../graph" + }, + { + "path": "../json-api" + }, + { + "path": "../legacy-compat" + }, + { + "path": "../request" + }, + { + "path": "../request-utils" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/adapter/vite.config.mjs b/packages/adapter/vite.config.mjs new file mode 100644 index 00000000000..d8de6399750 --- /dev/null +++ b/packages/adapter/vite.config.mjs @@ -0,0 +1,24 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/service', // inject the store to base Adapter + '@ember/debug', // assert, deprecate + '@ember/object', // Adapter base, computed for headers + '@ember/object/mixin', // BuildURLMixin + '@ember/application', // getOwner +]; +export const entryPoints = [ + './src/index.ts', + './src/error.js', + './src/json-api.ts', + './src/rest.ts', + './src/-private.ts', +]; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/private-build-infra/LICENSE.md b/packages/build-config/LICENSE.md similarity index 87% rename from packages/private-build-infra/LICENSE.md rename to packages/build-config/LICENSE.md index 97a483b5d8f..ee1ae5bf425 100644 --- a/packages/private-build-infra/LICENSE.md +++ b/packages/build-config/LICENSE.md @@ -1,8 +1,6 @@ The MIT License (MIT) -Copyright (C) 2017-2023 Ember.js contributors -Portions Copyright (C) 2011-2017 Tilde, Inc. and contributors. -Portions Copyright (C) 2011 LivingSocial Inc. +Copyright (C) 2023 EmberData and WarpDrive contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/packages/build-config/NCC-1701-a-blue.svg b/packages/build-config/NCC-1701-a-blue.svg new file mode 100644 index 00000000000..3b46f232c1a --- /dev/null +++ b/packages/build-config/NCC-1701-a-blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/build-config/NCC-1701-a.svg b/packages/build-config/NCC-1701-a.svg new file mode 100644 index 00000000000..8ee688dcf30 --- /dev/null +++ b/packages/build-config/NCC-1701-a.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/build-config/README.md b/packages/build-config/README.md new file mode 100644 index 00000000000..8db4b7da46b --- /dev/null +++ b/packages/build-config/README.md @@ -0,0 +1,101 @@ +

+ + +

+ +

🛠️ @warp-drive/build-config

+

Enables providing a build config to optimize application assets

+ +## Installation + +```cli +pnpm install @warp-drive/build-config +``` + +**Tagged Releases** + +- ![NPM Canary Version](https://img.shields.io/npm/v/%40warp-drive/build-config/canary?label=%40canary&color=FFBF00) +- ![NPM Beta Version](https://img.shields.io/npm/v/%40warp-drive/build-config/beta?label=%40beta&color=ff00ff) +- ![NPM Stable Version](https://img.shields.io/npm/v/%40warp-drive/build-config/latest?label=%40latest&color=90EE90) +- ![NPM LTS Version](https://img.shields.io/npm/v/%40warp-drive/build-config/lts?label=%40lts&color=0096FF) +- ![NPM LTS 4.12 Version](https://img.shields.io/npm/v/%40warp-drive/build-config/lts-4-12?label=%40lts-4-12&color=bbbbbb) + +## Usage + +```ts +import { setBuildConfig } from '@warp-drive/build-config'; + +setBuildConfig({ + // ... options +}); +``` + +### ♥️ Credits + +
+ Brought to you with ♥️ love by 🐹 Ember + + +
diff --git a/packages/build-config/babel.config.mjs b/packages/build-config/babel.config.mjs new file mode 100644 index 00000000000..eba0be86353 --- /dev/null +++ b/packages/build-config/babel.config.mjs @@ -0,0 +1,3 @@ +export default { + plugins: [['@babel/plugin-transform-typescript', { allowDeclareFields: true }]], +}; diff --git a/packages/build-config/cjs-src/addon-shim.js b/packages/build-config/cjs-src/addon-shim.js new file mode 100644 index 00000000000..6dacdb70d4c --- /dev/null +++ b/packages/build-config/cjs-src/addon-shim.js @@ -0,0 +1,26 @@ +'use strict'; + +export function addonShim(dirName, options) { + const path = require('path'); + const pkg = require(path.join(dirName, './package.json')); + + const isV2Addon = pkg['ember-addon']?.version === 2; + if (isV2Addon) { + const { addonV1Shim } = require('@embroider/addon-shim'); + return addonV1Shim(dirName, options); + } + + const Funnel = require('broccoli-funnel'); + return { + name: pkg.name, + + treeForVendor() {}, + treeForPublic() {}, + treeForStyles() {}, + treeForAddonStyles() {}, + treeForApp() {}, + treeForAddon() { + return this._super.treeForAddon.call(this, new Funnel(path.join(dirName, 'dist'))); + }, + }; +} diff --git a/packages/build-config/cjs-src/transforms/babel-plugin-transform-asserts.js b/packages/build-config/cjs-src/transforms/babel-plugin-transform-asserts.js new file mode 100644 index 00000000000..d04abc4b07d --- /dev/null +++ b/packages/build-config/cjs-src/transforms/babel-plugin-transform-asserts.js @@ -0,0 +1,113 @@ +const { ImportUtil } = require('babel-import-util'); + +const Utils = new Set(['assert']); + +/* +// Before +import { assert } from '@warp-drive/build-config/macros'; + +assert('foo', true); + +// After +(macroCondition(isDevelopingApp()) ? function assert(test) { if (!test) { throw new Error('foo'); } }(true) : {}); +*/ + +// => _macros.getGlobalConfig().WarpDrive.env.DEBUG +function buildMacroConstDEBUG(types, binding, state) { + return types.memberExpression( + types.memberExpression( + types.memberExpression( + types.callExpression(state.importer.import(binding, '@embroider/macros', 'getGlobalConfig'), []), + types.identifier('WarpDrive') + ), + types.identifier('env') + ), + types.identifier('DEBUG') + ); +} + +// => _macros.macroCondition(_macros.getGlobalConfig().WarpDrive.env.DEBUG) +function buildMacroConditionDEBUG(types, binding, state) { + return types.callExpression(state.importer.import(binding, '@embroider/macros', 'macroCondition'), [ + buildMacroConstDEBUG(types, binding, state), + ]); +} + +// (test) => { if (!test) { throw new Error(someMessage); } }(someCond) +function buildAssert(types, originalCallExpression) { + const desc = originalCallExpression.arguments[0]; + const test = originalCallExpression.arguments[1] ?? types.booleanLiteral(false); + // prettier-ignore + return types.callExpression( + types.arrowFunctionExpression([types.identifier('test')], // (test) => + types.blockStatement([ // { + types.ifStatement( // if + types.unaryExpression('!', types.identifier('test')), // (!test) + types.blockStatement([ // { + types.throwStatement( // throw + types.newExpression(types.identifier('Error'), [desc]) // new Error(desc) + )]) // } + )]) // } + ), + [test] // (someCond) + ); +} + +// => ( ? : {}); +function buildAssertTernary(types, binding, state, originalCallExpression) { + return types.expressionStatement( + types.conditionalExpression( + buildMacroConditionDEBUG(types, binding, state), + buildAssert(types, originalCallExpression), + types.objectExpression([]) + ) + ); +} + +export default function (babel) { + const { types: t } = babel; + + return { + name: 'ast-transform', // not required + visitor: { + ImportDeclaration(path, state) { + const importPath = path.node.source.value; + + if (importPath === '@warp-drive/build-config/macros') { + const specifiers = path.get('specifiers'); + + specifiers.forEach((specifier) => { + const name = specifier.node.imported.name; + if (!Utils.has(name)) { + throw new Error(`Unexpected import '${name}' imported from '@warp-drive/build-config/macros'`); + } + + const localBindingName = specifier.node.local.name; + const binding = specifier.scope.getBinding(localBindingName); + + binding.referencePaths.forEach((p) => { + const originalCallExpression = p.parentPath.node; + + if (!t.isCallExpression(originalCallExpression)) { + throw new Error('Expected a call expression'); + } + + const assertTernary = buildAssertTernary(t, binding, state, originalCallExpression); + p.parentPath.replaceWith(assertTernary); + }); + specifier.scope.removeOwnBinding(localBindingName); + specifier.remove(); + }); + + if (path.get('specifiers').length === 0) { + path.remove(); + } + } + }, + + Program(path, state) { + state.importer = new ImportUtil(t, path); + }, + }, + }; +} diff --git a/packages/private-build-infra/src/transforms/babel-plugin-transform-deprecations/index.js b/packages/build-config/cjs-src/transforms/babel-plugin-transform-deprecations.js similarity index 83% rename from packages/private-build-infra/src/transforms/babel-plugin-transform-deprecations/index.js rename to packages/build-config/cjs-src/transforms/babel-plugin-transform-deprecations.js index 4ccd5555875..5b46904908b 100644 --- a/packages/private-build-infra/src/transforms/babel-plugin-transform-deprecations/index.js +++ b/packages/build-config/cjs-src/transforms/babel-plugin-transform-deprecations.js @@ -1,4 +1,4 @@ -const { ImportUtil } = require('babel-import-util'); +import { ImportUtil } from 'babel-import-util'; function parentIsUnary(node) { if (node.parent.type === 'UnaryExpression' && node.parent.operator === '!') { @@ -7,7 +7,7 @@ function parentIsUnary(node) { return false; } -module.exports = function (babel) { +export default function (babel) { const { types: t } = babel; return { @@ -34,7 +34,10 @@ module.exports = function (babel) { } let getConfig = t.memberExpression( t.memberExpression( - t.callExpression(state.importer.import(p, '@embroider/macros', 'getOwnConfig'), []), + t.memberExpression( + t.callExpression(state.importer.import(p, '@embroider/macros', 'getGlobalConfig'), []), + t.identifier('WarpDrive') + ), t.identifier('deprecations') ), t.identifier(name) @@ -42,7 +45,7 @@ module.exports = function (babel) { node.replaceWith( // if (DEPRECATE_FOO) // => - // if (macroCondition(getOwnConfig().deprecations.DEPRECATE_FOO)) + // if (macroCondition(getGlobalConfig('WarpDrive').debug.LOG_FOO)) t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [ negateStatement ? t.unaryExpression('!', getConfig) : getConfig, ]) @@ -62,4 +65,4 @@ module.exports = function (babel) { }, }, }; -}; +} diff --git a/packages/private-build-infra/src/transforms/babel-plugin-transform-features/index.js b/packages/build-config/cjs-src/transforms/babel-plugin-transform-features.js similarity index 80% rename from packages/private-build-infra/src/transforms/babel-plugin-transform-features/index.js rename to packages/build-config/cjs-src/transforms/babel-plugin-transform-features.js index 0027ede52e0..9ef7e5f8d1f 100644 --- a/packages/private-build-infra/src/transforms/babel-plugin-transform-features/index.js +++ b/packages/build-config/cjs-src/transforms/babel-plugin-transform-features.js @@ -1,6 +1,8 @@ -const { ImportUtil } = require('babel-import-util'); +import { ImportUtil } from 'babel-import-util'; +import fs from 'fs'; -const version = require('../../../package.json').version; +const pkg = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8')); +const version = pkg.version; const isCanary = version.includes('alpha'); @@ -11,7 +13,7 @@ function parentIsUnary(node) { return false; } -module.exports = function (babel) { +export default function (babel) { const { types: t } = babel; return { @@ -42,7 +44,10 @@ module.exports = function (babel) { } let getConfig = t.memberExpression( t.memberExpression( - t.callExpression(state.importer.import(p, '@embroider/macros', 'getOwnConfig'), []), + t.memberExpression( + t.callExpression(state.importer.import(p, '@embroider/macros', 'getGlobalConfig'), []), + t.identifier('WarpDrive') + ), t.identifier('features') ), t.identifier(name) @@ -50,7 +55,7 @@ module.exports = function (babel) { node.replaceWith( // if (LOG_FOO) // => - // if (macroCondition(getOwnConfig().debug.LOG_FOO)) + // if (macroCondition(getGlobalConfig('WarpDrive').debug.LOG_FOO)) t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [ negateStatement ? t.unaryExpression('!', getConfig) : getConfig, ]) @@ -70,4 +75,4 @@ module.exports = function (babel) { }, }, }; -}; +} diff --git a/packages/private-build-infra/src/transforms/babel-plugin-transform-logging/index.js b/packages/build-config/cjs-src/transforms/babel-plugin-transform-logging.js similarity index 83% rename from packages/private-build-infra/src/transforms/babel-plugin-transform-logging/index.js rename to packages/build-config/cjs-src/transforms/babel-plugin-transform-logging.js index 484fbb26c86..0c52ccdfc04 100644 --- a/packages/private-build-infra/src/transforms/babel-plugin-transform-logging/index.js +++ b/packages/build-config/cjs-src/transforms/babel-plugin-transform-logging.js @@ -1,4 +1,4 @@ -const { ImportUtil } = require('babel-import-util'); +import { ImportUtil } from 'babel-import-util'; function parentIsUnary(node) { if (node.parent.type === 'UnaryExpression' && node.parent.operator === '!') { @@ -7,7 +7,7 @@ function parentIsUnary(node) { return false; } -module.exports = function (babel) { +export default function (babel) { const { types: t } = babel; return { @@ -34,7 +34,10 @@ module.exports = function (babel) { } let getConfig = t.memberExpression( t.memberExpression( - t.callExpression(state.importer.import(p, '@embroider/macros', 'getOwnConfig'), []), + t.memberExpression( + t.callExpression(state.importer.import(p, '@embroider/macros', 'getGlobalConfig'), []), + t.identifier('WarpDrive') + ), t.identifier(state.opts.configKey) ), t.identifier(name) @@ -42,7 +45,7 @@ module.exports = function (babel) { node.replaceWith( // if (LOG_FOO) // => - // if (macroCondition(getOwnConfig().debug.LOG_FOO)) + // if (macroCondition(getGlobalConfig('WarpDrive').debug.LOG_FOO)) t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [ negateStatement ? t.unaryExpression('!', getConfig) : getConfig, ]) @@ -62,4 +65,4 @@ module.exports = function (babel) { }, }, }; -}; +} diff --git a/packages/build-config/package.json b/packages/build-config/package.json new file mode 100644 index 00000000000..4c09c77560e --- /dev/null +++ b/packages/build-config/package.json @@ -0,0 +1,69 @@ +{ + "name": "@warp-drive/build-config", + "version": "0.0.0-alpha.1", + "description": "Provides Build Configuration for projects using WarpDrive or EmberData", + "keywords": [ + "ember-data", + "warp-drive" + ], + "repository": { + "type": "git", + "url": "git+ssh://git@github.com:emberjs/data.git", + "directory": "packages/build-config" + }, + "license": "MIT", + "author": "Chris Thoburn ", + "scripts": { + "build:infra": "vite build; vite build -c ./vite.config-cjs.mjs;", + "prepack": "bun run build:infra" + }, + "type": "module", + "files": [ + "dist", + "unstable-preview-types", + "CHANGELOG.md", + "README.md", + "LICENSE.md", + "NCC-1701-a.svg", + "NCC-1701-a-blue.svg" + ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./dist/index.js" + }, + "./*.cjs": { + "default": "./dist/*.cjs" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./dist/*.js" + } + }, + "dependencies": { + "@embroider/macros": "^1.15.1", + "@embroider/addon-shim": "^1.8.8", + "babel-import-util": "^2.0.2", + "broccoli-funnel": "^3.0.8", + "semver": "^7.6.0" + }, + "devDependencies": { + "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "@types/babel__core": "^7.20.5", + "@types/node": "^20.12.7", + "@babel/plugin-transform-typescript": "^7.24.4", + "@babel/preset-typescript": "^7.24.1", + "@babel/core": "^7.24.4", + "pnpm-sync-dependencies-meta-injected": "0.0.10", + "typescript": "^5.4.5", + "bun-types": "^1.1.3", + "vite": "^5.2.11" + }, + "engines": { + "node": ">= 22.1.0" + }, + "volta": { + "extends": "../../package.json" + }, + "packageManager": "pnpm@8.15.6" +} diff --git a/packages/private-build-infra/src/deprecations.js b/packages/build-config/src/-private/utils/deprecations.ts similarity index 52% rename from packages/private-build-infra/src/deprecations.js rename to packages/build-config/src/-private/utils/deprecations.ts index 8c6bf8aa858..48d08182563 100644 --- a/packages/private-build-infra/src/deprecations.js +++ b/packages/build-config/src/-private/utils/deprecations.ts @@ -1,20 +1,18 @@ -'use strict'; +import semver from 'semver'; -const semver = require('semver'); +import * as CURRENT_DEPRECATIONS from '../../deprecation-versions.ts'; +type MajorMinor = `${number}.${number}`; +type DeprecationFlag = keyof typeof CURRENT_DEPRECATIONS; -const requireModule = require('./utilities/require-module'); - -function deprecationIsResolved(deprecatedSince, compatVersion) { - return semver.lte(semver.minVersion(deprecatedSince), semver.minVersion(compatVersion)); +function deprecationIsResolved(deprecatedSince: MajorMinor, compatVersion: MajorMinor) { + return semver.lte(semver.minVersion(deprecatedSince)!, semver.minVersion(compatVersion)!); } -function getDeprecations(compatVersion) { - const { default: CURRENT_DEPRECATIONS } = requireModule( - '@ember-data/private-build-infra/virtual-packages/deprecations.js' - ); - const flags = {}; +export function getDeprecations(compatVersion: MajorMinor | null | undefined): { [key in DeprecationFlag]: boolean } { + const flags = {} as Record; + const keys = Object.keys(CURRENT_DEPRECATIONS) as DeprecationFlag[]; - Object.keys(CURRENT_DEPRECATIONS).forEach((flag) => { + keys.forEach((flag) => { const deprecatedSince = CURRENT_DEPRECATIONS[flag]; let flagState = true; // default to no code-stripping @@ -39,5 +37,3 @@ function getDeprecations(compatVersion) { return flags; } - -module.exports = getDeprecations; diff --git a/packages/private-build-infra/src/features.js b/packages/build-config/src/-private/utils/features.ts similarity index 63% rename from packages/private-build-infra/src/features.js rename to packages/build-config/src/-private/utils/features.ts index 63bf5b159e5..f85e5b9b0fd 100644 --- a/packages/private-build-infra/src/features.js +++ b/packages/build-config/src/-private/utils/features.ts @@ -1,20 +1,18 @@ -'use strict'; +import fs from 'fs'; -const version = require('../package.json').version; +import * as CURRENT_FEATURES from '../../canary-features.ts'; +type FEATURE = keyof typeof CURRENT_FEATURES; +const version = JSON.parse(fs.readFileSync('../../package.json', 'utf-8')).version; const isCanary = version.includes('alpha'); -const requireModule = require('./utilities/require-module'); - -function getFeatures(isProd) { - const { default: org_features } = requireModule( - '@ember-data/private-build-infra/virtual-packages/canary-features.js' - ); - const features = Object.assign({}, org_features); +export function getFeatures(isProd: boolean): { [key in FEATURE]: boolean } { + const features = Object.assign({}, CURRENT_FEATURES) as Record; + const keys = Object.keys(features) as FEATURE[]; if (!isCanary) { // disable all features with a current value of `null` - for (let feature in features) { + for (const feature of keys) { let featureValue = features[feature]; if (featureValue === null) { @@ -27,7 +25,7 @@ function getFeatures(isProd) { const FEATURE_OVERRIDES = process.env.EMBER_DATA_FEATURE_OVERRIDE; if (FEATURE_OVERRIDES === 'ENABLE_ALL_OPTIONAL') { // enable all features with a current value of `null` - for (let feature in features) { + for (const feature of keys) { let featureValue = features[feature]; if (featureValue === null) { @@ -36,7 +34,7 @@ function getFeatures(isProd) { } } else if (FEATURE_OVERRIDES === 'DISABLE_ALL') { // disable all features, including those with a value of `true` - for (let feature in features) { + for (const feature of keys) { features[feature] = false; } } else if (FEATURE_OVERRIDES) { @@ -46,13 +44,17 @@ function getFeatures(isProd) { for (let i = 0; i < forcedFeatures.length; i++) { let featureName = forcedFeatures[i]; - features[featureName] = true; + if (!keys.includes(featureName as FEATURE)) { + throw new Error(`Unknown feature flag: ${featureName}`); + } + + features[featureName as FEATURE] = true; } } if (isProd) { // disable all features with a current value of `null` - for (let feature in features) { + for (const feature of keys) { let featureValue = features[feature]; if (featureValue === null) { @@ -63,5 +65,3 @@ function getFeatures(isProd) { return features; } - -module.exports = getFeatures; diff --git a/packages/build-config/src/-private/utils/get-env.ts b/packages/build-config/src/-private/utils/get-env.ts new file mode 100644 index 00000000000..d1ca585a5c1 --- /dev/null +++ b/packages/build-config/src/-private/utils/get-env.ts @@ -0,0 +1,12 @@ +export function getEnv() { + const { EMBER_ENV, IS_TESTING, EMBER_CLI_TEST_COMMAND, NODE_ENV } = process.env; + const PRODUCTION = EMBER_ENV === 'production' || (!EMBER_ENV && NODE_ENV === 'production'); + const DEBUG = !PRODUCTION; + const TESTING = DEBUG || Boolean(EMBER_ENV === 'test' || IS_TESTING || EMBER_CLI_TEST_COMMAND); + + return { + TESTING, + PRODUCTION, + DEBUG, + }; +} diff --git a/packages/build-config/src/babel-macros.ts b/packages/build-config/src/babel-macros.ts new file mode 100644 index 00000000000..a2f08d6a5ab --- /dev/null +++ b/packages/build-config/src/babel-macros.ts @@ -0,0 +1,70 @@ +import * as LOGGING from './debugging.ts'; +import * as CURRENT_FEATURES from './canary-features.ts'; +import * as CURRENT_DEPRECATIONS from './deprecations.ts'; + +type FEATURE = keyof typeof CURRENT_FEATURES; +const features = Object.keys(CURRENT_FEATURES) as FEATURE[]; +const FEATURES = Object.assign({}, CURRENT_FEATURES) as Record; +features.forEach((feature) => { + let featureValue = FEATURES[feature]; + if (featureValue === null) { + FEATURES[feature] = false; + } +}); + +const config = { + features: FEATURES, + deprecations: Object.assign({}, CURRENT_DEPRECATIONS), + debug: Object.assign({}, LOGGING), +}; + +export function macros() { + const TransformAsserts = import.meta.resolve('./babel-plugin-transform-asserts.cjs').slice(7); + const TransformDeprecations = import.meta.resolve('./babel-plugin-transform-deprecations.cjs').slice(7); + const TransformDebugLogging = import.meta.resolve('./babel-plugin-transform-logging.cjs').slice(7); + const TransformFeatures = import.meta.resolve('./babel-plugin-transform-features.cjs').slice(7); + + let plugins = [ + [TransformAsserts, {}, '@warp-drive/build-config/asserts-stripping'], + [ + TransformFeatures, + { + source: '@warp-drive/build-config/canary-features', + flags: config.features, + }, + '@warp-drive/build-config/canary-features-stripping', + ], + [ + TransformDeprecations, + { + source: '@warp-drive/build-config/deprecations', + flags: config.deprecations, + }, + '@warp-drive/build-config/deprecation-stripping', + ], + [ + TransformDebugLogging, + { + source: '@warp-drive/build-config/debugging', + configKey: 'debug', + flags: config.debug, + }, + '@warp-drive/build-config/debugging-stripping', + ], + [ + TransformDebugLogging, + { + source: '@warp-drive/build-config/env', + configKey: 'env', + flags: { + TESTING: true, + PRODUCTION: true, + DEBUG: true, + }, + }, + '@warp-drive/build-config/env', + ], + ]; + + return plugins; +} diff --git a/packages/private-build-infra/virtual-packages/canary-features.js b/packages/build-config/src/canary-features.ts similarity index 94% rename from packages/private-build-infra/virtual-packages/canary-features.js rename to packages/build-config/src/canary-features.ts index 146c9a24bde..bb3c93e36b6 100644 --- a/packages/private-build-infra/virtual-packages/canary-features.js +++ b/packages/build-config/src/canary-features.ts @@ -55,7 +55,7 @@ * * **The "off" branch of feature-flagged code is always stripped from production builds.** * - * The list of available feature-flags is located [here](https://github.com/emberjs/data/tree/main/packages/private-build-infra/virtual-packages/canary-features.js "List of EmberData FeatureFlags") + * The list of available feature-flags is located [here](https://github.com/emberjs/data/tree/main/packages/build-config/src/virtual/canary-features.ts "List of EmberData FeatureFlags") * * * ### Preparing a Project to use a Canary Feature @@ -86,4 +86,4 @@ @class CanaryFeatureFlags @public */ -export const SAMPLE_FEATURE_FLAG = null; +export const SAMPLE_FEATURE_FLAG: boolean | null = null; diff --git a/packages/private-build-infra/virtual-packages/debugging.js b/packages/build-config/src/debugging.ts similarity index 70% rename from packages/private-build-infra/virtual-packages/debugging.js rename to packages/build-config/src/debugging.ts index b9d54689d59..60d6a2880c5 100644 --- a/packages/private-build-infra/virtual-packages/debugging.js +++ b/packages/build-config/src/debugging.ts @@ -1,5 +1,12 @@ /** - @module @ember-data/debug + * ## Debugging + * + * Many portions of the internals are helpfully instrumented with logging that can be activated + * at build time. This instrumentation is always removed from production builds or any builds + * that has not explicitly activated it. To activate it set the appropriate flag to `true`. + * + @module @warp-drive/build-config/debugging + @main @warp-drive/build-config/debugging */ /** * @@ -36,35 +43,35 @@ that has not explicitly activated it. To activate it set the appropriate flag to * @property {boolean} LOG_PAYLOADS * @public */ -export const LOG_PAYLOADS = false; +export const LOG_PAYLOADS: boolean = false; /** * log remote-state updates to the cache * * @property {boolean} LOG_OPERATIONS * @public */ -export const LOG_OPERATIONS = false; +export const LOG_OPERATIONS: boolean = false; /** * log local-state updates to the cache * * @property {boolean} LOG_MUTATIONS * @public */ -export const LOG_MUTATIONS = false; +export const LOG_MUTATIONS: boolean = false; /** * log notifications received by the NotificationManager * * @property {boolean} LOG_NOTIFICATIONS * @public */ -export const LOG_NOTIFICATIONS = false; +export const LOG_NOTIFICATIONS: boolean = false; /** * log requests issued by the RequestManager * * @property {boolean} LOG_REQUESTS * @public */ -export const LOG_REQUESTS = false; +export const LOG_REQUESTS: boolean = false; /** * log updates to requests the store has issued to * the network (adapter) to fulfill. @@ -72,7 +79,7 @@ export const LOG_REQUESTS = false; * @property {boolean} LOG_REQUEST_STATUS * @public */ -export const LOG_REQUEST_STATUS = false; +export const LOG_REQUEST_STATUS: boolean = false; /** * log peek, generation and updates to * Record Identifiers. @@ -80,14 +87,14 @@ export const LOG_REQUEST_STATUS = false; * @property {boolean} LOG_IDENTIFIERS * @public */ -export const LOG_IDENTIFIERS = false; +export const LOG_IDENTIFIERS: boolean = false; /** * log updates received by the graph (relationship pointer storage) * * @property {boolean} LOG_GRAPH * @public */ -export const LOG_GRAPH = false; +export const LOG_GRAPH: boolean = false; /** * log creation/removal of RecordData and Record * instances. @@ -95,4 +102,4 @@ export const LOG_GRAPH = false; * @property {boolean} LOG_INSTANCE_CACHE * @public */ -export const LOG_INSTANCE_CACHE = false; +export const LOG_INSTANCE_CACHE: boolean = false; diff --git a/packages/private-build-infra/virtual-packages/deprecations.js b/packages/build-config/src/deprecation-versions.ts similarity index 98% rename from packages/private-build-infra/virtual-packages/deprecations.js rename to packages/build-config/src/deprecation-versions.ts index ba502b3619e..d1de95a9d53 100644 --- a/packages/private-build-infra/virtual-packages/deprecations.js +++ b/packages/build-config/src/deprecation-versions.ts @@ -1,4 +1,3 @@ -// // ======================== // FOR CONTRIBUTING AUTHORS // @@ -16,6 +15,7 @@ // // ======================== // + /** * ## Deprecations * @@ -70,7 +70,7 @@ * ``` * * The complete list of which versions specific deprecations will be removed in - * can be found [here](https://github.com/emberjs/data/blob/main/packages/private-build-infra/virtual-packages/deprecations.js "List of EmberData Deprecations") + * can be found [here](https://github.com/emberjs/data/blob/main/packages/build-config/src/virtual/deprecation-versions.ts "List of EmberData Deprecations") * * @module @warp-drive/build-config/deprecations * @main @warp-drive/build-config/deprecations @@ -86,8 +86,6 @@ * @public */ export const DEPRECATE_CATCH_ALL = '99.0'; -export const DEPRECATE_3_12 = '3.12'; - /** * **id: ember-data:deprecate-non-strict-types** * @@ -150,8 +148,8 @@ export const DEPRECATE_NON_STRICT_ID = '5.3'; * **id: ** * * This is a planned deprecation which will trigger when observer or computed - * chains are used to watch for changes on any EmberData RecordArray, ManyArray - * or PromiseManyArray. + * chains are used to watch for changes on any EmberData LiveArray, CollectionRecordArray, + * ManyArray or PromiseManyArray. * * Support for these chains is currently guarded by the deprecation flag * listed here, enabling removal of the behavior if desired. diff --git a/packages/build-config/src/deprecations.ts b/packages/build-config/src/deprecations.ts new file mode 100644 index 00000000000..d5e0c63e0d9 --- /dev/null +++ b/packages/build-config/src/deprecations.ts @@ -0,0 +1,10 @@ +// deprecations +export const DEPRECATE_CATCH_ALL: boolean = true; +export const DEPRECATE_COMPUTED_CHAINS: boolean = true; +export const DEPRECATE_NON_STRICT_TYPES: boolean = true; +export const DEPRECATE_NON_STRICT_ID: boolean = true; +export const DEPRECATE_LEGACY_IMPORTS: boolean = true; +export const DEPRECATE_NON_UNIQUE_PAYLOADS: boolean = true; +export const DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE: boolean = true; +export const DEPRECATE_MANY_ARRAY_DUPLICATES: boolean = true; +export const DEPRECATE_STORE_EXTENDS_EMBER_OBJECT: boolean = true; diff --git a/packages/build-config/src/env.ts b/packages/build-config/src/env.ts new file mode 100644 index 00000000000..4168ce4a715 --- /dev/null +++ b/packages/build-config/src/env.ts @@ -0,0 +1,3 @@ +export const DEBUG: boolean = true; +export const PRODUCTION: boolean = true; +export const TESTING: boolean = true; diff --git a/packages/build-config/src/index.ts b/packages/build-config/src/index.ts new file mode 100644 index 00000000000..cc8d681a164 --- /dev/null +++ b/packages/build-config/src/index.ts @@ -0,0 +1,72 @@ +import EmbroiderMacros from '@embroider/macros/src/node.js'; +import { getEnv } from './-private/utils/get-env.ts'; +import { getDeprecations } from './-private/utils/deprecations.ts'; +import { getFeatures } from './-private/utils/features.ts'; +import * as LOGGING from './debugging.ts'; +import type { MacrosConfig } from '@embroider/macros/src/node.js'; + +const _MacrosConfig = EmbroiderMacros.MacrosConfig as unknown as typeof MacrosConfig; + +type LOG_CONFIG_KEY = keyof typeof LOGGING; + +export type WarpDriveConfig = { + debug?: Partial; + polyfillUUID?: boolean; + includeDataAdapterInProduction?: boolean; + compatWith?: `${number}.${number}`; + deprecations?: Partial; + features?: Partial; +}; + +type InternalWarpDriveConfig = { + debug: { [key in LOG_CONFIG_KEY]: boolean }; + polyfillUUID: boolean; + includeDataAdapter: boolean; + compatWith: `${number}.${number}` | null; + deprecations: ReturnType; + features: ReturnType; + env: { + TESTING: boolean; + PRODUCTION: boolean; + DEBUG: boolean; + }; +}; + +type MacrosWithGlobalConfig = Omit & { globalConfig: Record }; + +function recastMacrosConfig(macros: object): MacrosWithGlobalConfig { + if (!('globalConfig' in macros)) { + throw new Error('Expected MacrosConfig to have a globalConfig property'); + } + return macros as MacrosWithGlobalConfig; +} + +export function setConfig(context: object, appRoot: string, config: WarpDriveConfig) { + const macros = recastMacrosConfig(_MacrosConfig.for(context, appRoot)); + + if (macros.globalConfig['WarpDrive']) { + return; + } + + const debugOptions: InternalWarpDriveConfig['debug'] = Object.assign({}, LOGGING, config.debug); + + const env = getEnv(); + const DEPRECATIONS = getDeprecations(config.compatWith || null); + const FEATURES = getFeatures(env.PRODUCTION); + + const includeDataAdapterInProduction = + typeof config.includeDataAdapterInProduction === 'boolean' ? config.includeDataAdapterInProduction : false; + const includeDataAdapter = env.PRODUCTION ? includeDataAdapterInProduction : false; + + const finalizedConfig: InternalWarpDriveConfig = { + debug: debugOptions, + polyfillUUID: config.polyfillUUID ?? false, + includeDataAdapter, + compatWith: config.compatWith ?? null, + deprecations: DEPRECATIONS, + features: FEATURES, + env, + }; + + macros.setGlobalConfig(import.meta.filename, 'WarpDrive', finalizedConfig); +} diff --git a/packages/build-config/src/macros.ts b/packages/build-config/src/macros.ts new file mode 100644 index 00000000000..d69efe9115a --- /dev/null +++ b/packages/build-config/src/macros.ts @@ -0,0 +1,7 @@ +export function assert(message: string, condition: unknown): asserts condition; +export function assert(message: string): never; +export function assert(message: string, condition?: unknown): asserts condition { + if (!condition) { + throw new Error(message); + } +} diff --git a/packages/build-config/src/validate-exports.type-test.ts b/packages/build-config/src/validate-exports.type-test.ts new file mode 100644 index 00000000000..6bcb452f3dd --- /dev/null +++ b/packages/build-config/src/validate-exports.type-test.ts @@ -0,0 +1,14 @@ +import * as DEPRECATION_VERSIONS from './deprecation-versions'; +import * as DEPRECATION_FLAGS from './deprecations'; + +function expectKeyMatch, K extends Record>( + actual: T, + expected: K +): void {} + +// If this is failing, it means that the exported deprecation flags in +// ./deprecations.ts are out of sync with the version flags in +// ./deprecation-versions.ts. This is likely because a new deprecation flag was +// added or removed without updating the other file. +expectKeyMatch(DEPRECATION_VERSIONS, DEPRECATION_FLAGS); +expectKeyMatch(DEPRECATION_FLAGS, DEPRECATION_VERSIONS); diff --git a/packages/build-config/tsconfig.json b/packages/build-config/tsconfig.json new file mode 100644 index 00000000000..62c40e41edd --- /dev/null +++ b/packages/build-config/tsconfig.json @@ -0,0 +1,45 @@ +{ + "include": ["src/**/*"], + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "ESNext", + "target": "ESNext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "pretty": true, + "alwaysStrict": true, + "downlevelIteration": false, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "allowImportingTsExtensions": true, + "forceConsistentCasingInFileNames": true, + "experimentalDecorators": false, + "allowJs": true, + "emitDeclarationOnly": true, + "noImplicitAny": true, + "noImplicitOverride": false, + "noImplicitThis": true, + "strictBindCallApply": true, + "strictFunctionTypes": true, + "strictPropertyInitialization": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "noEmitOnError": false, + "strictNullChecks": true, + "noErrorTruncation": true, + "preserveConstEnums": false, + + "composite": true, + "incremental": true, + "rootDir": "src", + "baseUrl": ".", + + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "inlineSourceMap": true, + "inlineSources": true + }, + "references": [] +} diff --git a/packages/build-config/vite.config-cjs.mjs b/packages/build-config/vite.config-cjs.mjs new file mode 100644 index 00000000000..466ebe73fab --- /dev/null +++ b/packages/build-config/vite.config-cjs.mjs @@ -0,0 +1,24 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = ['babel-import-util', 'fs']; + +export const entryPoints = [ + './cjs-src/transforms/babel-plugin-transform-asserts.js', + './cjs-src/transforms/babel-plugin-transform-deprecations.js', + './cjs-src/transforms/babel-plugin-transform-features.js', + './cjs-src/transforms/babel-plugin-transform-logging.js', + './cjs-src/addon-shim.js', +]; + +export default createConfig( + { + entryPoints, + flatten: true, + format: 'cjs', + externals, + emptyOutDir: false, + fixModule: false, + compileTypes: false, + }, + import.meta.resolve +); diff --git a/packages/build-config/vite.config.mjs b/packages/build-config/vite.config.mjs new file mode 100644 index 00000000000..7c820963ec4 --- /dev/null +++ b/packages/build-config/vite.config.mjs @@ -0,0 +1,23 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = ['fs', 'semver']; + +export const entryPoints = [ + './src/index.ts', + './src/babel-macros.ts', + './src/env.ts', + './src/macros.ts', + './src/debugging.ts', + './src/deprecations.ts', + './src/canary-features.ts', +]; + +export default createConfig( + { + entryPoints, + flatten: true, + externals, + fixModule: false, + }, + import.meta.resolve +); diff --git a/packages/codemods/.eslintrc.cjs b/packages/codemods/.eslintrc.cjs deleted file mode 100644 index 0059ae681ec..00000000000 --- a/packages/codemods/.eslintrc.cjs +++ /dev/null @@ -1,28 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.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(), {}), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults({ - files: ['src/**', 'bin/**'], - }), - typescript.defaults({ - rules: { '@typescript-eslint/switch-exhaustiveness-check': 'error' }, - }), - ], -}; diff --git a/packages/codemods/eslint.config.mjs b/packages/codemods/eslint.config.mjs new file mode 100644 index 00000000000..4997676c2ee --- /dev/null +++ b/packages/codemods/eslint.config.mjs @@ -0,0 +1,20 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // node (ts) ================ + typescript.node({ + srcDirs: ['src', 'bin', 'utils'], + allowedImports: [], + rules: { '@typescript-eslint/switch-exhaustiveness-check': 'error' }, + }), + + // node (module) ================ + node.esm(), +]; diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 3da43376c93..78af5aef9fc 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -14,8 +14,7 @@ }, "scripts": { "build:cli": "bun build bin/codemods.ts --compile --target node --outfile codemods --sourcemap", - "check:types": "tsc --noEmit", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "_syncPnpm": "bun run sync-dependencies-meta-injected" }, "exports": { diff --git a/packages/codemods/tsconfig.json b/packages/codemods/tsconfig.json index 8acb8c9cfde..3cf82a04943 100644 --- a/packages/codemods/tsconfig.json +++ b/packages/codemods/tsconfig.json @@ -8,6 +8,7 @@ "moduleResolution": "NodeNext", "moduleDetection": "force", "strict": true, + "pretty": true, "noFallthroughCasesInSwitch": true, "downlevelIteration": true, "skipLibCheck": true, @@ -16,6 +17,7 @@ "allowJs": true, "noImplicitOverride": true, "resolveJsonModule": true, + "noEmit": true, // Enable faster builds // but causes us to not rebuild properly diff --git a/packages/core-types/.eslintrc.cjs b/packages/core-types/.eslintrc.cjs deleted file mode 100644 index a34d3761938..00000000000 --- a/packages/core-types/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/core-types/addon-main.cjs b/packages/core-types/addon-main.cjs index 16a41526809..8a64241f5bf 100644 --- a/packages/core-types/addon-main.cjs +++ b/packages/core-types/addon-main.cjs @@ -1,94 +1,13 @@ -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'); +'use strict'; -const pkg = require('./package.json'); +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); +const { version, name } = 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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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; - }, +const addon = addonShim(__dirname); +addon.options = addon.options || {}; +addon.options['@embroider/macros'] = addon.options['@embroider/macros'] || {}; +addon.options['@embroider/macros'].setOwnConfig = { + PKG: { name, version }, }; + +module.exports = addon; diff --git a/packages/core-types/babel.config.js b/packages/core-types/babel.config.js deleted file mode 100644 index dac1037557b..00000000000 --- a/packages/core-types/babel.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [...macros, ['@babel/plugin-transform-typescript', { allowDeclareFields: true }]], -}; diff --git a/packages/core-types/babel.config.mjs b/packages/core-types/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/core-types/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/core-types/eslint.config.mjs b/packages/core-types/eslint.config.mjs new file mode 100644 index 00000000000..3b45156a9d4 --- /dev/null +++ b/packages/core-types/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: [], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 67cc87bb45d..6b1c158e76a 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -13,15 +13,13 @@ "license": "MIT", "author": "Chris Thoburn ", "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "files": [ - "addon", + "dist", "addon-main.cjs", "unstable-preview-types", "README.md", @@ -32,47 +30,29 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", + "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-cli-babel": "^8.2.0" }, - "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - } - }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", - "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", - "@embroider/addon-dev": "^4.3.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.4.0-alpha.64", - "ember-source": "~5.7.0", - "rollup": "^4.14.3", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10" + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" @@ -85,5 +65,10 @@ }, "ember": { "edition": "octane" + }, + "dependenciesMeta": { + "@warp-drive/build-config": { + "injected": true + } } } diff --git a/packages/core-types/rollup.config.mjs b/packages/core-types/rollup.config.mjs deleted file mode 100644 index 7b65ac837ed..00000000000 --- a/packages/core-types/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - 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', 'request.js', 'symbols.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'bundled', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/core-types/src/-private.ts b/packages/core-types/src/-private.ts new file mode 100644 index 00000000000..b6a6689e7de --- /dev/null +++ b/packages/core-types/src/-private.ts @@ -0,0 +1,160 @@ +// in testing mode, we utilize globals to ensure only one copy exists of +// these maps, due to bugs in ember-auto-import +import { getOwnConfig } from '@embroider/macros'; + +import { DEBUG, TESTING } from '@warp-drive/build-config/env'; + +type TransientKey = + // @ember-data/tracking + | 'TRANSACTION' + // @ember-data/graph + | 'transactionRef' + // @ember-data/store + | 'configuredGenerationMethod' + | 'configuredUpdateMethod' + | 'configuredForgetMethod' + | 'configuredResetMethod' + | 'configuredKeyInfoMethod' + // @ember-data/request + | 'REQ_ID'; + +type GlobalKey = + | `(transient) ${TransientKey}` + // @ember-data/adapter + | 'AdapterError' + | 'InvalidError' + | 'TimeoutError' + | 'AbortError' + | 'UnauthorizedError' + | 'ForbiddenError' + | 'NotFoundError' + | 'ConflictError' + | 'ServerError' + // @ember-data/tracking + | 'Signals' + // @ember-data/store LegacySupport + | 'AvailableShims' + // @ember-data/store RecordArrayManager + | 'FAKE_ARR' + // @ember-data/store IdentifierArray + | '#signal' + | '#source' + | '#update' + | '#notify' + | 'IS_COLLECTION' + // @ember-data/store RequestCache + | 'Touching' + | 'RequestPromise' + // @ember-data/legacy-compat FetchManager + | 'SaveOp' + // @ember-data/model + | 'LEGACY_SUPPORT' + | 'LegacySupport' + // @ember-data/graph + | 'Graphs' + // @ember-data/request + | 'IS_FROZEN' + | 'IS_CACHE_HANDLER' + | 'RequestMap' + | 'PromiseCache' + | 'RequestCache' + // @ember-data/store IdentityCache + | 'DEBUG_MAP' + | 'IDENTIFIERS' + | 'DOCUMENTS' + // @ember-data/store InstanceCache + | 'CacheForIdentifierCache' + | 'RecordCache' + | 'StoreMap' + // @warp-drive/core-types/symbols + | 'Store' + | '$type' + | 'TransformName' + | 'RequestSignature' + // @warp-drive/core-types/request + | 'SkipCache' + | 'EnableHydration' + | 'IS_FUTURE' + | 'DOC' + // @warp-drive/schema-record + | 'ManagedArrayMap' + | 'ManagedObjectMap' + | 'Support' + | 'SOURCE' + | 'MUTATE' + | 'ARRAY_SIGNAL' + | 'OBJECT_SIGNAL' + | 'NOTIFY' + | 'Destroy' + | 'Identifier' + | 'Editable' + | 'Parent' + | 'Checkout' + | 'Legacy'; + +type ModuleScopedCaches = Record; + +const GlobalRef = globalThis as unknown as Record< + string, + { + __warpDrive_ModuleScopedCaches?: ModuleScopedCaches; + __warpDrive_hasOtherCopy?: boolean; + __version: string; + } +>; + +// in order to support mirror packages, we ensure that each +// unique package name has its own global cache +const PkgInfo = getOwnConfig<{ PKG: { name: string; version: string } }>().PKG; +GlobalRef[PkgInfo.name] = GlobalRef[PkgInfo.name] ?? { __version: PkgInfo.version }; +const GlobalSink = GlobalRef[PkgInfo.name]; + +if (DEBUG) { + if (GlobalSink.__version !== PkgInfo.version) { + throw new Error('Multiple versions of WarpDrive detected, the application will malfunction.'); + } +} + +const ModuleScopedCaches = GlobalSink.__warpDrive_ModuleScopedCaches ?? ({} as ModuleScopedCaches); +if (TESTING) { + if (!GlobalSink.__warpDrive_ModuleScopedCaches) { + GlobalSink.__warpDrive_ModuleScopedCaches = ModuleScopedCaches; + } else { + // eslint-disable-next-line no-console + console.warn(` +Multiple copies of EmberData have been detected. This may be due to a bug in ember-auto-import + in which test assets get their own copy of some v2-addons. This can cause the application to + malfunction as each copy will maintain its own separate state.`); + } +} else { + if (GlobalSink.__warpDrive_hasOtherCopy) { + throw new Error('Multiple copies of EmberData detected, the application will malfunction.'); + } + GlobalSink.__warpDrive_hasOtherCopy = true; +} + +type UniqueSymbol = `___(unique) Symbol(${T})`; +type UniqueSymbolOr = T extends symbol ? UniqueSymbol : T; + +export function getOrSetGlobal(key: K, value: T): UniqueSymbolOr { + if (TESTING) { + const existing = ModuleScopedCaches[key]; + if (existing === undefined) { + return (ModuleScopedCaches[key] = value) as UniqueSymbolOr; + } else { + return existing as UniqueSymbolOr; + } + } else { + return value as UniqueSymbolOr; + } +} + +export function peekTransient(key: TransientKey): T | null { + const globalKey: `(transient) ${TransientKey}` = `(transient) ${key}`; + return (ModuleScopedCaches[globalKey] as T) ?? null; +} + +export function setTransient(key: TransientKey, value: T): T { + const globalKey: `(transient) ${TransientKey}` = `(transient) ${key}`; + return (ModuleScopedCaches[globalKey] = value); +} diff --git a/packages/core-types/src/cache/relationship.ts b/packages/core-types/src/cache/relationship.ts index 38e2939915c..82b117d7788 100644 --- a/packages/core-types/src/cache/relationship.ts +++ b/packages/core-types/src/cache/relationship.ts @@ -1,5 +1,5 @@ import type { StableRecordIdentifier } from '../identifier'; -import type { Links, Meta, PaginationLinks } from '../spec/raw'; +import type { Links, Meta, PaginationLinks } from '../spec/json-api-raw'; // we request that it be in the stable form already. export interface ResourceRelationship { diff --git a/packages/core-types/src/graph.ts b/packages/core-types/src/graph.ts index 57d1b9f2335..89f6218d804 100644 --- a/packages/core-types/src/graph.ts +++ b/packages/core-types/src/graph.ts @@ -1,6 +1,6 @@ import type { CollectionRelationship, ResourceRelationship } from './cache/relationship'; import type { StableRecordIdentifier } from './identifier'; -import type { CollectionResourceRelationship, SingleResourceRelationship } from './spec/raw'; +import type { CollectionResourceRelationship, SingleResourceRelationship } from './spec/json-api-raw'; export interface Graph { identifiers: Map; diff --git a/packages/core-types/src/record.ts b/packages/core-types/src/record.ts index 093a73220e6..882a0c15013 100644 --- a/packages/core-types/src/record.ts +++ b/packages/core-types/src/record.ts @@ -50,6 +50,7 @@ export type TypeFromInstance = T extends TypedRecordInstance ? T[typeof Resou */ export type TypeFromInstanceOrString = T extends TypedRecordInstance ? T[typeof ResourceType] : string; +type IsUniqueSymbol = T extends `___(unique) Symbol(${string})` ? true : false; type Unpacked = T extends (infer U)[] ? U : T; type NONE = { __NONE: never }; @@ -97,18 +98,20 @@ type _ExtractUnion< DEPTH extends _DEPTHCOUNT, > = { // for each string key in the record, - [K in keyof T]: K extends string - ? // we recursively extract any values that resolve to a TypedRecordInstance - __ExtractIfRecord< - MAX_DEPTH, - T, - Unpacked>, - IncludePrefix, - Ignore, - Pre extends string ? `${Pre}.${K}` : K, - DEPTH - > - : never; + [K in keyof T]: IsUniqueSymbol extends true + ? never + : K extends string + ? // we recursively extract any values that resolve to a TypedRecordInstance + __ExtractIfRecord< + MAX_DEPTH, + T, + Unpacked>, + IncludePrefix, + Ignore, + Pre extends string ? `${Pre}.${K}` : K, + DEPTH + > + : never; // then we return any value that is not 'never' }[keyof T]; @@ -176,4 +179,6 @@ export type Includes; // ToPaths>; +>; + +export type OpaqueRecordInstance = unknown; diff --git a/packages/core-types/src/request.ts b/packages/core-types/src/request.ts index 8672728338d..7b39acef630 100644 --- a/packages/core-types/src/request.ts +++ b/packages/core-types/src/request.ts @@ -1,15 +1,16 @@ +import { getOrSetGlobal } from './-private'; import type { StableRecordIdentifier } from './identifier'; import type { QueryParamsSerializationOptions } from './params'; import type { ExtractSuggestedCacheTypes, Includes, TypedRecordInstance, TypeFromInstanceOrString } from './record'; -import type { ResourceIdentifierObject } from './spec/raw'; +import type { ResourceIdentifierObject } from './spec/json-api-raw'; import type { RequestSignature } from './symbols'; 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 const SkipCache = getOrSetGlobal('SkipCache', Symbol.for('wd:skip-cache')); +export const EnableHydration = getOrSetGlobal('EnableHydration', Symbol.for('wd:enable-hydration')); +export const IS_FUTURE = getOrSetGlobal('IS_FUTURE', Symbol('IS_FUTURE')); +export const STRUCTURED = getOrSetGlobal('DOC', Symbol('DOC')); export type HTTPMethod = 'GET' | 'OPTIONS' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'; @@ -67,7 +68,7 @@ export type CacheOptions = { * * @typedoc */ - [SkipCache]?: true; + [SkipCache]?: boolean; }; export type FindRecordRequestOptions = { url: string; @@ -255,7 +256,7 @@ export type ImmutableHeaders = Headers & { clone?(): Headers; toJSON(): [string, * * @typedoc */ -export type RequestInfo = Request & { +export type RequestInfo = Request & { /** * If provided, used instead of the AbortController auto-configured for each request by the RequestManager * @@ -299,6 +300,8 @@ export type RequestInfo = Request & { * @typedoc */ options?: Record; + + [RequestSignature]?: RT; }; /** @@ -306,7 +309,7 @@ export type RequestInfo = Request & { * * @typedoc */ -export type ImmutableRequestInfo = Readonly, 'controller'>> & { +export type ImmutableRequestInfo = Readonly, 'controller'>> & { readonly cacheOptions?: Readonly>; readonly headers?: ImmutableHeaders; readonly data?: Readonly>; @@ -316,7 +319,6 @@ export type ImmutableRequestInfo = Readonly): void; - setResponse(response: Response | ResponseInfo): void; + setResponse(response: Response | ResponseInfo | null): void; } diff --git a/packages/core-types/src/schema.ts b/packages/core-types/src/schema.ts deleted file mode 100644 index 9a4e219ff4c..00000000000 --- a/packages/core-types/src/schema.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - @module @warp-drive/core-types - @internal -*/ -export interface RelationshipSchema { - kind: 'belongsTo' | 'hasMany'; - type: string; // related type - // TODO @runspired should RFC be updated to make this optional? - // TODO @runspired sohuld RFC be update to enforce async and inverse are set? else internals need to know - // that meta came from @ember-data/model vs not from @ember-data/model as defaults should switch. - options: { - as?: string; //for polymorphic relationships, what the abstract type this is satisfying is - async: boolean; // controls inverse unloading "client side delete semantics" so we should replace that with a real flag - polymorphic?: boolean; - inverse: string | null; // property key on the related type (if any) - resetOnRemoteUpdate?: false; // manages the deprecation `DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE` - [key: string]: unknown; - }; - // inverse?: string | null; - // inverseIsAsync?: boolean; - name: string; // property key for this relationship -} - -export type RelationshipsSchema = Record; - -export interface AttributeSchema { - name: string; - kind: 'attribute'; - - // TODO @runspired update RFC to make options optional - options?: { - [key: string]: unknown; - }; - type: string | null; -} - -export type AttributesSchema = Record; diff --git a/packages/core-types/src/schema/fields.ts b/packages/core-types/src/schema/fields.ts new file mode 100644 index 00000000000..bbbaa4c6fa9 --- /dev/null +++ b/packages/core-types/src/schema/fields.ts @@ -0,0 +1,693 @@ +import type { ObjectValue, PrimitiveValue } from '../json/raw'; + +/** + * A generic "field" that can be used to define + * primitive value fields. + * + * Replaces "attribute" for primitive value fields. + * Can also be used to eject from deep-tracking of + * objects or arrays. + * + * A major difference between "field" and "attribute" + * is that "type" points to a legacy transform on + * "attribute" that a serializer *might* use, while + * "type" points to a new-style transform on "field" + * that a record implmentation *must* use. + * + * @typedoc + */ +export type GenericField = { + kind: 'field'; + name: string; + /** + * the name of the transform to use, if any + * @typedoc + */ + type?: string; + /** + * Options to pass to the transform, if any + * + * Must comply to the specific transform's options + * schema. + * + * @typedoc + */ + options?: ObjectValue; +}; + +/** + * Represents a field whose value is the primary + * key of the resource. + * + * This allows any field to serve as the primary + * key while still being able to drive identity + * needs within the system. + * + * This is useful for resources that use for instance + * 'uuid', 'urn' or 'entityUrn' or 'primaryKey' as their + * primary key field instead of 'id'. + * + * @typedoc + */ +export type IdentityField = { + kind: '@id'; + + /** + * The name of the field that serves as the + * primary key for the resource. + * + * @typedoc + */ + name: string; +}; + +/** + * Represents a field whose value is a local + * value that is not stored in the cache, nor + * is it sent to the server. + * + * Local fields can be written to, and their + * value is both memoized and reactive (though + * not deep-tracked). + * + * Because their state is not derived from the cache + * data or the server, they represent a divorced + * uncanonical source of state. + * + * For this reason Local fields should be used sparingly. + * + * In the future, we may choose to only allow our + * own SchemaRecord to utilize them. + * + * Example use cases that drove the creation of local + * fields are states like `isDestroying` and `isDestroyed` + * which are specific to a record instance but not + * stored in the cache. We wanted to be able to drive + * these fields from schema the same as all other fields. + * + * Don't make us regret this decision. + * + * @typedoc + */ +export type LocalField = { + kind: '@local'; + name: string; + /** + * Not currently utilized, we are considering + * allowing transforms to operate on local fields + * + * @typedoc + */ + type?: string; + options?: { defaultValue?: PrimitiveValue }; +}; + +/** + * Represents a field whose value is an object + * with keys pointing to values that are primitive + * values. + * + * If values of the keys are not primitives, or + * if the key/value pairs have well-defined shape, + * use 'schema-object' instead. + * + * @typedoc + */ +export type ObjectField = { + kind: 'object'; + name: string; + + /** + * The name of a transform to pass the entire object + * through before displaying or serializing it. + * + * @typedoc + */ + type?: string; + + /** + * Options to pass to the transform, if any + * + * Must comply to the specific transform's options + * schema. + * + * @typedoc + */ + options?: ObjectValue; +}; + +/** + * Represents a field whose value is an object + * with a well-defined structure described by + * a non-resource schema. + * + * If the object's structure is not well-defined, + * use 'object' instead. + * + * @typedoc + */ +export type SchemaObjectField = { + kind: 'schema-object'; + name: string; + + /** + * The name of the schema that describes the + * structure of the object. + * + * These schemas + * + * @typedoc + */ + type: string; + + // FIXME: would we ever need options here? + options?: ObjectValue; +}; + +/** + * Represents a field whose value is an array + * of primitive values. + * + * If the array's elements are not primitive + * values, use 'schema-array' instead. + * + * @typedoc + */ +export type ArrayField = { + kind: 'array'; + name: string; + + /** + * The name of a transform to pass each item + * in the array through before displaying or + * or serializing it. + * + * @typedoc + */ + type?: string; + + /** + * Options to pass to the transform, if any + * + * Must comply to the specific transform's options + * schema. + * + * @typedoc + */ + options?: ObjectValue; +}; + +/** + * Represents a field whose value is an array + * of objects with a well-defined structure + * described by a non-resource schema. + * + * If the array's elements are not well-defined, + * use 'array' instead. + * + * @typedoc + */ +export type SchemaArrayField = { + kind: 'schema-array'; + name: string; + + /** + * The name of the schema that describes the + * structure of the objects in the array. + * + * @typedoc + */ + type: string; + + // FIXME: would we ever need options here? + options?: ObjectValue; +}; + +/** + * Represents a field whose value is derived + * from other fields in the schema. + * + * The value is read-only, and is not stored + * in the cache, nor is it sent to the server. + * + * Usage of derived fields should be minimized + * to scenarios where the derivation is known + * to be safe. For instance, derivations that + * required fields that are not always loaded + * or that require access to related resources + * that may not be loaded should be avoided. + * + * @typedoc + */ +export type DerivedField = { + kind: 'derived'; + name: string; + + /** + * The name of the derivation to use. + * + * Derivations are functions that take the + * record, options, and the name of the field + * as arguments, and return the derived value. + * + * Derivations are memoized, and are only + * recomputed when the fields they depend on + * change. + * + * Derivations are not stored in the cache, + * and are not sent to the server. + * + * Derivation functions must be explicitly + * registered with the schema service. + * + * @typedoc + */ + type: string; + + /** + * Options to pass to the derivation, if any + * + * Must comply to the specific derivation's + * options schema. + * + * @typedoc + */ + options?: ObjectValue; +}; + +/** + * Represents a field that is a reference to + * another resource. + * + * @typedoc + */ +export type ResourceField = { + kind: 'resource'; + name: string; + + /** + * The name of the resource that this field + * refers to. In the case of a polymorphic + * relationship, this should be the trait + * or abstract type. + * + * @typedoc + */ + type: string; + + /** + * Options for resources are optional. If + * not present, all options are presumed + * to be falsey + * + * @typedoc + */ + options?: { + /** + * Whether the relationship is async + * + * If true, it is expected that the cache + * data for this field will contain a link + * that can be used to fetch the related + * resource when needed. + * + * @typedoc + */ + async?: boolean; + + /** + * The name of the inverse field on the + * related resource that points back to + * this field on this resource to form a + * bidirectional relationship. + * + * If null, the relationship is unidirectional. + * + * @typedoc + */ + inverse?: string | null; + + /** + * If this field is satisfying a polymorphic + * relationship on another resource, then this + * should be set to the trait or abstract type + * that this resource implements. + * + * @typedoc + */ + as?: string; + + /** + * Whether this field is a polymorphic relationship, + * meaning that it can point to multiple types of + * resources so long as they implement the trait + * or abstract type specified in `type`. + * + * @typedoc + */ + polymorphic?: boolean; + }; +}; + +/** + * Represents a field that is a reference to + * a collection of other resources, potentially + * paginate. + * + * @typedoc + */ +export type CollectionField = { + kind: 'collection'; + name: string; + + /** + * The name of the resource that this field + * refers to. In the case of a polymorphic + * relationship, this should be the trait + * or abstract type. + * + * @typedoc + */ + type: string; + + /** + * Options for resources are optional. If + * not present, all options are presumed + * to be falsey + * + * @typedoc + */ + options?: { + /** + * Whether the relationship is async + * + * If true, it is expected that the cache + * data for this field will contain links + * that can be used to fetch the related + * resources when needed. + * + * When false, it is expected that all related + * resources are loaded together with this resource, + * and that the cache data for this field will + * contain the full list of pointers. + * + * When true, it is expected that the relationship + * is paginated. If the relationship is not paginated, + * then the cache data for "page 1" would contain the + * full list of pointers, and loading "page 1" would + * load all related resources. + * + * @typedoc + */ + async?: boolean; + + /** + * The name of the inverse field on the + * related resource that points back to + * this field on this resource to form a + * bidirectional relationship. + * + * If null, the relationship is unidirectional. + * + * @typedoc + */ + inverse?: string | null; + + /** + * If this field is satisfying a polymorphic + * relationship on another resource, then this + * should be set to the trait or abstract type + * that this resource implements. + * + * @typedoc + */ + as?: string; + + /** + * Whether this field is a polymorphic relationship, + * meaning that it can point to multiple types of + * resources so long as they implement the trait + * or abstract type specified in `type`. + * + * @typedoc + */ + polymorphic?: boolean; + }; +}; + +/** + * > [!CAUTION] + * > This Field is LEGACY + * + * A generic "field" that can be used to define + * primitive value fields. + * + * If the field points to an object or array, + * it will not be deep-tracked. + * + * Transforms when defined are legacy transforms + * that a serializer *might* use, but their usage + * is not guaranteed. + * + * @typedoc + */ +export type LegacyAttributeField = { + kind: 'attribute'; + name: string; + /** + * The name of the transform to use, if any + * + * @typedoc + */ + type?: string | null; + /** + * Options to pass to the transform, if any + * + * Must comply to the specific transform's options + * schema. + * + * @typedoc + */ + options?: ObjectValue; +}; + +/** + * > [!CAUTION] + * > This Field is LEGACY + * + * Represents a field that is a reference to + * another resource. + * + * This is the legacy version of the `ResourceField` + * type, and is used to represent fields that were + * + * @typedoc + */ +export type LegacyBelongsToField = { + kind: 'belongsTo'; + name: string; + + /** + * The name of the resource that this field + * refers to. In the case of a polymorphic + * relationship, this should be the trait + * or abstract type. + * + * @typedoc + */ + type: string; + + /** + * Options for belongsTo are mandatory. + * + * @typedoc + */ + options: { + /** + * Whether the relationship is async + * + * If true, it is expected that the cache + * data for this field will contain a link + * or a pointer that can be used to fetch + * the related resource when needed. + * + * Pointers are highly discouraged. + * + * @typedoc + */ + async: boolean; + + /** + * The name of the inverse field on the + * related resource that points back to + * this field on this resource to form a + * bidirectional relationship. + * + * If null, the relationship is unidirectional. + * + * @typedoc + */ + inverse: string | null; + + /** + * If this field is satisfying a polymorphic + * relationship on another resource, then this + * should be set to the trait or abstract type + * that this resource implements. + * + * @typedoc + */ + as?: string; + + /** + * Whether this field is a polymorphic relationship, + * meaning that it can point to multiple types of + * resources so long as they implement the trait + * or abstract type specified in `type`. + * + * @typedoc + */ + polymorphic?: boolean; + + /** + * When omitted, the cache data for this field will + * clear local state of all changes except for the + * addition of records still in the "new" state any + * time the remote data for this field is updated. + * + * When set to `false`, the cache data for this field + * will instead intelligently commit any changes from + * local state that are present in the remote data, + * leaving any remaining changes in local state still. + * + * @typedoc + */ + resetOnRemoteUpdate?: false; + }; +}; + +/** + * > [!CAUTION] + * > This Field is LEGACY + * + * @typedoc + */ +export type LegacyHasManyField = { + kind: 'hasMany'; + name: string; + type: string; + + /** + * Options for hasMany are mandatory. + * + * @typedoc + */ + options: { + /** + * Whether the relationship is async + * + * If true, it is expected that the cache + * data for this field will contain links + * or pointers that can be used to fetch + * the related resources when needed. + * + * When false, it is expected that all related + * resources are loaded together with this resource, + * and that the cache data for this field will + * contain the full list of pointers. + * + * hasMany relationships do not support pagination. + * + * @typedoc + */ + async: boolean; + + /** + * The name of the inverse field on the + * related resource that points back to + * this field on this resource to form a + * bidirectional relationship. + * + * If null, the relationship is unidirectional. + * + * @typedoc + */ + inverse: string | null; + + /** + * If this field is satisfying a polymorphic + * relationship on another resource, then this + * should be set to the trait or abstract type + * that this resource implements. + * + * @typedoc + */ + as?: string; + + /** + * Whether this field is a polymorphic relationship, + * meaning that it can point to multiple types of + * resources so long as they implement the trait + * or abstract type specified in `type`. + * + * @typedoc + */ + polymorphic?: boolean; + + /** + * When omitted, the cache data for this field will + * clear local state of all changes except for the + * addition of records still in the "new" state any + * time the remote data for this field is updated. + * + * When set to `false`, the cache data for this field + * will instead intelligently commit any changes from + * local state that are present in the remote data, + * leaving any remaining changes in local state still. + * + * @typedoc + */ + resetOnRemoteUpdate?: false; + }; +}; + +export type FieldSchema = + | GenericField + | IdentityField + | LocalField + | ObjectField + | SchemaObjectField + | ArrayField + | SchemaArrayField + | DerivedField + | ResourceField + | CollectionField + | LegacyAttributeField + | LegacyBelongsToField + | LegacyHasManyField; + +export type Schema = { + '@id': IdentityField | null; + /** + * The name of the schema + * + * For cacheable resources, this should be the + * primary resource type. + * + * For object schemas, this should be the name + * of the object schema. object schemas should + * follow the following guidelines for naming + * + * - for globally shared objects: The pattern `$field:${KlassName}` e.g. `$field:AddressObject` + * - for resource-specific objects: The pattern `$${ResourceKlassName}:$field:${KlassName}` e.g. `$User:$field:ReusableAddress` + * - for inline objects: The pattern `$${ResourceKlassName}.${fieldPath}:$field:anonymous` e.g. `$User.shippingAddress:$field:anonymous` + * + * @typedoc + */ + '@type': string; + traits: string[]; + fields: FieldSchema[]; +}; + +export type LegacyFieldSchema = LegacyAttributeField | LegacyBelongsToField | LegacyHasManyField; +export type LegacyRelationshipSchema = LegacyBelongsToField | LegacyHasManyField; diff --git a/packages/core-types/src/spec/document.ts b/packages/core-types/src/spec/document.ts index 2fbb8956caf..0ee5fa01399 100644 --- a/packages/core-types/src/spec/document.ts +++ b/packages/core-types/src/spec/document.ts @@ -1,6 +1,6 @@ import type { StableExistingRecordIdentifier } from '../identifier'; import type { ApiError } from './error'; -import type { Links, Meta, PaginationLinks } from './raw'; +import type { Links, Meta, PaginationLinks } from './json-api-raw'; export interface ResourceMetaDocument { // the url or cache-key associated with the structured document diff --git a/packages/core-types/src/spec/error.ts b/packages/core-types/src/spec/error.ts index d03eff16457..e34b838dbe5 100644 --- a/packages/core-types/src/spec/error.ts +++ b/packages/core-types/src/spec/error.ts @@ -1,4 +1,4 @@ -import type { Link, Meta } from './raw'; +import type { Link, Meta } from './json-api-raw'; export interface ApiError { id?: string; diff --git a/packages/core-types/src/spec/raw.ts b/packages/core-types/src/spec/json-api-raw.ts similarity index 82% rename from packages/core-types/src/spec/raw.ts rename to packages/core-types/src/spec/json-api-raw.ts index 364c5009ae1..56c7142b8ea 100644 --- a/packages/core-types/src/spec/raw.ts +++ b/packages/core-types/src/spec/json-api-raw.ts @@ -108,42 +108,55 @@ export interface CollectionResourceRelationship = + | SingleResourceRelationship + | CollectionResourceRelationship; + export type ResourceRelationshipsObject = Record< string, - SingleResourceRelationship | CollectionResourceRelationship + InnerRelationshipDocument >; /** * Contains the data for an existing resource in JSON:API format * @internal */ -export interface ExistingResourceObject extends ExistingResourceIdentifierObject { +export type ExistingResourceObject = ExistingResourceIdentifierObject & { meta?: Meta; attributes?: ObjectValue; relationships?: ResourceRelationshipsObject; links?: Links; -} +}; + +export type NewResourceObject = NewResourceIdentifierObject & { + meta?: Meta; + attributes?: ObjectValue; + relationships?: ResourceRelationshipsObject; + links?: Links; +}; -interface Document { +export type ResourceObject = ExistingResourceObject | NewResourceObject; + +type Document = { lid?: string; meta?: Meta; included?: ExistingResourceObject[]; jsonapi?: ObjectValue; links?: Links | PaginationLinks; errors?: ArrayValue; -} +}; -export interface EmptyResourceDocument extends Document { +export type EmptyResourceDocument = Document & { data: null; -} +}; -export interface SingleResourceDocument extends Document { +export type SingleResourceDocument = Document & { data: ExistingResourceObject; -} +}; -export interface CollectionResourceDocument extends Document { +export type CollectionResourceDocument = Document & { data: ExistingResourceObject[]; -} +}; /** * A (RAW) JSON:API Formatted Document. diff --git a/packages/core-types/src/symbols.ts b/packages/core-types/src/symbols.ts index ca9a776b2cc..488ad82d6bc 100644 --- a/packages/core-types/src/symbols.ts +++ b/packages/core-types/src/symbols.ts @@ -1,7 +1,9 @@ +import { getOrSetGlobal } from './-private'; + /* * @module @warp-drive/core-types */ -export const RecordStore = Symbol('Store'); +export const RecordStore = getOrSetGlobal('Store', Symbol('Store')); /** * Symbol for the type of a resource. @@ -17,7 +19,7 @@ export const RecordStore = Symbol('Store'); * @type {Symbol} * @typedoc */ -export const ResourceType = Symbol('$type'); +export const ResourceType = getOrSetGlobal('$type', Symbol('$type')); /** * Symbol for the name of a transform. @@ -36,7 +38,7 @@ export const ResourceType = Symbol('$type'); * @type {Symbol} * @typedoc */ -export const TransformName = Symbol('$TransformName'); +export const TransformName = getOrSetGlobal('TransformName', Symbol('$TransformName')); /** * Symbol for use by builders to indicate the return type @@ -45,4 +47,4 @@ export const TransformName = Symbol('$TransformName'); * @type {Symbol} * @typedoc */ -export const RequestSignature = Symbol('RequestSignature'); +export const RequestSignature = getOrSetGlobal('RequestSignature', Symbol('RequestSignature')); diff --git a/packages/core-types/tsconfig.json b/packages/core-types/tsconfig.json index bfb860f26ef..2ce7e7f7556 100644 --- a/packages/core-types/tsconfig.json +++ b/packages/core-types/tsconfig.json @@ -5,15 +5,14 @@ "module": "ESNext", "moduleResolution": "bundler", "skipLibCheck": true, - "noEmit": false, + "emitDeclarationOnly": true, "allowJs": false, "checkJs": false, - "alwaysStrict": true, "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "allowSyntheticDefaultImports": true, - "noImplicitAny": true, "noImplicitThis": true, "strictBindCallApply": true, @@ -26,23 +25,27 @@ "noErrorTruncation": true, "preserveConstEnums": false, "experimentalDecorators": true, - "pretty": true, - // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - // 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, - - "baseUrl": "src" - } + "baseUrl": ".", + "paths": { + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"] + } + }, + "references": [ + { + "path": "../build-config" + } + ] } diff --git a/packages/core-types/vite.config.mjs b/packages/core-types/vite.config.mjs new file mode 100644 index 00000000000..9a37051f9ff --- /dev/null +++ b/packages/core-types/vite.config.mjs @@ -0,0 +1,28 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = []; + +export const entryPoints = [ + './src/cache/**.ts', + './src/json/**.ts', + './src/schema/**.ts', + './src/spec/**.ts', + './src/cache.ts', + './src/graph.ts', + './src/identifier.ts', + './src/index.ts', + './src/params.ts', + './src/record.ts', + './src/request.ts', + './src/symbols.ts', + // non-public + './src/-private.ts', +]; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/debug/.eslintrc.cjs b/packages/debug/.eslintrc.cjs deleted file mode 100644 index 2d4b679d7d3..00000000000 --- a/packages/debug/.eslintrc.cjs +++ /dev/null @@ -1,25 +0,0 @@ -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.config(), node.defaults()], -}; diff --git a/packages/debug/.npmignore b/packages/debug/.npmignore deleted file mode 100644 index e4bce62a5ec..00000000000 --- a/packages/debug/.npmignore +++ /dev/null @@ -1,40 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# ember-data -/node-tests - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json \ No newline at end of file diff --git a/packages/debug/addon-main.cjs b/packages/debug/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/debug/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/debug/app/data-adapter.js b/packages/debug/app/data-adapter.js deleted file mode 100644 index bd4bf31f7af..00000000000 --- a/packages/debug/app/data-adapter.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@ember-data/debug'; diff --git a/packages/debug/babel.config.mjs b/packages/debug/babel.config.mjs new file mode 100644 index 00000000000..c23b859273f --- /dev/null +++ b/packages/debug/babel.config.mjs @@ -0,0 +1,12 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ['module:decorator-transforms', { runtime: { import: 'decorator-transforms/runtime' } }], + ], +}; diff --git a/packages/debug/eslint.config.mjs b/packages/debug/eslint.config.mjs new file mode 100644 index 00000000000..a296abbeddf --- /dev/null +++ b/packages/debug/eslint.config.mjs @@ -0,0 +1,23 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import { externals } from './vite.config.mjs'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: externals.slice(), + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/debug/index.js b/packages/debug/index.js deleted file mode 100644 index ffd1a578ea9..00000000000 --- a/packages/debug/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -const addonBuildConfigForDataPackage = require('@ember-data/private-build-infra/src/addon-build-config-for-data-package'); - -const addonBaseConfig = addonBuildConfigForDataPackage(require('./package.json')); - -module.exports = Object.assign({}, addonBaseConfig, { - __isEnabled: null, - - treeFor() { - // Nested addons don't call isEnabled automatically, - // So this ensures that we return empty trees whenever - // we are not enabled. - if (this.isEnabled()) { - return this._super.treeFor.call(this, ...arguments); - } - }, - isEnabled() { - if (this.__isEnabled !== null) { - return this.__isEnabled; - } - const options = this.getEmberDataConfig(); - const env = process.env.EMBER_ENV; - - const parentIsEmberDataAddon = this.parent.pkg.name === 'ember-data'; - - if (options.includeDataAdapterInProduction === undefined) { - options.includeDataAdapterInProduction = parentIsEmberDataAddon; - } - - this.__isEnabled = env !== 'production' || options.includeDataAdapterInProduction === true; - - return this.__isEnabled; - }, -}); diff --git a/packages/debug/package.json b/packages/debug/package.json index d0e54970592..bfe0cceb6dc 100644 --- a/packages/debug/package.json +++ b/packages/debug/package.json @@ -14,24 +14,50 @@ "author": "", "directories": {}, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" + }, + "files": [ + "unstable-preview-types", + "addon-main.cjs", + "dist", + "README.md", + "LICENSE.md", + "CHANGELOG.md", + "ember-data-logo-dark.svg", + "ember-data-logo-light.svg" + ], + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./dist/index.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./dist/*.js" + } }, "peerDependencies": { "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/model": "workspace:5.4.0-alpha.64", "@ember/string": "^3.1.1", "@warp-drive/core-types": "workspace:0.0.0-alpha.50" }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@ember/string": { "injected": true }, "@ember-data/store": { "injected": true }, + "@ember-data/model": { + "injected": true + }, + "@ember-data/legacy-compat": { + "injected": true + }, "@ember-data/request": { "injected": true }, @@ -40,33 +66,44 @@ }, "@ember-data/tracking": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "dependencies": { - "@babel/core": "^7.24.4", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.15.1", - "ember-auto-import": "^2.7.2", - "ember-cli-babel": "^8.2.0", - "webpack": "^5.91.0" + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" }, "devDependencies": { + "@babel/core": "^7.24.4", + "@babel/plugin-transform-typescript": "^7.24.4", + "@babel/preset-env": "^7.24.4", + "@babel/preset-typescript": "^7.24.1", "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/model": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@ember/test-waiters": "^3.1.0", "@ember/string": "^3.1.1", "@glimmer/component": "^1.1.2", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10" + "ember-inflector": "^4.0.2", + "decorator-transforms": "^1.1.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10", + "typescript": "^5.4.5", + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember-addon": { - "main": "index.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, diff --git a/packages/debug/addon/data-adapter.ts b/packages/debug/src/data-adapter.ts similarity index 94% rename from packages/debug/addon/data-adapter.ts rename to packages/debug/src/data-adapter.ts index ae8b06c5cb7..52dad131c4d 100644 --- a/packages/debug/addon/data-adapter.ts +++ b/packages/debug/src/data-adapter.ts @@ -23,18 +23,18 @@ @module @ember-data/debug @main @ember-data/debug */ -import type Store from '@ember-data/store'; -import type Model from '@ember-data/model'; -import { ModelSchema } from '@ember-data/store/-types/q/ds-model'; -import { assert } from '@ember/debug'; +import type { NativeArray } from '@ember/array'; +import { A } from '@ember/array'; import DataAdapter from '@ember/debug/data-adapter'; import { addObserver, removeObserver } from '@ember/object/observers'; import { inject as service } from '@ember/service'; import { capitalize, underscore } from '@ember/string'; -import { recordIdentifierFor } from '@ember-data/store'; -import type { NativeArray } from '@ember/array'; -import { A } from '@ember/array'; +import type Model from '@ember-data/model'; +import type Store from '@ember-data/store'; +import { recordIdentifierFor } from '@ember-data/store'; +import type { ModelSchema } from '@ember-data/store/types'; +import { assert } from '@warp-drive/build-config/macros'; const StoreTypesMap = new WeakMap>(); @@ -56,7 +56,7 @@ type WrappedRecord = { filterValues: object; color: RecordColor | null; }; -type WrappedTypeCallback = (types: WrappedType[]) => void; +type WrappedTypeCallback = (types: WrappedType[]) => void; function debugInfo(this: Model) { const relationships: { belongsTo?: []; hasMany?: [] } = {}; @@ -210,7 +210,7 @@ export default class extends DataAdapter { this.watchTypeIfUnseen(store, discoveredTypes, type, typesAdded, typesUpdated, _releaseMethods); }); - let release = () => { + const release = () => { _releaseMethods.forEach((fn) => fn()); // reset the list so the models can be added if the inspector is re-opened // the entries are set to false instead of removed, since the models still exist in the app @@ -246,9 +246,9 @@ export default class extends DataAdapter { releaseMethods: Array<() => void> ) { if (discoveredTypes.get(type) !== true) { - let klass = store.modelFor(type); + const klass = store.modelFor(type); installDebugInfo(klass as typeof Model); - let wrapped = this.wrapModelType(klass, type); + const wrapped = this.wrapModelType(klass, type); releaseMethods.push(this.observeModelType(type, typesUpdated)); typesAdded([wrapped]); discoveredTypes.set(type, true); @@ -278,19 +278,18 @@ export default class extends DataAdapter { desc: {String} Humanized description (what would show in a table column name) */ override columnsForType(typeClass: ModelSchema) { - let columns = [ + const columns = [ { name: 'id', desc: 'Id', }, ]; let count = 0; - let self = this; typeClass.attributes.forEach((meta, name) => { - if (count++ > self.attributeLimit) { + if (count++ > this.attributeLimit) { return false; } - let desc = this.columnNameToDesc(name); + const desc = this.columnNameToDesc(name); columns.push({ name: name, desc: desc }); }); return columns; @@ -310,9 +309,9 @@ export default class extends DataAdapter { override getRecords(modelClass: ModelSchema, modelName: string) { if (arguments.length < 2) { // Legacy Ember.js < 1.13 support - let containerKey = (modelClass as unknown as { _debugContainerKey?: string })._debugContainerKey; + const containerKey = (modelClass as unknown as { _debugContainerKey?: string })._debugContainerKey; if (containerKey) { - let match = containerKey.match(/model:(.*)/); + const match = containerKey.match(/model:(.*)/); if (match !== null) { modelName = match[1]; } @@ -333,7 +332,7 @@ export default class extends DataAdapter { */ override getRecordColumnValues(record: Model) { let count = 0; - let columnValues: Record = { id: record.id }; + const columnValues: Record = { id: record.id }; record.eachAttribute((key) => { if (count++ > this.attributeLimit) { @@ -426,7 +425,7 @@ export default class extends DataAdapter { }); }); - let release = function () { + const release = function () { releaseMethods.forEach((fn) => fn()); }; diff --git a/packages/debug/addon/index.ts b/packages/debug/src/index.ts similarity index 100% rename from packages/debug/addon/index.ts rename to packages/debug/src/index.ts diff --git a/packages/debug/tsconfig.json b/packages/debug/tsconfig.json new file mode 100644 index 00000000000..5c968b64d43 --- /dev/null +++ b/packages/debug/tsconfig.json @@ -0,0 +1,71 @@ +{ + "include": ["src/**/*"], + "compilerOptions": { + "lib": ["DOM", "ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "strict": true, + "pretty": true, + "downlevelIteration": true, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "emitDeclarationOnly": true, + "noImplicitOverride": false, + // Enable faster builds + // but causes us to not rebuild properly + "composite": true, + "incremental": true, + "rootDir": "src", + "baseUrl": ".", + "experimentalDecorators": true, + "declaration": true, + "declarationMap": true, + "declarationDir": "unstable-preview-types", + "inlineSourceMap": true, + "inlineSources": true, + "types": ["ember-source/types"], + "paths": { + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../legacy-compat/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/model": ["../model/unstable-preview-types"], + "@ember-data/model/*": ["../model/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] + } + }, + "references": [ + { + "path": "../request" + }, + { + "path": "../store" + }, + { + "path": "../model" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + }, + { + "path": "../legacy-compat" + } + ] +} diff --git a/packages/debug/vite.config.mjs b/packages/debug/vite.config.mjs new file mode 100644 index 00000000000..bb335a6f7ff --- /dev/null +++ b/packages/debug/vite.config.mjs @@ -0,0 +1,19 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/debug/data-adapter', + '@ember/service', + '@ember/object/observers', + '@ember/string', + '@ember/array', +]; + +export const entryPoints = ['./src/index.ts', './src/data-adapter.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/diagnostic/.eslintrc.cjs b/packages/diagnostic/.eslintrc.cjs deleted file mode 100644 index 2cb6b43cf2a..00000000000 --- a/packages/diagnostic/.eslintrc.cjs +++ /dev/null @@ -1,39 +0,0 @@ -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', '@glimmer/manager', '@ember/runloop'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - node.defaults({ - files: ['./server/**'], - useModules: true, - globals: { Bun: true }, - }), - typescript.defaults({ - rules: { - 'no-console': 'off', - }, - }), - ], -}; diff --git a/packages/diagnostic/.npmignore b/packages/diagnostic/.npmignore deleted file mode 100644 index 07e6e472cc7..00000000000 --- a/packages/diagnostic/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/packages/diagnostic/addon-main.cjs b/packages/diagnostic/addon-main.cjs index d36b0c86dac..25b3a963d42 100644 --- a/packages/diagnostic/addon-main.cjs +++ b/packages/diagnostic/addon-main.cjs @@ -1,5 +1,5 @@ 'use strict'; -const { addonV1Shim } = require('@embroider/addon-shim'); +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); -module.exports = addonV1Shim(__dirname); +module.exports = addonShim(__dirname); diff --git a/packages/diagnostic/babel.config.json b/packages/diagnostic/babel.config.json deleted file mode 100644 index 278b4a0eb62..00000000000 --- a/packages/diagnostic/babel.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": [["@babel/plugin-transform-typescript", { "allowDeclareFields": true }]] -} diff --git a/packages/diagnostic/babel.config.mjs b/packages/diagnostic/babel.config.mjs new file mode 100644 index 00000000000..1cefd69a479 --- /dev/null +++ b/packages/diagnostic/babel.config.mjs @@ -0,0 +1,8 @@ +export default { + plugins: [ + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/diagnostic/eslint.config.mjs b/packages/diagnostic/eslint.config.mjs new file mode 100644 index 00000000000..4debba02d3d --- /dev/null +++ b/packages/diagnostic/eslint.config.mjs @@ -0,0 +1,31 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/test-helpers', '@glimmer/manager', '@ember/runloop'], + rules: { + 'no-console': 'off', + }, + }), + + // node (module) ================ + node.esm({ + files: ['server/**/*.{js,ts}'], + globals: { Bun: true }, + rules: { + 'no-console': 'off', + }, + }), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/diagnostic/package.json b/packages/diagnostic/package.json index 8902e84f45e..0c0b59a7086 100644 --- a/packages/diagnostic/package.json +++ b/packages/diagnostic/package.json @@ -24,6 +24,7 @@ "license": "MIT", "author": "Chris Thoburn ", "files": [ + "unstable-preview-types", "addon-main.cjs", "dist/", "server/", @@ -32,18 +33,17 @@ "NCC-1701-a.svg", "NCC-1701-a-blue.svg" ], - "type": "module", "exports": { ".": { "node": "./server/index.js", "bun": "./server/index.js", "deno": "./server/index.js", "browser": { - "types": "./dist/index.d.ts", + "types": "./unstable-preview-types/index.d.ts", "default": "./dist/index.js" }, "import": { - "types": "./dist/index.d.ts", + "types": "./unstable-preview-types/index.d.ts", "default": "./dist/index.js" }, "default": "./server/index.js" @@ -54,27 +54,23 @@ "deno": "./server/*.js" }, "./ember": { - "types": "./dist/ember.d.ts", + "types": "./unstable-preview-types/ember.d.ts", "default": "./dist/ember.js" }, "./*": { - "types": "./dist/*.d.ts", + "types": "./unstable-preview-types/*.d.ts", "default": "./dist/*.js" } }, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "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": "bun run build:runtime && bun run build:types", - "start": "rollup --config --watch", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "peerDependencies": { - "@ember/test-helpers": ">= 3.3.0", - "@embroider/addon-shim": ">= 1.8.7", + "@ember/test-helpers": "^3.3.0", "ember-cli-test-loader": ">= 3.1.0" }, "peerDependenciesMeta": { @@ -83,41 +79,33 @@ }, "ember-cli-test-loader": { "optional": true - }, - "@embroider/addon-shim": { - "optional": true } }, "dependencies": { "chalk": "^5.3.0", "debug": "^4.3.4", "ember-cli-htmlbars": "^6.3.0", - "tmp": "^0.2.3" + "tmp": "^0.2.3", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", "@babel/runtime": "^7.24.4", - "@embroider/addon-dev": "^4.3.1", - "@embroider/addon-shim": "^1.8.7", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "bun-types": "^1.1.3", "@ember/test-helpers": "^3.3.0", "ember-source": "~5.7.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10", "@glimmer/component": "^1.1.2", "ember-cli-test-loader": "^3.1.0", - "rollup": "^4.14.3", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "typescript": "^5.4.5", - "walk-sync": "^3.0.0" + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" @@ -126,7 +114,8 @@ "ember-addon": { "main": "addon-main.cjs", "type": "addon", - "version": 2 + "version": 2, + "preventDownleveling": true }, "ember": { "edition": "octane" diff --git a/packages/diagnostic/rollup.config.mjs b/packages/diagnostic/rollup.config.mjs deleted file mode 100644 index b33ff7e7b96..00000000000 --- a/packages/diagnostic/rollup.config.mjs +++ /dev/null @@ -1,35 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external(['@ember/runloop', '@ember/test-helpers', 'ember-cli-test-loader/test-support/index']), - - 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', 'reporters/dom.js', 'reporters/tap.js', 'runners/dom.js', 'ember.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'bundled', - }), - - addon.keepAssets(['**/*.css']), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/diagnostic/server/default-setup.js b/packages/diagnostic/server/default-setup.js index 87dc0311065..58b4e84fcc6 100644 --- a/packages/diagnostic/server/default-setup.js +++ b/packages/diagnostic/server/default-setup.js @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; diff --git a/packages/diagnostic/src/-types.ts b/packages/diagnostic/src/-types.ts index 364e91da156..65800e65906 100644 --- a/packages/diagnostic/src/-types.ts +++ b/packages/diagnostic/src/-types.ts @@ -14,10 +14,8 @@ export type CompatTestReport = { }; export interface Emitter { - emit(name: 'suite-start', data: SuiteReport): void; - emit(name: 'suite-finish', data: SuiteReport): void; - emit(name: 'test-start', data: CompatTestReport): void; - emit(name: 'test-finish', data: CompatTestReport): void; + emit(name: 'suite-start' | 'suite-finish', data: SuiteReport): void; + emit(name: 'test-start' | 'test-finish', data: CompatTestReport): void; } export type ParamConfig = { diff --git a/packages/diagnostic/src/emitters/diagnostic.ts b/packages/diagnostic/src/emitters/diagnostic.ts index d4f2217ebcc..21f724a0df2 100644 --- a/packages/diagnostic/src/emitters/diagnostic.ts +++ b/packages/diagnostic/src/emitters/diagnostic.ts @@ -82,10 +82,8 @@ class DiagnosticEmitter implements Emitter { } } - emit(name: 'suite-start', data: SuiteReport): void; - emit(name: 'suite-finish', data: SuiteReport): void; - emit(name: 'test-start', data: CompatTestReport): void; - emit(name: 'test-finish', data: CompatTestReport): void; + emit(name: 'suite-start' | 'suite-finish', data: SuiteReport): void; + emit(name: 'test-start' | 'test-finish', data: CompatTestReport): void; emit(name: 'suite-start' | 'suite-finish' | 'test-start' | 'test-finish', data: SuiteReport | CompatTestReport) { if (!this.socket) { return; diff --git a/packages/diagnostic/src/emitters/testem.ts b/packages/diagnostic/src/emitters/testem.ts index 33b29a628f0..2f5d8b7c3b2 100644 --- a/packages/diagnostic/src/emitters/testem.ts +++ b/packages/diagnostic/src/emitters/testem.ts @@ -3,10 +3,8 @@ import type { 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 + emit(name: 'tests-start' | 'all-test-results'): void; // suite-start / suite-finish + emit(name: 'tests-start' | 'test-result', data: CompatTestReport): void; // test-start / test-finish }; interface TestemGlobal { @@ -20,10 +18,8 @@ class TestemEmitter implements Emitter { this.socket = socket; } - emit(name: 'suite-start', data: SuiteReport): void; - emit(name: 'suite-finish', data: SuiteReport): void; - emit(name: 'test-start', data: CompatTestReport): void; - emit(name: 'test-finish', data: CompatTestReport): void; + emit(name: 'suite-start' | 'suite-finish', data: SuiteReport): void; + emit(name: 'test-start' | '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'`, diff --git a/packages/diagnostic/tsconfig.json b/packages/diagnostic/tsconfig.json index b61fa65fb3a..1af69728c47 100644 --- a/packages/diagnostic/tsconfig.json +++ b/packages/diagnostic/tsconfig.json @@ -6,15 +6,14 @@ "target": "esnext", "moduleResolution": "bundler", "moduleDetection": "force", - "declarationDir": "dist", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, "emitDeclarationOnly": true, // Enable faster builds @@ -25,6 +24,7 @@ "declaration": true, "declarationMap": true, + "declarationDir": "unstable-preview-types", "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"] diff --git a/packages/diagnostic/vite.config.mjs b/packages/diagnostic/vite.config.mjs new file mode 100644 index 00000000000..d5af87fa73e --- /dev/null +++ b/packages/diagnostic/vite.config.mjs @@ -0,0 +1,27 @@ +import { keepAssets } from '@warp-drive/internal-config/rollup/keep-assets'; +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/runloop', + '@ember/test-helpers', + 'ember-cli-test-loader/test-support/index', + '@glimmer/manager', +]; +export const entryPoints = [ + './src/index.ts', + './src/reporters/dom.ts', + './src/runners/dom.ts', + './src/ember.ts', + './src/-types.ts', +]; + +export default createConfig( + { + entryPoints, + externals, + rollup: { + plugins: [keepAssets({ from: 'src', include: ['./styles/**/*.css'] })], + }, + }, + import.meta.resolve +); diff --git a/packages/ember/.eslintrc.cjs b/packages/ember/.eslintrc.cjs deleted file mode 100644 index ef560a24520..00000000000 --- a/packages/ember/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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/service', '@ember/debug', '@glimmer/tracking', '@glimmer/component'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [node.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/ember/addon-main.cjs b/packages/ember/addon-main.cjs index d36b0c86dac..25b3a963d42 100644 --- a/packages/ember/addon-main.cjs +++ b/packages/ember/addon-main.cjs @@ -1,5 +1,5 @@ 'use strict'; -const { addonV1Shim } = require('@embroider/addon-shim'); +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); -module.exports = addonV1Shim(__dirname); +module.exports = addonShim(__dirname); diff --git a/packages/ember/babel.config.js b/packages/ember/babel.config.mjs similarity index 81% rename from packages/ember/babel.config.js rename to packages/ember/babel.config.mjs index 3a61dfee6d2..bdd98d929b9 100644 --- a/packages/ember/babel.config.js +++ b/packages/ember/babel.config.mjs @@ -1,6 +1,8 @@ -module.exports = { +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { plugins: [ - ['@babel/plugin-transform-runtime', { loose: true }], + ...macros(), [ '@babel/plugin-transform-typescript', { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, diff --git a/packages/ember/eslint.config.mjs b/packages/ember/eslint.config.mjs new file mode 100644 index 00000000000..ef2c160c8bc --- /dev/null +++ b/packages/ember/eslint.config.mjs @@ -0,0 +1,29 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as gts from '@warp-drive/internal-config/eslint/gts.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/service', '@glimmer/tracking', '@glimmer/component'], + }), + + // gts + gts.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/service', '@glimmer/tracking', '@glimmer/component'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/ember/package.json b/packages/ember/package.json index 45330eb7469..c0bb09eaefd 100644 --- a/packages/ember/package.json +++ b/packages/ember/package.json @@ -15,18 +15,16 @@ "ember-addon" ], "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "glint --build", - "check:types": "glint", - "build:client": "rollup --config", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "_lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:glint": "glint --build", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "files": [ "unstable-preview-types", "addon-main.cjs", - "addon", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -35,11 +33,11 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "peerDependencies": { @@ -53,7 +51,7 @@ "dependencies": { "@ember/test-waiters": "^3.1.0", "@embroider/macros": "^1.15.1", - "@embroider/addon-shim": "^1.8.7" + "@warp-drive/build-config": "workspace:0.0.0-alpha.1" }, "dependenciesMeta": { "@ember-data/store": { @@ -67,6 +65,9 @@ }, "@ember-data/tracking": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "peerDependenciesMeta": { @@ -75,17 +76,11 @@ } }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", "@babel/runtime": "^7.24.4", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@glimmer/validator": "^0.92.0", @@ -93,25 +88,26 @@ "@glint/environment-ember-loose": "^1.4.0", "@glint/environment-ember-template-imports": "^1.4.0", "@glint/template": "^1.4.0", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", - "decorator-transforms": "1.1.0", + "decorator-transforms": "^1.1.0", + "@embroider/addon-dev": "^4.3.1", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", "@ember/string": "^3.1.1", + "@ember/test-helpers": "^3.3.0", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "babel-plugin-ember-template-compilation": "^2.2.1", "ember-template-imports": "^4.1.0", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", + "rollup": "^4.17.2", "typescript": "^5.4.5", - "walk-sync": "^3.0.0" + "vite": "^5.2.11", + "ember-provide-consume-context": "^0.3.1" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" @@ -119,6 +115,7 @@ "ember-addon": { "main": "addon-main.cjs", "type": "addon", + "preventDownleveling": true, "version": 2 }, "ember": { diff --git a/packages/ember/rollup.config.mjs b/packages/ember/rollup.config.mjs deleted file mode 100644 index 1a705b452ef..00000000000 --- a/packages/ember/rollup.config.mjs +++ /dev/null @@ -1,45 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external([ - '@ember/template-compilation', - '@ember/debug', - '@ember/component', // unsure where this comes from - '@ember/service', - '@embroider/macros', - '@glimmer/component', - '@ember/test-waiters', - '@glimmer/tracking', - ]), - - 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']), - - nodeResolve({ extensions: ['.ts', '.gts'] }), - babel({ - extensions: ['.ts', '.gts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Ensure that .gjs files are properly integrated as Javascript - addon.gjs(), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/ember/src/-private/await.gts b/packages/ember/src/-private/await.gts index fb04cf55b58..6ad3e25a4a5 100644 --- a/packages/ember/src/-private/await.gts +++ b/packages/ember/src/-private/await.gts @@ -1,6 +1,8 @@ import Component from '@glimmer/component'; + +import type { Awaitable } from '@ember-data/request'; + import { getPromiseState } from './promise-state.ts'; -import { Awaitable } from '@ember-data/request'; export const and = (x: unknown, y: unknown) => Boolean(x && y); interface ThrowSignature { @@ -12,6 +14,9 @@ interface ThrowSignature { export class Throw extends Component> { constructor(owner: unknown, args: ThrowSignature['Args']) { super(owner, args); + // this error is opaque (user supplied) so we don't validate it + // as an Error instance. + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw this.args.error; } diff --git a/packages/ember/src/-private/request.gts b/packages/ember/src/-private/request.gts index 35477cf1462..e142c99aff2 100644 --- a/packages/ember/src/-private/request.gts +++ b/packages/ember/src/-private/request.gts @@ -1,21 +1,20 @@ -import { assert } from '@ember/debug'; import { service } from '@ember/service'; import Component from '@glimmer/component'; -import { cached } from '@glimmer/tracking'; -import { EnableHydration, type RequestInfo } from '@warp-drive/core-types/request'; -import type { Future, StructuredErrorDocument } from '@ember-data/request'; -import type { RequestState } from './request-state.ts'; +import { cached, tracked } from '@glimmer/tracking'; + import { importSync, macroCondition, moduleExists } from '@embroider/macros'; +import type { Future, StructuredErrorDocument } from '@ember-data/request'; import type { StoreRequestInput } from '@ember-data/store'; import type Store from '@ember-data/store'; +import { assert } from '@warp-drive/build-config/macros'; +import { EnableHydration, type RequestInfo } from '@warp-drive/core-types/request'; -import { getRequestState } from './request-state.ts'; -import type { RequestLoadingState } from './request-state.ts'; import { and, Throw } from './await.gts'; -import { tracked } from '@glimmer/tracking'; +import type { RequestLoadingState, RequestState } from './request-state.ts'; +import { getRequestState } from './request-state.ts'; -function notNull(x: null): never; +function notNull(x: null): never; function notNull(x: T): Exclude; function notNull(x: T | null) { assert('Expected a non-null value, but got null', x !== null); @@ -32,6 +31,10 @@ if (macroCondition(moduleExists('ember-provide-consume-context'))) { provide = consume; } +function isNeverString(val: never): string { + return val; +} + type ContentFeatures = { isOnline: boolean; isHidden: boolean; @@ -71,9 +74,9 @@ export class Request extends Component> { * @internal */ @provide('store') declare _store: Store; - @tracked isOnline: boolean = true; - @tracked isHidden: boolean = true; - @tracked isRefreshing: boolean = false; + @tracked isOnline = true; + @tracked isHidden = true; + @tracked isRefreshing = false; @tracked _localRequest: Future | undefined; @tracked _latestRequest: Future | undefined; declare unavailableStart: number | null; @@ -121,7 +124,7 @@ export class Request extends Component> { this.unavailableStart = null; if (shouldAttempt) { - const request = Object.assign({}, this.reqState.request as unknown as RequestInfo); + const request = Object.assign({}, this.reqState.request as unknown as RequestInfo); const val = mode ?? this.args.autorefreshBehavior ?? 'policy'; switch (val) { case 'reload': @@ -133,7 +136,9 @@ export class Request extends Component> { case 'policy': break; default: - throw new Error(`Invalid ${mode ? 'update mode' : '@autorefreshBehavior'} for : ${val}`); + throw new Error( + `Invalid ${mode ? 'update mode' : '@autorefreshBehavior'} for : ${isNeverString(val)}` + ); } const wasStoreRequest = (request as { [EnableHydration]: boolean })[EnableHydration] === true; @@ -143,8 +148,8 @@ export class Request extends Component> { ); this._latestRequest = wasStoreRequest - ? this.store.request(request) - : this.store.requestManager.request(request); + ? this.store.request(request) + : this.store.requestManager.request(request); if (val !== 'refresh') { this._localRequest = this._latestRequest; @@ -235,7 +240,7 @@ export class Request extends Component> { return request; } assert(`You must provide either @request or an @query arg with the component`, query); - return this.store.request(query!); + return this.store.request(query); } get store(): Store { diff --git a/packages/ember/tsconfig.json b/packages/ember/tsconfig.json index 181ec8e84eb..dcc7dcdb980 100644 --- a/packages/ember/tsconfig.json +++ b/packages/ember/tsconfig.json @@ -10,14 +10,13 @@ "skipLibCheck": true, "declarationDir": "unstable-preview-types", "emitDeclarationOnly": true, - "noEmit": false, "allowJs": false, "checkJs": false, "alwaysStrict": true, "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "allowSyntheticDefaultImports": true, - "noImplicitAny": true, "noImplicitThis": true, "strictBindCallApply": true, @@ -30,28 +29,46 @@ "noErrorTruncation": true, "preserveConstEnums": false, "experimentalDecorators": true, - "pretty": true, - // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - "declaration": true, "declarationMap": true, "inlineSourceMap": true, "inlineSources": true, - - "baseUrl": "src", - - "paths": { - "@warp-drive/build-config/env": ["../../private-build-infra/virtual-packages/env.d.ts"] - }, - + "baseUrl": ".", "types": ["ember-source/types"], - - "allowImportingTsExtensions": true + "allowImportingTsExtensions": true, + "paths": { + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] + } }, - "references": [{ "path": "../store" }, { "path": "../core-types" }, { "path": "../request" }] + "references": [ + { + "path": "../store" + }, + { + "path": "../core-types" + }, + { + "path": "../request" + }, + { + "path": "../build-config" + }, + { + "path": "../tracking" + } + ] } diff --git a/packages/ember/vite.config.mjs b/packages/ember/vite.config.mjs new file mode 100644 index 00000000000..da8ac09a757 --- /dev/null +++ b/packages/ember/vite.config.mjs @@ -0,0 +1,22 @@ +import { gjs } from '@warp-drive/internal-config/rollup/gjs'; +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/template-compilation', + '@ember/component', // unsure where this comes from + '@ember/service', + '@glimmer/component', + '@ember/test-waiters', + '@glimmer/tracking', +]; +export const entryPoints = ['./src/index.ts']; + +export default createConfig( + { + entryPoints, + externals, + plugins: [gjs()], + useGlint: true, + }, + import.meta.resolve +); diff --git a/packages/eslint-plugin-ember-data/eslint.config.mjs b/packages/eslint-plugin-ember-data/eslint.config.mjs new file mode 100644 index 00000000000..069d0056967 --- /dev/null +++ b/packages/eslint-plugin-ember-data/eslint.config.mjs @@ -0,0 +1,17 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs({ + files: ['src/*'], + }), +]; diff --git a/packages/eslint-plugin-ember-data/package.json b/packages/eslint-plugin-ember-data/package.json index e73745164eb..d2fcc736551 100644 --- a/packages/eslint-plugin-ember-data/package.json +++ b/packages/eslint-plugin-ember-data/package.json @@ -13,9 +13,7 @@ "extends": "../../package.json" }, "devDependencies": { - "pnpm-sync-dependencies-meta-injected": "0.0.10" + "@warp-drive/internal-config": "workspace:5.4.0-alpha.64" }, - "scripts": { - "_syncPnpm": "bun run sync-dependencies-meta-injected" - } + "scripts": {} } diff --git a/packages/graph/.eslintrc.cjs b/packages/graph/.eslintrc.cjs deleted file mode 100644 index a34d3761938..00000000000 --- a/packages/graph/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/graph/.npmignore b/packages/graph/.npmignore deleted file mode 100644 index e4bce62a5ec..00000000000 --- a/packages/graph/.npmignore +++ /dev/null @@ -1,40 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# ember-data -/node-tests - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json \ No newline at end of file diff --git a/packages/graph/addon-main.cjs b/packages/graph/addon-main.cjs index 16a41526809..25b3a963d42 100644 --- a/packages/graph/addon-main.cjs +++ b/packages/graph/addon-main.cjs @@ -1,94 +1,5 @@ -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'); +'use strict'; -const pkg = require('./package.json'); +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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; - }, -}; +module.exports = addonShim(__dirname); diff --git a/packages/graph/babel.config.js b/packages/graph/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/graph/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/graph/babel.config.mjs b/packages/graph/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/graph/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/graph/eslint.config.mjs b/packages/graph/eslint.config.mjs new file mode 100644 index 00000000000..63296bac802 --- /dev/null +++ b/packages/graph/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/debug'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/graph/package.json b/packages/graph/package.json index 77bc9c476b1..adc8a3b9a45 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -13,17 +13,15 @@ "license": "MIT", "author": "Chris Thoburn ", "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "files": [ "unstable-preview-types", "addon-main.cjs", - "addon", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -32,21 +30,14 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, - "peerDependencies": { - "@ember-data/store": "workspace:5.4.0-alpha.64", - "@warp-drive/core-types": "workspace:0.0.0-alpha.50" - }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/store": { "injected": true }, @@ -61,44 +52,40 @@ }, "@ember/string": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, + "peerDependencies": { + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50" + }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-cli-babel": "^8.2.0" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0" + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/graph/rollup.config.mjs b/packages/graph/rollup.config.mjs deleted file mode 100644 index 29a69782cbe..00000000000 --- a/packages/graph/rollup.config.mjs +++ /dev/null @@ -1,37 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - 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 - // addon. Anything not listed here may get optimized away. - addon.publicEntrypoints(['index.js', 'error.js', 'json-api.js', 'rest.js', '-private.js']), - - nodeResolve({ extensions: ['.ts', '.js'] }), - babel({ - extensions: ['.ts', '.js'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/graph/src/-private.ts b/packages/graph/src/-private.ts index 539af1cac91..5b0b2d75d87 100644 --- a/packages/graph/src/-private.ts +++ b/packages/graph/src/-private.ts @@ -27,13 +27,19 @@ pnpm add @ember-data/graph @main @ember-data/graph */ import type Store from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; import { getStore } from './-private/-utils'; import { Graph, Graphs } from './-private/graph'; export { isBelongsTo } from './-private/-utils'; +export type { CollectionEdge } from './-private/edges/collection'; +export type { ResourceEdge } from './-private/edges/resource'; +export type { ImplicitEdge } from './-private/edges/implicit'; +export type { GraphEdge } from './-private/graph'; +export type { UpgradedMeta } from './-private/-edge-definition'; +export type { Graph }; function isStore(maybeStore: unknown): maybeStore is Store { return (maybeStore as Store)._instanceCache !== undefined; diff --git a/packages/graph/src/-private/-diff.ts b/packages/graph/src/-private/-diff.ts index 7cf2a448dc2..71a42cd60ee 100644 --- a/packages/graph/src/-private/-diff.ts +++ b/packages/graph/src/-private/-diff.ts @@ -1,7 +1,8 @@ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import { DEPRECATE_NON_UNIQUE_PAYLOADS } from '@warp-drive/build-config/deprecations'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { isBelongsTo } from './-utils'; diff --git a/packages/graph/src/-private/-edge-definition.ts b/packages/graph/src/-private/-edge-definition.ts index d2e15e0646c..c7e487a64f7 100644 --- a/packages/graph/src/-private/-edge-definition.ts +++ b/packages/graph/src/-private/-edge-definition.ts @@ -1,9 +1,8 @@ -import { assert } from '@ember/debug'; - import type Store from '@ember-data/store'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { LegacyRelationshipSchema as RelationshipSchema } from '@warp-drive/core-types/schema/fields'; import { expandingGet, expandingSet, getStore } from './-utils'; import { assertInheritedSchema } from './debug/assert-polymorphic-type'; diff --git a/packages/graph/src/-private/-utils.ts b/packages/graph/src/-private/-utils.ts index 023a151bb6d..8f970bb3884 100644 --- a/packages/graph/src/-private/-utils.ts +++ b/packages/graph/src/-private/-utils.ts @@ -1,12 +1,13 @@ -import { assert, inspect, warn } from '@ember/debug'; +import { inspect, warn } from '@ember/debug'; 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 type { CacheCapabilitiesManager } from '@ember-data/store/types'; import { LOG_GRAPH } from '@warp-drive/build-config/debugging'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { UpdateRelationshipOperation } from '@warp-drive/core-types/graph'; -import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; +import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; import type { UpgradedMeta } from './-edge-definition'; import { coerceId } from './coerce-id'; diff --git a/packages/graph/src/-private/coerce-id.ts b/packages/graph/src/-private/coerce-id.ts index 57c4c022122..ac446540ad8 100644 --- a/packages/graph/src/-private/coerce-id.ts +++ b/packages/graph/src/-private/coerce-id.ts @@ -1,6 +1,7 @@ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import { DEPRECATE_NON_STRICT_ID } from '@warp-drive/build-config/deprecations'; +import { assert } from '@warp-drive/build-config/macros'; // Used by the store to normalize IDs entering the store. Despite the fact // that developers may provide IDs as numbers (e.g., `store.findRecord('person', 1)`), diff --git a/packages/graph/src/-private/debug/assert-polymorphic-type.ts b/packages/graph/src/-private/debug/assert-polymorphic-type.ts index 31584ac2686..268cd9443d3 100644 --- a/packages/graph/src/-private/debug/assert-polymorphic-type.ts +++ b/packages/graph/src/-private/debug/assert-polymorphic-type.ts @@ -1,8 +1,10 @@ -import { assert } from '@ember/debug'; +/* eslint-disable no-inner-declarations, @typescript-eslint/no-shadow */ +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; -import type { UpgradedMeta } from '../-edge-definition'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; + +import type { UpgradedMeta } from '../-edge-definition'; /* Assert that `addedRecord` has a valid type so it can be added to the @@ -151,10 +153,10 @@ if (DEBUG) { } assertInheritedSchema = function assertInheritedSchema(definition: UpgradedMeta, type: string) { - let meta1 = metaFrom(definition); - let meta2 = inverseMetaFrom(definition); - let errors1 = validateSchema(inverseDefinition(definition), meta1); - let errors2 = validateSchema(definitionWithPolymorphic(definition), meta2); + const meta1 = metaFrom(definition); + const meta2 = inverseMetaFrom(definition); + const errors1 = validateSchema(inverseDefinition(definition), meta1); + const errors2 = validateSchema(definitionWithPolymorphic(definition), meta2); if (errors2.size === 0 && errors1.size > 0) { throw new Error( @@ -210,7 +212,7 @@ if (DEBUG) { return; } if (parentDefinition.isPolymorphic) { - let meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[ + const meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[ parentDefinition.inverseKey ]; assert( @@ -227,7 +229,7 @@ if (DEBUG) { `You should not specify both options.as and options.inverse as null on ${addedIdentifier.type}.${parentDefinition.inverseKey}, as if there is no inverse field there is no abstract type to conform to. You may have intended for this relationship to be polymorphic, or you may have mistakenly set inverse to null.`, !(meta.options.inverse === null && meta?.options.as?.length) ); - let errors = validateSchema(parentDefinition, meta); + const errors = validateSchema(parentDefinition, meta); assert( `The schema for the relationship '${parentDefinition.inverseKey}' on '${ addedIdentifier.type @@ -244,15 +246,15 @@ if (DEBUG) { } else if (addedIdentifier.type !== parentDefinition.type) { // if we are not polymorphic // then the addedIdentifier.type must be the same as the parentDefinition.type - let meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[ + const meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[ parentDefinition.inverseKey ]; if (meta?.options.as === parentDefinition.type) { // inverse is likely polymorphic but missing the polymorphic flag - let meta = store + const meta = store .getSchemaDefinitionService() .relationshipsDefinitionFor({ type: parentDefinition.inverseType })[parentDefinition.key]; - let errors = validateSchema(definitionWithPolymorphic(inverseDefinition(parentDefinition)), meta); + const errors = validateSchema(definitionWithPolymorphic(inverseDefinition(parentDefinition)), meta); assert( `The '<${addedIdentifier.type}>.${ parentDefinition.inverseKey diff --git a/packages/graph/src/-private/edges/collection.ts b/packages/graph/src/-private/edges/collection.ts index fcadc7673dc..ed61a0c6a7b 100644 --- a/packages/graph/src/-private/edges/collection.ts +++ b/packages/graph/src/-private/edges/collection.ts @@ -1,6 +1,6 @@ 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 type { Links, Meta, PaginationLinks } from '@warp-drive/core-types/spec/json-api-raw'; import { computeLocalState } from '../-diff'; 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 e3156694e1d..3d5c615335a 100644 --- a/packages/graph/src/-private/edges/resource.ts +++ b/packages/graph/src/-private/edges/resource.ts @@ -1,6 +1,6 @@ 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 { Links, Meta, PaginationLinks } from '@warp-drive/core-types/spec/json-api-raw'; import type { UpgradedMeta } from '../-edge-definition'; import type { RelationshipState } from '../-state'; diff --git a/packages/graph/src/-private/graph.ts b/packages/graph/src/-private/graph.ts index 58ae8c77ffa..6a9a441486d 100644 --- a/packages/graph/src/-private/graph.ts +++ b/packages/graph/src/-private/graph.ts @@ -1,11 +1,11 @@ -import { assert } from '@ember/debug'; - -import type { MergeOperation } from '@ember-data/store/-types/q/cache'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import { LOG_GRAPH } from '@warp-drive/build-config/debugging'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import { getOrSetGlobal, peekTransient, setTransient } from '@warp-drive/core-types/-private'; import type { RelationshipDiff } from '@warp-drive/core-types/cache'; +import type { MergeOperation } from '@warp-drive/core-types/cache/operations'; import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; import type { DeleteRecordOperation, @@ -41,9 +41,8 @@ import updateRelationshipOperation from './operations/update-relationship'; export type GraphEdge = ImplicitEdge | CollectionEdge | ResourceEdge; -export const Graphs = new Map(); +export const Graphs = getOrSetGlobal('Graphs', new Map()); -let transactionRef = 0; type PendingOps = { belongsTo?: Map>; hasMany?: Map>; @@ -507,7 +506,9 @@ export class Graph { // eslint-disable-next-line no-console console.groupCollapsed(`Graph: Initialized Transaction`); } + let transactionRef = peekTransient('transactionRef') ?? 0; this._transaction = ++transactionRef; + setTransient('transactionRef', transactionRef); this._willSyncRemote = false; const updates = this._pushedUpdates; const { deletions, hasMany, belongsTo } = updates; @@ -570,8 +571,8 @@ export class Graph { Graphs.forEach((_, key) => { assert( `Memory Leak Detected, likely the test or app instance previous to this was not torn down properly`, - // @ts-expect-error - !key.isDestroyed && !key.isDestroying + !(key as unknown as { isDestroyed: boolean }).isDestroyed && + !(key as unknown as { isDestroying: boolean }).isDestroying ); }); } diff --git a/packages/graph/src/-private/normalize-link.ts b/packages/graph/src/-private/normalize-link.ts index c05a2c99ce2..a7214b5c798 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 '@warp-drive/core-types/spec/raw'; +import type { Link, LinkObject } from '@warp-drive/core-types/spec/json-api-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 65d37e06f35..2c08cb4981b 100644 --- a/packages/graph/src/-private/operations/add-to-related-records.ts +++ b/packages/graph/src/-private/operations/add-to-related-records.ts @@ -1,5 +1,4 @@ -import { assert } from '@ember/debug'; - +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { AddToRelatedRecordsOperation } from '@warp-drive/core-types/graph'; diff --git a/packages/graph/src/-private/operations/merge-identifier.ts b/packages/graph/src/-private/operations/merge-identifier.ts index c48db3370c3..8c95f40179b 100644 --- a/packages/graph/src/-private/operations/merge-identifier.ts +++ b/packages/graph/src/-private/operations/merge-identifier.ts @@ -1,4 +1,4 @@ -import type { MergeOperation } from '@ember-data/store/-types/q/cache'; +import type { MergeOperation } from '@warp-drive/core-types/cache/operations'; import { forAllRelatedIdentifiers, isBelongsTo, isHasMany, notifyChange } from '../-utils'; import type { CollectionEdge } from '../edges/collection'; 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 a7d7536065e..63f198d136f 100644 --- a/packages/graph/src/-private/operations/remove-from-related-records.ts +++ b/packages/graph/src/-private/operations/remove-from-related-records.ts @@ -1,5 +1,4 @@ -import { assert } from '@ember/debug'; - +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { RemoveFromRelatedRecordsOperation } from '@warp-drive/core-types/graph'; diff --git a/packages/graph/src/-private/operations/replace-related-record.ts b/packages/graph/src/-private/operations/replace-related-record.ts index 050886995e1..5779fc2edea 100644 --- a/packages/graph/src/-private/operations/replace-related-record.ts +++ b/packages/graph/src/-private/operations/replace-related-record.ts @@ -1,7 +1,8 @@ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import { DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE } from '@warp-drive/build-config/deprecations'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { ReplaceRelatedRecordOperation } from '@warp-drive/core-types/graph'; diff --git a/packages/graph/src/-private/operations/replace-related-records.ts b/packages/graph/src/-private/operations/replace-related-records.ts index 352351d7ce7..f0dfdc07acb 100644 --- a/packages/graph/src/-private/operations/replace-related-records.ts +++ b/packages/graph/src/-private/operations/replace-related-records.ts @@ -1,7 +1,8 @@ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import { DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE } from '@warp-drive/build-config/deprecations'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { ReplaceRelatedRecordsOperation } from '@warp-drive/core-types/graph'; diff --git a/packages/graph/src/-private/operations/update-relationship.ts b/packages/graph/src/-private/operations/update-relationship.ts index 8a467b7fe34..96fd82f7887 100644 --- a/packages/graph/src/-private/operations/update-relationship.ts +++ b/packages/graph/src/-private/operations/update-relationship.ts @@ -1,14 +1,20 @@ -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; -import type { IdentifierCache } from '@ember-data/store/-private/caches/identifier-cache'; +import type Store from '@ember-data/store'; +import { assert } from '@warp-drive/build-config/macros'; 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 { + ExistingResourceIdentifierObject, + NewResourceIdentifierObject, +} from '@warp-drive/core-types/spec/json-api-raw'; import { isBelongsTo, isHasMany, notifyChange } from '../-utils'; import type { Graph } from '../graph'; import _normalizeLink from '../normalize-link'; +type IdentifierCache = Store['identifierCache']; + /* Updates the "canonical" or "remote" state of a relationship, replacing any existing state and blowing away any local changes (excepting new records). diff --git a/packages/graph/tsconfig.json b/packages/graph/tsconfig.json index 8369e1f331e..09ad8e6916f 100644 --- a/packages/graph/tsconfig.json +++ b/packages/graph/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,41 +7,56 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, + "noImplicitAny": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../request" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../request" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/graph/vite.config.mjs b/packages/graph/vite.config.mjs new file mode 100644 index 00000000000..7936563a474 --- /dev/null +++ b/packages/graph/vite.config.mjs @@ -0,0 +1,15 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/debug', // assert, deprecate +]; + +export const entryPoints = ['./src/-private.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/holodeck/.eslintrc.cjs b/packages/holodeck/.eslintrc.cjs deleted file mode 100644 index a34d3761938..00000000000 --- a/packages/holodeck/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/holodeck/babel.config.json b/packages/holodeck/babel.config.json deleted file mode 100644 index 278b4a0eb62..00000000000 --- a/packages/holodeck/babel.config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": [["@babel/plugin-transform-typescript", { "allowDeclareFields": true }]] -} diff --git a/packages/holodeck/babel.config.mjs b/packages/holodeck/babel.config.mjs new file mode 100644 index 00000000000..1cefd69a479 --- /dev/null +++ b/packages/holodeck/babel.config.mjs @@ -0,0 +1,8 @@ +export default { + plugins: [ + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/holodeck/eslint.config.mjs b/packages/holodeck/eslint.config.mjs new file mode 100644 index 00000000000..3b45156a9d4 --- /dev/null +++ b/packages/holodeck/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: [], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/holodeck/package.json b/packages/holodeck/package.json index dfa8075732b..f467207e210 100644 --- a/packages/holodeck/package.json +++ b/packages/holodeck/package.json @@ -12,7 +12,7 @@ "homepage": "https://github.com/emberjs/data", "bugs": "https://github.com/emberjs/data/issues", "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "keywords": [ "http-mock" @@ -21,16 +21,18 @@ "extends": "../../package.json" }, "dependencies": { - "@hono/node-server": "^1.10.0", + "@hono/node-server": "^1.11.0", "chalk": "^5.3.0", - "hono": "^4.2.4" + "hono": "^4.2.5" }, + "type": "module", "files": [ "bin", "dist", "README.md", "LICENSE.md", "server", + "unstable-preview-types", "NCC-1701-a.svg", "NCC-1701-a-blue.svg" ], @@ -38,53 +40,45 @@ "ensure-cert": "./server/ensure-cert.js" }, "scripts": { - "build:types": "tsc --build --force", - "build:client": "rollup --config", - "_build": "bun run build:client && bun run build:types", - "start": "rollup --config --watch", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "check:pkg-types": "tsc --noEmit", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "peerDependencies": { "@ember-data/request": "workspace:5.4.0-alpha.64", "@warp-drive/core-types": "workspace:0.0.0-alpha.50" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", "@babel/runtime": "^7.24.4", "@ember-data/request": "workspace:5.4.0-alpha.64", - "@embroider/addon-dev": "^4.3.1", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", - "rollup": "^4.14.3", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10" + "vite": "^5.2.11" }, - "type": "module", "exports": { ".": { "node": "./server/index.js", "bun": "./server/index.js", "deno": "./server/index.js", "browser": { - "types": "./dist/index.d.ts", + "types": "./unstable-preview-types/index.d.ts", "default": "./dist/index.js" }, "import": { - "types": "./dist/index.d.ts", + "types": "./unstable-preview-types/index.d.ts", "default": "./dist/index.js" }, "default": "./server/index.js" }, "./mock": { - "types": "./dist/mock.d.ts", + "types": "./unstable-preview-types/mock.d.ts", "default": "./dist/mock.js" } }, diff --git a/packages/holodeck/rollup.config.mjs b/packages/holodeck/rollup.config.mjs deleted file mode 100644 index 26c9257f53c..00000000000 --- a/packages/holodeck/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - 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', 'mock.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'inline', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/holodeck/client/index.ts b/packages/holodeck/src/index.ts similarity index 100% rename from packages/holodeck/client/index.ts rename to packages/holodeck/src/index.ts diff --git a/packages/holodeck/client/mock.ts b/packages/holodeck/src/mock.ts similarity index 100% rename from packages/holodeck/client/mock.ts rename to packages/holodeck/src/mock.ts diff --git a/packages/holodeck/tsconfig.json b/packages/holodeck/tsconfig.json index c3025eaee4d..6454af93255 100644 --- a/packages/holodeck/tsconfig.json +++ b/packages/holodeck/tsconfig.json @@ -1,21 +1,18 @@ { - "include": ["client/**/*"], + "include": ["src/**/*"], "compilerOptions": { "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", "skipLibCheck": true, - "declarationDir": "dist", "emitDeclarationOnly": true, - "noEmit": false, "allowJs": false, "checkJs": false, - "alwaysStrict": true, "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "allowSyntheticDefaultImports": true, - "noImplicitAny": true, "noImplicitThis": true, "strictBindCallApply": true, @@ -28,22 +25,30 @@ "noErrorTruncation": true, "preserveConstEnums": false, "experimentalDecorators": true, - "pretty": true, - - // Enable faster builds - // but causes us to not rebuild properly "composite": true, "incremental": true, - "rootDir": "client", - + "rootDir": "src", // 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", "inlineSourceMap": true, "inlineSources": true, - - "baseUrl": "client" + "baseUrl": ".", + "paths": { + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] + } }, - "references": [{ "path": "../request" }, { "path": "../core-types" }] + "references": [ + { + "path": "../request" + }, + { + "path": "../core-types" + } + ] } diff --git a/packages/holodeck/vite.config.mjs b/packages/holodeck/vite.config.mjs new file mode 100644 index 00000000000..56e2bc98d16 --- /dev/null +++ b/packages/holodeck/vite.config.mjs @@ -0,0 +1,13 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = []; +export const entryPoints = ['./src/index.ts', './src/mock.ts']; + +export default createConfig( + { + entryPoints, + externals, + fixModule: false, + }, + import.meta.resolve +); diff --git a/packages/json-api/.eslintrc.cjs b/packages/json-api/.eslintrc.cjs deleted file mode 100644 index 3b2f4e9906f..00000000000 --- a/packages/json-api/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/json-api/.npmignore b/packages/json-api/.npmignore deleted file mode 100644 index e4bce62a5ec..00000000000 --- a/packages/json-api/.npmignore +++ /dev/null @@ -1,40 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# ember-data -/node-tests - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json \ No newline at end of file diff --git a/packages/json-api/addon-main.cjs b/packages/json-api/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/json-api/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/json-api/addon-main.js b/packages/json-api/addon-main.js deleted file mode 100644 index 16a41526809..00000000000 --- a/packages/json-api/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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/json-api/babel.config.js b/packages/json-api/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/json-api/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/json-api/babel.config.mjs b/packages/json-api/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/json-api/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/json-api/eslint.config.mjs b/packages/json-api/eslint.config.mjs new file mode 100644 index 00000000000..a7acc511eb4 --- /dev/null +++ b/packages/json-api/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['ember-inflector'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/json-api/package.json b/packages/json-api/package.json index 3306f46f538..d9e0d967971 100644 --- a/packages/json-api/package.json +++ b/packages/json-api/package.json @@ -13,22 +13,20 @@ "license": "MIT", "author": "", "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, "files": [ "unstable-preview-types", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -37,35 +35,19 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, - "peerDependencies": { - "@ember-data/graph": "workspace:5.4.0-alpha.64", - "@ember-data/request-utils": "workspace:5.4.0-alpha.64", - "@ember-data/store": "workspace:5.4.0-alpha.64", - "@warp-drive/core-types": "workspace:0.0.0-alpha.50", - "ember-inflector": "^4.0.2" - }, "peerDependenciesMeta": { "@ember-data/request-utils": { "optional": true } }, - "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", - "@ember/edition-utils": "^1.2.0", - "@embroider/macros": "^1.15.1", - "ember-cli-babel": "^8.2.0" - }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@warp-drive/core-types": { "injected": true }, @@ -89,45 +71,50 @@ }, "@ember/string": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, + "peerDependencies": { + "@ember-data/graph": "workspace:5.4.0-alpha.64", + "@ember-data/request-utils": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "ember-inflector": "^4.0.2" + }, + "dependencies": { + "@ember/edition-utils": "^1.2.0", + "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" + }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-inflector": "^4.0.2", "ember-source": "~5.7.0", "expect-type": "^0.19.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0" + "vite": "^5.2.11" }, "ember": { "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/json-api/rollup.config.mjs b/packages/json-api/rollup.config.mjs deleted file mode 100644 index 40b834f78fc..00000000000 --- a/packages/json-api/rollup.config.mjs +++ /dev/null @@ -1,39 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external([ - '@ember-data/graph/-private', - '@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 - // addon. Anything not listed here may get optimized away. - addon.publicEntrypoints(['index.js', 'request.js']), - - nodeResolve({ extensions: ['.ts', '.js'] }), - babel({ - extensions: ['.ts', '.js'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/json-api/src/-private/builders/save-record.ts b/packages/json-api/src/-private/builders/save-record.ts index 45d6d630526..a32b0bbf8fa 100644 --- a/packages/json-api/src/-private/builders/save-record.ts +++ b/packages/json-api/src/-private/builders/save-record.ts @@ -1,5 +1,3 @@ -import { assert } from '@ember/debug'; - import { pluralize } from 'ember-inflector'; import { @@ -9,6 +7,7 @@ import { type UpdateRecordUrlOptions, } from '@ember-data/request-utils'; import { recordIdentifierFor } from '@ember-data/store'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { ConstrainedRequestOptions, diff --git a/packages/json-api/src/-private/cache.ts b/packages/json-api/src/-private/cache.ts index 511aee27908..8dc0fec6aec 100644 --- a/packages/json-api/src/-private/cache.ts +++ b/packages/json-api/src/-private/cache.ts @@ -1,26 +1,17 @@ /** * @module @ember-data/json-api */ -import { assert } from '@ember/debug'; - +import type { CollectionEdge, Graph, GraphEdge, ImplicitEdge, ResourceEdge } from '@ember-data/graph/-private'; import { graphFor, isBelongsTo, peekGraph } from '@ember-data/graph/-private'; -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 Store from '@ember-data/store'; -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 { 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 { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import { LOG_MUTATIONS, LOG_OPERATIONS, LOG_REQUESTS } from '@warp-drive/build-config/debugging'; import { DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE } from '@warp-drive/build-config/deprecations'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; 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 { MergeOperation } from '@warp-drive/core-types/cache/operations'; import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; import type { @@ -28,13 +19,14 @@ import type { StableExistingRecordIdentifier, StableRecordIdentifier, } from '@warp-drive/core-types/identifier'; -import type { Value } from '@warp-drive/core-types/json/raw'; +import type { ObjectValue, Value } from '@warp-drive/core-types/json/raw'; import type { ImmutableRequestInfo, StructuredDataDocument, StructuredDocument, StructuredErrorDocument, } from '@warp-drive/core-types/request'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { CollectionResourceDataDocument, ResourceDataDocument, @@ -43,12 +35,17 @@ import type { ResourceMetaDocument, SingleResourceDataDocument, } from '@warp-drive/core-types/spec/document'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; import type { CollectionResourceDocument, ExistingResourceObject, + ResourceObject, SingleResourceDocument, SingleResourceRelationship, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; + +type IdentifierCache = Store['identifierCache']; +type InternalCapabilitiesManager = CacheCapabilitiesManager & { _store: Store }; function isImplicit(relationship: GraphEdge): relationship is ImplicitEdge { return relationship.definition.isImplicit; @@ -73,7 +70,7 @@ interface CachedResource { defaultAttrs: Record | null; inflightAttrs: Record | null; changes: Record | null; - errors: JsonApiError[] | null; + errors: ApiError[] | null; isNew: boolean; isDeleted: boolean; isDeletionCommitted: boolean; @@ -191,8 +188,8 @@ export default class JSONAPICache implements Cache { * @return {ResourceDocument} * @public */ - put(doc: StructuredDocument): SingleResourceDataDocument; - put(doc: StructuredDocument): CollectionResourceDataDocument; + put(doc: StructuredDataDocument): SingleResourceDataDocument; + put(doc: StructuredDataDocument): CollectionResourceDataDocument; put(doc: StructuredErrorDocument): ResourceErrorDocument; put(doc: StructuredDataDocument): ResourceMetaDocument; put(doc: StructuredDocument): ResourceDocument { @@ -422,11 +419,11 @@ export default class JSONAPICache implements Cache { * @method peek * @public * @param {StableRecordIdentifier | StableDocumentIdentifier} identifier - * @return {ResourceDocument | ResourceBlob | null} the known resource data + * @return {ResourceDocument | ResourceObject | null} the known resource data */ - peek(identifier: StableRecordIdentifier): ResourceBlob | null; + peek(identifier: StableRecordIdentifier): ResourceObject | null; peek(identifier: StableDocumentIdentifier): ResourceDocument | null; - peek(identifier: StableDocumentIdentifier | StableRecordIdentifier): ResourceBlob | ResourceDocument | null { + peek(identifier: StableDocumentIdentifier | StableRecordIdentifier): ResourceObject | ResourceDocument | null { if ('type' in identifier) { const peeked = this.__safePeek(identifier, false); @@ -435,8 +432,8 @@ export default class JSONAPICache implements Cache { } const { type, id, lid } = identifier; - const attributes = Object.assign({}, peeked.remoteAttrs, peeked.inflightAttrs, peeked.localAttrs); - const relationships: JsonApiResource['relationships'] = {}; + const attributes = Object.assign({}, peeked.remoteAttrs, peeked.inflightAttrs, peeked.localAttrs) as ObjectValue; + const relationships: ResourceObject['relationships'] = {}; const rels = this.__graph.identifiers.get(identifier); if (rels) { @@ -476,7 +473,7 @@ export default class JSONAPICache implements Cache { const document = this.peekRequest(identifier); if (document) { - if ('content' in document) return document.content; + if ('content' in document) return document.content!; } return null; } @@ -510,7 +507,7 @@ export default class JSONAPICache implements Cache { */ upsert( identifier: StableRecordIdentifier, - data: JsonApiResource, + data: ExistingResourceObject, calculateChanges?: boolean | undefined ): void | string[] { let changedKeys: string[] | undefined; @@ -886,7 +883,7 @@ export default class JSONAPICache implements Cache { } cached.isNew = false; - let newCanonicalAttributes: AttributesHash | undefined; + let newCanonicalAttributes: ExistingResourceObject['attributes']; if (data) { if (data.id && !cached.id) { cached.id = data.id; @@ -977,7 +974,7 @@ export default class JSONAPICache implements Cache { * @param identifier * @param errors */ - commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[] | undefined): void { + commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[] | undefined): void { const cached = this.__peek(identifier, false); if (cached.inflightAttrs) { const keys = Object.keys(cached.inflightAttrs); @@ -1106,7 +1103,7 @@ export default class JSONAPICache implements Cache { upgradeCapabilities(this._capabilities); const defaultValue = getDefaultValue(attrSchema, identifier, this._capabilities._store); - if (typeof attrSchema?.options?.defaultValue === 'function') { + if (schemaHasLegacyDefaultValueFn(attrSchema)) { cached.defaultAttrs = cached.defaultAttrs || (Object.create(null) as Record); cached.defaultAttrs[attr] = defaultValue; } @@ -1331,7 +1328,7 @@ export default class JSONAPICache implements Cache { * @param identifier * @return {JsonApiError[]} */ - getErrors(identifier: StableRecordIdentifier): JsonApiError[] { + getErrors(identifier: StableRecordIdentifier): ApiError[] { return this.__peek(identifier, true).errors || []; } @@ -1467,11 +1464,23 @@ function getRemoteState(rel: CollectionEdge | ResourceEdge) { return rel.remoteState; } +function schemaHasLegacyDefaultValueFn(schema: FieldSchema | undefined): boolean { + if (!schema || schema?.kind === '@id') return false; + return hasLegacyDefaultValueFn(schema.options); +} + +function hasLegacyDefaultValueFn(options: object | undefined): options is { defaultValue: () => Value } { + return !!options && typeof (options as { defaultValue: () => Value }).defaultValue === 'function'; +} + function getDefaultValue( schema: FieldSchema | undefined, identifier: StableRecordIdentifier, store: Store ): Value | undefined { + if (schema?.kind === '@id') { + return null; + } const options = schema?.options; if (!schema || (!options && !schema.type)) { @@ -1483,11 +1492,11 @@ function getDefaultValue( } // legacy support for defaultValues that are functions - if (typeof options?.defaultValue === 'function') { + if (hasLegacyDefaultValueFn(options)) { // 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() as Value; + return options.defaultValue(); // legacy support for defaultValues that are primitives } else if (options && 'defaultValue' in options) { const defaultValue = options.defaultValue; @@ -1530,7 +1539,7 @@ function notifyAttributes(storeWrapper: CacheCapabilitiesManager, identifier: St There seems to be a potential bug here, where we will return keys that are not in the schema */ -function calculateChangedKeys(cached: CachedResource, updates?: AttributesHash): string[] { +function calculateChangedKeys(cached: CachedResource, updates?: ExistingResourceObject['attributes']): string[] { const changedKeys: string[] = []; if (updates) { @@ -1624,13 +1633,13 @@ function setupRelationships( graph: Graph, storeWrapper: CacheCapabilitiesManager, identifier: StableRecordIdentifier, - data: JsonApiResource + data: ExistingResourceObject ) { // TODO @runspired iterating by definitions instead of by payload keys // allows relationship payloads to be ignored silently if no relationship // definition exists. Ensure there's a test for this and then consider // moving this to an assertion. This check should possibly live in the graph. - const relationships = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor(identifier); + const relationships = storeWrapper.schema.relationshipsDefinitionFor(identifier); const keys = Object.keys(relationships); for (let i = 0; i < keys.length; i++) { const relationshipName = keys[i]; diff --git a/packages/json-api/src/-private/serialize.ts b/packages/json-api/src/-private/serialize.ts index df166dcd53e..f489cfac55e 100644 --- a/packages/json-api/src/-private/serialize.ts +++ b/packages/json-api/src/-private/serialize.ts @@ -1,13 +1,12 @@ /** * @module @ember-data/json-api/request */ -import { assert } from '@ember/debug'; - -import type { AttributesHash, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; +import { assert } from '@warp-drive/build-config/macros'; 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 { ResourceObject } from '@warp-drive/core-types/spec/json-api-raw'; type ChangedRelationshipData = { data: Relationship['data']; @@ -32,12 +31,12 @@ export type JsonApiResourcePatch = { * @param {StableRecordIdentifier} identifier * @return {object} An object with a `data` property containing the serialized resource patch */ -export function serializeResources(cache: Cache, identifiers: StableRecordIdentifier): { data: JsonApiResource }; -export function serializeResources(cache: Cache, identifiers: StableRecordIdentifier[]): { data: JsonApiResource[] }; +export function serializeResources(cache: Cache, identifiers: StableRecordIdentifier): { data: ResourceObject }; +export function serializeResources(cache: Cache, identifiers: StableRecordIdentifier[]): { data: ResourceObject[] }; export function serializeResources( cache: Cache, identifiers: StableRecordIdentifier | StableRecordIdentifier[] -): { data: JsonApiResource | JsonApiResource[] } { +): { data: ResourceObject | ResourceObject[] } { return { data: Array.isArray(identifiers) ? identifiers.map((identifier) => _serializeResource(cache, identifier)) @@ -45,11 +44,11 @@ export function serializeResources( }; } -function _serializeResource(cache: Cache, identifier: StableRecordIdentifier): JsonApiResource { +function _serializeResource(cache: Cache, identifier: StableRecordIdentifier): ResourceObject { const { id, lid, type } = identifier; // yup! this method actually does nothing. It's just here for the dev assertion // and to assist in providing a little sugar to the consuming app via the `serializeResources` utility - const record = cache.peek(identifier) as JsonApiResource; + const record = cache.peek(identifier) as ResourceObject; assert( `A record with id ${String(id)} and type ${type} for lid ${lid} was not found not in the supplied Cache.`, record @@ -88,7 +87,7 @@ export function serializePatch( // options: { include?: string[] } = {} ): { data: JsonApiResourcePatch } { const { id, lid, type } = identifier; - const record = cache.peek(identifier) as JsonApiResource; + const record = cache.peek(identifier) as ResourceObject; assert( `A record with id ${String(id)} and type ${type} for lid ${lid} was not found not in the supplied Cache.`, record @@ -102,7 +101,7 @@ export function serializePatch( if (cache.hasChangedAttrs(identifier)) { const attrsChanges = cache.changedAttrs(identifier); - const attributes: AttributesHash = {}; + const attributes: ResourceObject['attributes'] = {}; Object.keys(attrsChanges).forEach((key) => { const change = attrsChanges[key]; diff --git a/packages/json-api/tsconfig.json b/packages/json-api/tsconfig.json index 5cc0154cb9a..d80220df145 100644 --- a/packages/json-api/tsconfig.json +++ b/packages/json-api/tsconfig.json @@ -1,50 +1,71 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], - "module": "esnext", - "target": "esnext", + "module": "ESNext", + "target": "ESNext", "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/graph": ["../graph/unstable-preview-types"], + "@ember-data/graph/*": ["../graph/unstable-preview-types/*"], + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../graph" }, - { "path": "../request" }, - { "path": "../request-utils" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../graph" + }, + { + "path": "../request" + }, + { + "path": "../request-utils" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/json-api/vite.config.mjs b/packages/json-api/vite.config.mjs new file mode 100644 index 00000000000..6e1e1158911 --- /dev/null +++ b/packages/json-api/vite.config.mjs @@ -0,0 +1,15 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + 'ember-inflector', // pluralize +]; + +export const entryPoints = ['./src/index.ts', './src/request.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/legacy-compat/.eslintrc.cjs b/packages/legacy-compat/.eslintrc.cjs deleted file mode 100644 index 9ab544c4853..00000000000 --- a/packages/legacy-compat/.eslintrc.cjs +++ /dev/null @@ -1,29 +0,0 @@ -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/string', '@ember/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [node.config(), node.defaults(), typescript.defaults()], -}; - -module.exports = config; diff --git a/packages/legacy-compat/addon-main.cjs b/packages/legacy-compat/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/legacy-compat/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/legacy-compat/addon-main.js b/packages/legacy-compat/addon-main.js deleted file mode 100644 index 16a41526809..00000000000 --- a/packages/legacy-compat/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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/legacy-compat/babel.config.js b/packages/legacy-compat/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/legacy-compat/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/legacy-compat/babel.config.mjs b/packages/legacy-compat/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/legacy-compat/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/legacy-compat/eslint.config.mjs b/packages/legacy-compat/eslint.config.mjs new file mode 100644 index 00000000000..492ff7c9722 --- /dev/null +++ b/packages/legacy-compat/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/debug', '@ember/string', '@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/legacy-compat/package.json b/packages/legacy-compat/package.json index 6174aa03048..ab22c71c0f8 100644 --- a/packages/legacy-compat/package.json +++ b/packages/legacy-compat/package.json @@ -12,7 +12,7 @@ "homepage": "https://github.com/emberjs/data", "bugs": "https://github.com/emberjs/data/issues", "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "keywords": [ "ember-addon" @@ -22,8 +22,8 @@ }, "files": [ "unstable-preview-types", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -32,35 +32,25 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, - "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", - "@embroider/macros": "^1.15.1", - "ember-cli-babel": "^8.2.0" - }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/request": { "injected": true }, @@ -87,17 +77,11 @@ }, "@ember-data/request-utils": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, - "peerDependencies": { - "@ember-data/graph": "workspace:5.4.0-alpha.64", - "@ember-data/json-api": "workspace:5.4.0-alpha.64", - "@ember-data/request": "workspace:5.4.0-alpha.64", - "@ember-data/store": "workspace:5.4.0-alpha.64", - "@ember/string": "^3.1.1", - "ember-inflector": "^4.0.2", - "@warp-drive/core-types": "workspace:0.0.0-alpha.50" - }, "peerDependenciesMeta": { "@ember-data/graph": { "optional": true @@ -109,36 +93,42 @@ "optional": true } }, + "dependencies": { + "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" + }, + "peerDependencies": { + "@ember-data/graph": "workspace:5.4.0-alpha.64", + "@ember-data/json-api": "workspace:5.4.0-alpha.64", + "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember/string": "^3.1.1", + "@ember/test-waiters": "^3.1.0", + "ember-inflector": "^4.0.2", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50" + }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@ember/test-waiters": "^3.1.0", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-inflector": "^4.0.2", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0" + "vite": "^5.2.11" }, "ember": { "edition": "octane" diff --git a/packages/legacy-compat/rollup.config.mjs b/packages/legacy-compat/rollup.config.mjs deleted file mode 100644 index bd09ae03ef6..00000000000 --- a/packages/legacy-compat/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external(['@ember/debug', '@ember/application', '@embroider/macros', '@ember-data/store/-private']), - - 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', 'builders.js', '-private.js', 'utils.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.js', '.ts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/legacy-compat/src/-private.ts b/packages/legacy-compat/src/-private.ts index f948215e7dc..015db6e1ba3 100644 --- a/packages/legacy-compat/src/-private.ts +++ b/packages/legacy-compat/src/-private.ts @@ -9,9 +9,9 @@ import type { CompatStore } from '.'; @module @ember-data/legacy-compat @main @ember-data/legacy-compat */ -export { default as SnapshotRecordArray } from './legacy-network-handler/snapshot-record-array'; +export { SnapshotRecordArray } from './legacy-network-handler/snapshot-record-array'; export { SaveOp } from './legacy-network-handler/fetch-manager'; -export { default as FetchManager } from './legacy-network-handler/fetch-manager'; -export { default as Snapshot } from './legacy-network-handler/snapshot'; +export { FetchManager } from './legacy-network-handler/fetch-manager'; +export { Snapshot } from './legacy-network-handler/snapshot'; export function upgradeStore(store: Store): asserts store is CompatStore {} diff --git a/packages/legacy-compat/src/builders/find-all.ts b/packages/legacy-compat/src/builders/find-all.ts index 9b08f5fca89..8cc9f46dd54 100644 --- a/packages/legacy-compat/src/builders/find-all.ts +++ b/packages/legacy-compat/src/builders/find-all.ts @@ -1,10 +1,9 @@ /** * @module @ember-data/legacy-compat/builders */ -import { assert } from '@ember/debug'; - import type { StoreRequestInput } from '@ember-data/store'; -import type { FindAllOptions } from '@ember-data/store/-types/q/store'; +import type { FindAllOptions } from '@ember-data/store/types'; +import { assert } from '@warp-drive/build-config/macros'; import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; import { SkipCache } from '@warp-drive/core-types/request'; import type { RequestSignature } from '@warp-drive/core-types/symbols'; @@ -59,6 +58,6 @@ export function findAllBuilder(type: string, options: FindAllBuilderOptions = {} type: normalizeModelName(type), options: options || {}, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }; } diff --git a/packages/legacy-compat/src/builders/find-record.ts b/packages/legacy-compat/src/builders/find-record.ts index 2328df21b87..3a93830822e 100644 --- a/packages/legacy-compat/src/builders/find-record.ts +++ b/packages/legacy-compat/src/builders/find-record.ts @@ -1,14 +1,13 @@ /** * @module @ember-data/legacy-compat/builders */ -import { assert } from '@ember/debug'; - import type { StoreRequestInput } from '@ember-data/store'; import { constructResource, ensureStringId } from '@ember-data/store/-private'; -import type { BaseFinderOptions, FindRecordOptions } from '@ember-data/store/-types/q/store'; +import type { BaseFinderOptions, FindRecordOptions } from '@ember-data/store/types'; +import { assert } from '@warp-drive/build-config/macros'; import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; import { SkipCache } from '@warp-drive/core-types/request'; -import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; +import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; import type { RequestSignature } from '@warp-drive/core-types/symbols'; import { isMaybeIdentifier, normalizeModelName } from './utils'; @@ -110,6 +109,6 @@ export function findRecordBuilder( record: resource, options, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }; } diff --git a/packages/legacy-compat/src/builders/query.ts b/packages/legacy-compat/src/builders/query.ts index 22fbb0c77fc..519cb3c41bd 100644 --- a/packages/legacy-compat/src/builders/query.ts +++ b/packages/legacy-compat/src/builders/query.ts @@ -1,10 +1,9 @@ /** * @module @ember-data/legacy-compat/builders */ -import { assert } from '@ember/debug'; - import type { StoreRequestInput } from '@ember-data/store'; -import type { QueryOptions } from '@ember-data/store/-types/q/store'; +import type { QueryOptions } from '@ember-data/store/types'; +import { assert } from '@warp-drive/build-config/macros'; import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; import { SkipCache } from '@warp-drive/core-types/request'; import type { RequestSignature } from '@warp-drive/core-types/symbols'; @@ -71,7 +70,7 @@ export function queryBuilder( query, options: options, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }; } @@ -133,6 +132,6 @@ export function queryRecordBuilder( query, options: options || {}, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }; } diff --git a/packages/legacy-compat/src/builders/save-record.ts b/packages/legacy-compat/src/builders/save-record.ts index 3a759037f23..3aaae565901 100644 --- a/packages/legacy-compat/src/builders/save-record.ts +++ b/packages/legacy-compat/src/builders/save-record.ts @@ -1,10 +1,9 @@ /** * @module @ember-data/legacy-compat/builders */ -import { assert } from '@ember/debug'; - import { recordIdentifierFor, storeFor, type StoreRequestInput } from '@ember-data/store'; -import type { InstanceCache } from '@ember-data/store/-private/caches/instance-cache'; +import type { InstanceCache } from '@ember-data/store/-private'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; @@ -90,6 +89,6 @@ export function saveRecordBuilder( record: identifier, }, records: [identifier], - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }; } diff --git a/packages/legacy-compat/src/builders/utils.ts b/packages/legacy-compat/src/builders/utils.ts index d3b87f027d2..29eaeed3504 100644 --- a/packages/legacy-compat/src/builders/utils.ts +++ b/packages/legacy-compat/src/builders/utils.ts @@ -2,7 +2,7 @@ import { deprecate } from '@ember/debug'; import { dasherize } from '@ember/string'; import { DEPRECATE_NON_STRICT_TYPES } from '@warp-drive/build-config/deprecations'; -import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; +import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; export function isMaybeIdentifier( maybeIdentifier: string | ResourceIdentifierObject diff --git a/packages/legacy-compat/src/index.ts b/packages/legacy-compat/src/index.ts index 8b3c9d2eaff..62a23740ef7 100644 --- a/packages/legacy-compat/src/index.ts +++ b/packages/legacy-compat/src/index.ts @@ -1,13 +1,13 @@ import { getOwner } from '@ember/application'; -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 { assert } from '@warp-drive/build-config/macros'; 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'; +import type { AdapterPayload, MinimumAdapterInterface } from './legacy-network-handler/minimum-adapter-interface'; import type { MinimumSerializerInterface, SerializerOptions, @@ -15,6 +15,8 @@ import type { export { LegacyNetworkHandler } from './legacy-network-handler/legacy-network-handler'; +export type { MinimumAdapterInterface, MinimumSerializerInterface, SerializerOptions, AdapterPayload }; + /** * @module @ember-data/store * @class Store 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 9f9be0dd442..1e30751209e 100644 --- a/packages/legacy-compat/src/legacy-network-handler/fetch-manager.ts +++ b/packages/legacy-compat/src/legacy-network-handler/fetch-manager.ts @@ -1,22 +1,25 @@ -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; -import { importSync } from '@embroider/macros'; +import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros'; -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 type { + FindRecordQuery, + InstanceCache, + Request, + RequestStateService, + SaveRecordMutation, +} from '@ember-data/store/-private'; import { coerceId } from '@ember-data/store/-private'; -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 { FindRecordOptions } from '@ember-data/store/-types/q/store'; +import type { FindRecordOptions, ModelSchema } from '@ember-data/store/types'; import { DEBUG, TESTING } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { TypeFromInstance } from '@warp-drive/core-types/record'; import type { ImmutableRequestInfo } from '@warp-drive/core-types/request'; -import type { CollectionResourceDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { CollectionResourceDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import { upgradeStore } from '../-private'; import { assertIdentifierHasId } from './identifier-has-id'; @@ -24,14 +27,15 @@ import { payloadIsNotBlank } from './legacy-data-utils'; import type { AdapterPayload, MinimumAdapterInterface } from './minimum-adapter-interface'; import type { MinimumSerializerInterface } from './minimum-serializer-interface'; import { normalizeResponseHelper } from './serializer-response'; -import Snapshot from './snapshot'; +import { Snapshot } from './snapshot'; +type Deferred = ReturnType>; type AdapterErrors = Error & { errors?: string[]; isAdapterError?: true }; type SerializerWithParseErrors = MinimumSerializerInterface & { extractErrors?(store: Store, modelClass: ModelSchema, error: AdapterErrors, recordId: string | null): unknown; }; -export const SaveOp: unique symbol = Symbol('SaveOp'); +export const SaveOp = getOrSetGlobal('SaveOp', Symbol('SaveOp')); export type FetchMutationOptions = FindRecordOptions & { [SaveOp]: 'createRecord' | 'deleteRecord' | 'updateRecord' }; @@ -54,7 +58,7 @@ interface PendingSaveItem { queryRequest: Request; } -export default class FetchManager { +export class FetchManager { declare isDestroyed: boolean; declare requestCache: RequestStateService; // fetches pending in the runloop, waiting to be coalesced @@ -169,7 +173,7 @@ export default class FetchManager { const cache = store.cache; if (!cache || cache.isEmpty(identifier) || isInitialLoad) { let isReleasable = true; - if (HAS_GRAPH_PACKAGE) { + if (macroCondition(dependencySatisfies('@ember-data/graph', '*'))) { if (!cache) { const graphFor = (importSync('@ember-data/graph/-private') as typeof import('@ember-data/graph/-private')) .graphFor; 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 0e4164be403..79b6c190038 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,5 +1,4 @@ -import { assert } from '@ember/debug'; - +import { assert } from '@warp-drive/build-config/macros'; import type { StableExistingRecordIdentifier } from '@warp-drive/core-types/identifier'; export function assertIdentifierHasId(identifier: unknown): asserts identifier is StableExistingRecordIdentifier { diff --git a/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.ts b/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.ts index 571a1cc6c12..ad43f4ff46c 100644 --- a/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.ts +++ b/packages/legacy-compat/src/legacy-network-handler/legacy-data-fetch.ts @@ -1,11 +1,10 @@ -import { assert } from '@ember/debug'; - import type Store from '@ember-data/store'; -import type { BaseFinderOptions } from '@ember-data/store/-types/q/store'; +import type { BaseFinderOptions } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { RelationshipSchema } from '@warp-drive/core-types/schema'; -import type { ExistingResourceObject, JsonApiDocument } from '@warp-drive/core-types/spec/raw'; +import type { LegacyRelationshipSchema as RelationshipSchema } from '@warp-drive/core-types/schema/fields'; +import type { ExistingResourceObject, JsonApiDocument } from '@warp-drive/core-types/spec/json-api-raw'; import { upgradeStore } from '../-private'; import { iterateData, payloadIsNotBlank } from './legacy-data-utils'; 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 c3cf4b2c720..2db5a0be8f3 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,37 +1,36 @@ -import { assert } from '@ember/debug'; - import { importSync } from '@embroider/macros'; import type { Future, Handler, NextFn, StructuredDataDocument } from '@ember-data/request'; import type Store from '@ember-data/store'; -import type { StoreRequestContext } from '@ember-data/store/-private/cache-handler'; -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 { JsonApiError } from '@ember-data/store/-types/q/record-data-json-api'; +import type { StoreRequestContext } from '@ember-data/store'; +import type { CollectionRecordArray } from '@ember-data/store/-private'; +import type { ModelSchema } from '@ember-data/store/types'; import { LOG_PAYLOADS } from '@warp-drive/build-config/debugging'; import { DEBUG, TESTING } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { ImmutableRequestInfo } from '@warp-drive/core-types/request'; -import type { RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { LegacyRelationshipSchema as RelationshipSchema } from '@warp-drive/core-types/schema/fields'; import type { SingleResourceDataDocument } from '@warp-drive/core-types/spec/document'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; import type { CollectionResourceDocument, JsonApiDocument, Links, PaginationLinks, SingleResourceDocument, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; import { upgradeStore } from '../-private'; -import FetchManager, { SaveOp } from './fetch-manager'; +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'; +import type { Snapshot } from './snapshot'; +import { SnapshotRecordArray } from './snapshot-record-array'; type AdapterErrors = Error & { errors?: unknown[]; isAdapterError?: true; code?: string }; type SerializerWithParseErrors = MinimumSerializerInterface & { @@ -229,7 +228,7 @@ function saveRecord(context: StoreRequestContext): Promise { function adapterDidInvalidate( store: Store, identifier: StableRecordIdentifier, - error: Error & { errors?: JsonApiError[]; isAdapterError?: true; code?: string } + error: Error & { errors?: ApiError[]; isAdapterError?: true; code?: string } ) { upgradeStore(store); if (error && error.isAdapterError === true && error.code === 'InvalidError') { @@ -257,7 +256,7 @@ function adapterDidInvalidate( typeof cache.getErrors === 'function' ); - let jsonApiErrors: JsonApiError[] = error.errors; + let jsonApiErrors: ApiError[] = error.errors; if (jsonApiErrors.length === 0) { jsonApiErrors = [{ title: 'Invalid Error', detail: '', source: { pointer: '/data' } }]; } @@ -272,8 +271,8 @@ function makeArray(value: T | T[]): T[] { } const PRIMARY_ATTRIBUTE_KEY = 'base'; -function errorsHashToArray(errors: Record): JsonApiError[] { - const out: JsonApiError[] = []; +function errorsHashToArray(errors: Record): ApiError[] { + const out: ApiError[] = []; if (errors) { Object.keys(errors).forEach((key) => { @@ -464,13 +463,13 @@ function query(context: StoreRequestContext): Promise { const { store, data } = context.request; upgradeStore(store); let { options } = data as { - options: { _recordArray?: Collection; adapterOptions?: Record }; + options: { _recordArray?: CollectionRecordArray; adapterOptions?: Record }; }; // eslint-disable-next-line @typescript-eslint/no-shadow const { type, query } = data as { type: string; query: Record; - options: { _recordArray?: Collection; adapterOptions?: Record }; + options: { _recordArray?: CollectionRecordArray; adapterOptions?: Record }; }; const adapter = store.adapterFor(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 790f0ba833d..478d0e36dab 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 @@ -2,12 +2,12 @@ * @module @ember-data/experimental-preview-types */ 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 '@warp-drive/core-types/schema'; +import type { CollectionRecordArray } from '@ember-data/store/-private'; +import type { ModelSchema } from '@ember-data/store/types'; +import type { LegacyRelationshipSchema as RelationshipSchema } from '@warp-drive/core-types/schema/fields'; -import type Snapshot from './snapshot'; -import type SnapshotRecordArray from './snapshot-record-array'; +import type { Snapshot } from './snapshot'; +import type { SnapshotRecordArray } from './snapshot-record-array'; type Group = Snapshot[]; // TODO this should probably just alias unknown @@ -129,7 +129,7 @@ export interface MinimumAdapterInterface { * @param {ModelSchema} schema An object with methods for accessing information about * the type, attributes and relationships of the primary type associated with the request. * @param {object} query - * @param {Collection} recordArray + * @param {CollectionRecordArray} recordArray * @param {object} options * @return {Promise} a promise resolving with resource data to feed to the associated serializer */ @@ -137,7 +137,7 @@ export interface MinimumAdapterInterface { store: Store, schema: ModelSchema, query: Record, - recordArray: Collection, + recordArray: CollectionRecordArray, options: { adapterOptions?: unknown } ): Promise; @@ -514,7 +514,7 @@ export interface MinimumAdapterInterface { * The default behavior if this method is not implemented and the option is not specified is to * not reload, the same as a return of `false`. * - * Note: the Promise returned by `store.findAll` resolves to the same RecordArray instance + * Note: the Promise returned by `store.findAll` resolves to the same LiveArray instance * returned by `store.peekAll` for that type, and will include all records in the store for * the given type, including any previously existing records not returned by the reload request. * 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 fbe63b4c032..c0d0f1db0f5 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 @@ -2,12 +2,12 @@ @module @ember-data/experimental-preview-types */ import type Store from '@ember-data/store'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { ModelSchema } from '@ember-data/store/types'; import type { ObjectValue } from '@warp-drive/core-types/json/raw'; -import type { JsonApiDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { JsonApiDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import type { AdapterPayload } from './minimum-adapter-interface'; -import type Snapshot from './snapshot'; +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 6f847d46cff..921e6fe18ea 100644 --- a/packages/legacy-compat/src/legacy-network-handler/serializer-response.ts +++ b/packages/legacy-compat/src/legacy-network-handler/serializer-response.ts @@ -1,9 +1,8 @@ -import { assert } from '@ember/debug'; - import type Store from '@ember-data/store'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { ModelSchema } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; -import type { JsonApiDocument } from '@warp-drive/core-types/spec/raw'; +import { assert } from '@warp-drive/build-config/macros'; +import type { JsonApiDocument } from '@warp-drive/core-types/spec/json-api-raw'; import type { AdapterPayload } from './minimum-adapter-interface'; import type { MinimumSerializerInterface, RequestType } from './minimum-serializer-interface'; 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 0e83e61b6dc..1121ec58fc8 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 @@ -2,14 +2,13 @@ @module @ember-data/legacy-compat */ import type Store from '@ember-data/store'; +import type { LiveArray } from '@ember-data/store/-private'; 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 { FindAllOptions } from '@ember-data/store/-types/q/store'; +import type { FindAllOptions, ModelSchema } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import { upgradeStore } from '../-private'; -import type Snapshot from './snapshot'; +import type { Snapshot } from './snapshot'; /** SnapshotRecordArray is not directly instantiable. Instances are provided to consuming application's @@ -18,7 +17,7 @@ import type Snapshot from './snapshot'; @class SnapshotRecordArray @public */ -export default class SnapshotRecordArray { +export class SnapshotRecordArray { declare _snapshots: Snapshot[] | null; declare _type: ModelSchema | null; declare modelName: string; @@ -112,7 +111,7 @@ export default class SnapshotRecordArray { @private @type {Array} */ - get _recordArray(): IdentifierArray { + get _recordArray(): LiveArray { return this.__store.peekAll(this.modelName); } diff --git a/packages/legacy-compat/src/legacy-network-handler/snapshot.ts b/packages/legacy-compat/src/legacy-network-handler/snapshot.ts index 70e257f85ab..4bfb0561cc4 100644 --- a/packages/legacy-compat/src/legacy-network-handler/snapshot.ts +++ b/packages/legacy-compat/src/legacy-network-handler/snapshot.ts @@ -1,22 +1,19 @@ /** @module @ember-data/store */ -import { assert } from '@ember/debug'; +import { dependencySatisfies, importSync } from '@embroider/macros'; -import { importSync } from '@embroider/macros'; - -import type { CollectionEdge } from '@ember-data/graph/-private/edges/collection'; -import type { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; -import { HAS_JSON_API_PACKAGE } from '@ember-data/packages'; +import type { CollectionEdge, ResourceEdge } from '@ember-data/graph/-private'; import type Store from '@ember-data/store'; -import type { FindRecordOptions } from '@ember-data/store/-types/q/store'; +import type { FindRecordOptions } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; 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 { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; -import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { LegacyAttributeField, LegacyRelationshipSchema } from '@warp-drive/core-types/schema/fields'; import { upgradeStore } from '../-private'; import type { SerializerOptions } from './minimum-serializer-interface'; @@ -34,7 +31,7 @@ type RecordId = string | null; @class Snapshot @public */ -export default class Snapshot { +export class Snapshot { declare __attributes: Record | null; declare _belongsToRelationships: Record; declare _belongsToIds: Record; @@ -316,14 +313,10 @@ export default class Snapshot { relationshipMeta && relationshipMeta.kind === 'belongsTo' ); - // TODO @runspired it seems this code branch would not work with CUSTOM_MODEL_CLASSes - // this check is not a regression in behavior because relationships don't currently - // function without access to intimate API contracts between RecordData and Model. - // This is a requirement we should fix as soon as the relationship layer does not require - // this intimate API usage. - if (!HAS_JSON_API_PACKAGE) { - assert(`snapshot.belongsTo only supported when using the package @ember-data/json-api`); - } + assert( + `snapshot.belongsTo only supported when using the package @ember-data/graph`, + dependencySatisfies('@ember-data/graph', '*') + ); const graphFor = (importSync('@ember-data/graph/-private') as typeof import('@ember-data/graph/-private')).graphFor; const { identifier } = this; @@ -432,9 +425,10 @@ export default class Snapshot { // function without access to intimate API contracts between RecordData and Model. // This is a requirement we should fix as soon as the relationship layer does not require // this intimate API usage. - if (!HAS_JSON_API_PACKAGE) { - assert(`snapshot.hasMany only supported when using the package @ember-data/json-api`); - } + assert( + `snapshot.hasMany only supported when using the package @ember-data/graph`, + dependencySatisfies('@ember-data/graph', '*') + ); const graphFor = (importSync('@ember-data/graph/-private') as typeof import('@ember-data/graph/-private')).graphFor; const { identifier } = this; @@ -500,7 +494,7 @@ export default class Snapshot { @param {Object} [binding] the value to which the callback's `this` should be bound @public */ - eachAttribute(callback: (key: string, meta: AttributeSchema) => void, binding?: unknown): void { + eachAttribute(callback: (key: string, meta: LegacyAttributeField) => void, binding?: unknown): void { const attrDefs = this._store.getSchemaDefinitionService().attributesDefinitionFor(this.identifier); Object.keys(attrDefs).forEach((key) => { callback.call(binding, key, attrDefs[key]); @@ -524,7 +518,7 @@ export default class Snapshot { @param {Object} [binding] the value to which the callback's `this` should be bound @public */ - eachRelationship(callback: (key: string, meta: RelationshipSchema) => void, binding?: unknown): void { + eachRelationship(callback: (key: string, meta: LegacyRelationshipSchema) => void, binding?: unknown): void { 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/src/utils.ts b/packages/legacy-compat/src/utils.ts index 552002ca035..9b88d62b0b3 100644 --- a/packages/legacy-compat/src/utils.ts +++ b/packages/legacy-compat/src/utils.ts @@ -10,7 +10,7 @@ import { dasherize } from '@ember/string'; import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros'; -import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; interface AssertFunc { (desc: string, condition: unknown): asserts condition; @@ -33,11 +33,7 @@ const AssertFn: AssertFunc = ((message: string, condition: unknown) => { if (!condition) { _AssertFn(message, condition); } - if (DEBUG) { - if (!condition) { - throw new Error(`Assertion Failed: ${message}`); - } - } + assert(message, condition); }) as unknown as AssertFunc; let NormalizedType: Normalizer = (str: string) => { return singularize(dasherize(str)); diff --git a/packages/legacy-compat/tsconfig.json b/packages/legacy-compat/tsconfig.json index 6624c3749d5..d3c967cca6f 100644 --- a/packages/legacy-compat/tsconfig.json +++ b/packages/legacy-compat/tsconfig.json @@ -1,51 +1,76 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], - "module": "esnext", - "target": "esnext", + "module": "ESNext", + "target": "ESNext", "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "noImplicitOverride": false, + "emitDeclarationOnly": true, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/graph": ["../graph/unstable-preview-types"], + "@ember-data/graph/*": ["../graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../json-api/unstable-preview-types/*"], + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../graph" }, - { "path": "../json-api" }, - { "path": "../request" }, - { "path": "../request-utils" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../graph" + }, + { + "path": "../json-api" + }, + { + "path": "../request" + }, + { + "path": "../request-utils" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/legacy-compat/vite.config.mjs b/packages/legacy-compat/vite.config.mjs new file mode 100644 index 00000000000..ed147cf333a --- /dev/null +++ b/packages/legacy-compat/vite.config.mjs @@ -0,0 +1,12 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = ['@ember/debug', '@ember/application']; +export const entryPoints = ['src/index.ts', 'src/builders.ts', 'src/-private.ts', 'src/utils.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/model/.eslintrc.cjs b/packages/model/.eslintrc.cjs deleted file mode 100644 index 1f6adc8c87b..00000000000 --- a/packages/model/.eslintrc.cjs +++ /dev/null @@ -1,39 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/model/.npmignore b/packages/model/.npmignore deleted file mode 100644 index e4bce62a5ec..00000000000 --- a/packages/model/.npmignore +++ /dev/null @@ -1,40 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# ember-data -/node-tests - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json \ No newline at end of file diff --git a/packages/model/addon-main.cjs b/packages/model/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/model/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/model/addon-main.js b/packages/model/addon-main.js deleted file mode 100644 index 16a41526809..00000000000 --- a/packages/model/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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/model/babel.config.js b/packages/model/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/model/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/model/babel.config.mjs b/packages/model/babel.config.mjs new file mode 100644 index 00000000000..c23b859273f --- /dev/null +++ b/packages/model/babel.config.mjs @@ -0,0 +1,12 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ['module:decorator-transforms', { runtime: { import: 'decorator-transforms/runtime' } }], + ], +}; diff --git a/packages/model/blueprints/model-test/index.js b/packages/model/blueprints/model-test/index.js index b01f451f624..8d9e28311b1 100644 --- a/packages/model/blueprints/model-test/index.js +++ b/packages/model/blueprints/model-test/index.js @@ -1,17 +1,17 @@ const path = require('path'); const testInfo = require('ember-cli-test-info'); -const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); -const modulePrefixForProject = require('@ember-data/private-build-infra/src/utilities/module-prefix-for-project'); +const { dasherize } = require('ember-cli-string-utils'); const ModelBlueprint = require('../model'); -module.exports = useTestFrameworkDetector({ - description: 'Generates a model unit test.', +module.exports = { + description: 'Generates an EmberData Model unit test', + supportsAddon() { return false; }, root: __dirname, - fileMapTokens(options) { + fileMapTokens() { return { __root__() { return 'tests'; @@ -24,10 +24,16 @@ module.exports = useTestFrameworkDetector({ locals(options) { const result = ModelBlueprint.locals.apply(this, arguments); + const modulePrefix = dasherize(options.project.config().modulePrefix); + return { + ...result, + friendlyTestDescription: testInfo.description(options.entity.name, 'Unit', 'Model'), + modulePrefix, + }; + }, - result.friendlyTestDescription = testInfo.description(options.entity.name, 'Unit', 'Model'); - result.modulePrefix = modulePrefixForProject(options.project); + filesPath() { + return path.join(__dirname, 'qunit-files') + } +}; - return result; - }, -}); diff --git a/packages/model/blueprints/model-test/qunit-files/__root__/__path__/__test__.js b/packages/model/blueprints/model-test/qunit-files/__root__/__path__/__test__.js index 96563d14adc..7d59a55a990 100644 --- a/packages/model/blueprints/model-test/qunit-files/__root__/__path__/__test__.js +++ b/packages/model/blueprints/model-test/qunit-files/__root__/__path__/__test__.js @@ -1,14 +1,13 @@ -import { module, test } from 'qunit'; - import { setupTest } from '<%= modulePrefix %>/tests/helpers'; +import { module, test } from 'qunit'; module('<%= friendlyTestDescription %>', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let model = store.createRecord('<%= dasherizedModuleName %>', {}); - assert.ok(model); + const store = this.owner.lookup('service:store'); + const model = store.createRecord('<%= dasherizedModuleName %>', {}); + assert.ok(model, 'model exists'); }); }); diff --git a/packages/model/blueprints/model/index.js b/packages/model/blueprints/model/index.js index 6fe5aba15f2..aa9330f50ad 100644 --- a/packages/model/blueprints/model/index.js +++ b/packages/model/blueprints/model/index.js @@ -1,17 +1,28 @@ +const path = require('path'); const EOL = require('os').EOL; +const { has } = require('@ember/edition-utils'); + const inflection = require('inflection'); const stringUtils = require('ember-cli-string-utils'); -const useEditionDetector = require('@ember-data/private-build-infra/src/utilities/edition-detector'); -const { has } = require('@ember/edition-utils'); -module.exports = useEditionDetector({ - description: 'Generates an ember-data model.', +module.exports = { + description: 'Generates an ember-data Model.', anonymousOptions: ['name', 'attr:type'], root: __dirname, + filesPath() { + let hasOctane = has('octane'); + if (hasOctane && process.env.EMBER_EDITION === 'classic') { + hasOctane = false; //forcible override + } + let rootPath = hasOctane ? 'native-files' : 'files'; + return path.join(__dirname, rootPath); + }, + + locals(options) { let attrs = []; let needs = []; @@ -109,7 +120,7 @@ module.exports = useEditionDetector({ needs, }; }, -}); +} function nativeAttr(attr) { let name = attr.name, @@ -148,3 +159,5 @@ function classicAttr(attr) { } return propertyName + ': ' + result; } + + diff --git a/packages/model/eslint.config.mjs b/packages/model/eslint.config.mjs new file mode 100644 index 00000000000..d226a345f2e --- /dev/null +++ b/packages/model/eslint.config.mjs @@ -0,0 +1,34 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + 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', + ], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/model/package.json b/packages/model/package.json index d0156bb796d..8883bb3a3d9 100644 --- a/packages/model/package.json +++ b/packages/model/package.json @@ -14,24 +14,21 @@ "author": "", "directories": {}, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "move-dts": "bun ../../scripts/copy-declarations.mjs src", - "build:types": "tsc --build && bun run move-dts", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, "files": [ "unstable-preview-types", "blueprints", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -40,15 +37,14 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "peerDependencies": { - "@ember-data/debug": "workspace:5.4.0-alpha.64", "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", @@ -64,15 +60,9 @@ }, "@ember-data/graph": { "optional": true - }, - "@ember-data/debug": { - "optional": true } }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/store": { "injected": true }, @@ -88,9 +78,6 @@ "@ember-data/legacy-compat": { "injected": true }, - "@ember-data/debug": { - "injected": true - }, "@warp-drive/core-types": { "injected": true }, @@ -105,29 +92,25 @@ }, "@ember-data/request-utils": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.15.1", - "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", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", - "@ember-data/debug": "workspace:5.4.0-alpha.64", "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", @@ -135,24 +118,21 @@ "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@ember/test-waiters": "^3.1.0", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "decorator-transforms": "^1.1.0", "ember-inflector": "^4.0.2", "ember-source": "~5.7.0", "expect-type": "^0.19.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0" + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/model/rollup.config.mjs b/packages/model/rollup.config.mjs deleted file mode 100644 index 6885a9426da..00000000000 --- a/packages/model/rollup.config.mjs +++ /dev/null @@ -1,50 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external([ - '@embroider/macros', - '@ember/service', - '@ember/debug', - '@ember/object/computed', - '@ember-data/store/-private', - '@ember/object/internals', - '@ember-data/tracking/-private', - '@ember/object/promise-proxy-mixin', - '@ember/object/proxy', - '@ember/array', - '@ember/array/proxy', - '@ember/object', - '@ember/object/mixin', - '@ember/application', - '@ember/polyfills', - 'expect-type', - ]), - - 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', '-private.js', 'hooks.js', 'migration-support.js']), - - nodeResolve({ extensions: ['.ts', '.js'] }), - babel({ - extensions: ['.ts', '.js'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/model/src/-private.ts b/packages/model/src/-private.ts index ae3d3aabb05..92b7d2d2c7e 100644 --- a/packages/model/src/-private.ts +++ b/packages/model/src/-private.ts @@ -2,11 +2,12 @@ export { attr } from './-private/attr'; export { belongsTo } from './-private/belongs-to'; export { hasMany } from './-private/has-many'; export { Model } from './-private/model'; -export { default as Errors } from './-private/errors'; +export type { ModelStore } from './-private/model'; +export { Errors } from './-private/errors'; -export { default as ManyArray } from './-private/many-array'; +export { RelatedCollection as ManyArray } from './-private/many-array'; export { PromiseBelongsTo } from './-private/promise-belongs-to'; -export { default as PromiseManyArray } from './-private/promise-many-array'; +export { PromiseManyArray } from './-private/promise-many-array'; // // Used by tests, migration support export { lookupLegacySupport, LEGACY_SUPPORT } from './-private/legacy-relationships-support'; diff --git a/packages/model/src/-private/attr.ts b/packages/model/src/-private/attr.ts index 8d1cb960302..b84f11ed1ae 100644 --- a/packages/model/src/-private/attr.ts +++ b/packages/model/src/-private/attr.ts @@ -1,12 +1,12 @@ /** @module @ember-data/model */ -import { assert } from '@ember/debug'; import { computed } from '@ember/object'; import { recordIdentifierFor } from '@ember-data/store'; import { peekCache } from '@ember-data/store/-private'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { ArrayValue, ObjectValue, PrimitiveValue, Value } from '@warp-drive/core-types/json/raw'; import type { TransformName } from '@warp-drive/core-types/symbols'; @@ -104,6 +104,7 @@ function _attr(type?: string | AttrOptions, options?: AttrOptions & object) { if (!this.isValid) { const { errors } = this; + if (errors.get(key)) { errors.remove(key); this.currentState.cleanErrorRequests(); diff --git a/packages/model/src/-private/belongs-to.ts b/packages/model/src/-private/belongs-to.ts index 16cc7dc6695..8f3f387cd21 100644 --- a/packages/model/src/-private/belongs-to.ts +++ b/packages/model/src/-private/belongs-to.ts @@ -1,7 +1,8 @@ -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; import { computed } from '@ember/object'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { TypeFromInstance } from '@warp-drive/core-types/record'; import { RecordStore } from '@warp-drive/core-types/symbols'; @@ -47,11 +48,9 @@ function _belongsTo( const meta = { type: normalizeModelName(type), - isRelationship: true, options: options, kind: 'belongsTo', name: '', - key: null, }; return computed({ diff --git a/packages/model/src/-private/debug/assert-polymorphic-type.ts b/packages/model/src/-private/debug/assert-polymorphic-type.ts index 700e8e2f00f..bacca558743 100644 --- a/packages/model/src/-private/debug/assert-polymorphic-type.ts +++ b/packages/model/src/-private/debug/assert-polymorphic-type.ts @@ -1,8 +1,8 @@ -import { assert } from '@ember/debug'; +import type { UpgradedMeta } from '@ember-data/graph/-private'; +import type Store from '@ember-data/store'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; 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 @@ -24,6 +24,7 @@ let assertPolymorphicType: ( ) => void; if (DEBUG) { + // eslint-disable-next-line @typescript-eslint/no-shadow assertPolymorphicType = function assertPolymorphicType( parentIdentifier: StableRecordIdentifier, parentDefinition: UpgradedMeta, @@ -34,7 +35,7 @@ if (DEBUG) { return; } if (parentDefinition.isPolymorphic) { - let meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[ + const meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[ parentDefinition.inverseKey ]; assert( diff --git a/packages/model/src/-private/errors.ts b/packages/model/src/-private/errors.ts index b43767bb468..9086605c00a 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 */ -class Errors extends ArrayProxyWithCustomOverrides { +export class Errors extends ArrayProxyWithCustomOverrides { declare __record: { currentState: RecordState }; /** @property errorsByAttributeName @@ -399,9 +399,6 @@ class Errors extends ArrayProxyWithCustomOverrides { Checks if there are error messages for the given attribute. ```app/controllers/user/edit.js - import Controller from '@ember/controller'; - import { action } from '@ember/object'; - export default class UserEditController extends Controller { @action save(user) { @@ -422,5 +419,3 @@ class Errors extends ArrayProxyWithCustomOverrides { return this.errorsFor(attribute).length > 0; } } - -export default Errors; diff --git a/packages/model/src/-private/has-many.ts b/packages/model/src/-private/has-many.ts index 4c5dd783e5e..367cb6a95da 100644 --- a/packages/model/src/-private/has-many.ts +++ b/packages/model/src/-private/has-many.ts @@ -1,7 +1,7 @@ /** @module @ember-data/model */ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import { computed } from '@ember/object'; import { dasherize } from '@ember/string'; @@ -9,6 +9,7 @@ import { singularize } from 'ember-inflector'; import { DEPRECATE_NON_STRICT_TYPES } from '@warp-drive/build-config/deprecations'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { TypeFromInstance } from '@warp-drive/core-types/record'; import { RecordStore } from '@warp-drive/core-types/symbols'; @@ -54,10 +55,8 @@ function _hasMany( const meta = { type: normalizeType(type), options, - isRelationship: true, kind: 'hasMany', name: '', - key: null, }; return computed({ diff --git a/packages/model/src/-private/hooks.ts b/packages/model/src/-private/hooks.ts index 4a538c0d142..20c068a7716 100644 --- a/packages/model/src/-private/hooks.ts +++ b/packages/model/src/-private/hooks.ts @@ -1,7 +1,7 @@ import { getOwner, setOwner } from '@ember/application'; -import { assert } from '@ember/debug'; import { setCacheFor, setRecordIdentifier, type Store, StoreMap } from '@ember-data/store/-private'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { TypeFromInstance, TypeFromInstanceOrString } from '@warp-drive/core-types/record'; diff --git a/packages/model/src/-private/legacy-relationships-support.ts b/packages/model/src/-private/legacy-relationships-support.ts index b280f940eee..f26420b1a9d 100644 --- a/packages/model/src/-private/legacy-relationships-support.ts +++ b/packages/model/src/-private/legacy-relationships-support.ts @@ -1,14 +1,9 @@ -import { assert } from '@ember/debug'; +import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros'; -import { importSync } from '@embroider/macros'; - -import type { UpgradedMeta } from '@ember-data/graph/-private/-edge-definition'; -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'; +import type { CollectionEdge, Graph, GraphEdge, ResourceEdge, UpgradedMeta } from '@ember-data/graph/-private'; import { upgradeStore } from '@ember-data/legacy-compat/-private'; -import { HAS_JSON_API_PACKAGE } from '@ember-data/packages'; import type Store from '@ember-data/store'; +import type { LiveArray } from '@ember-data/store/-private'; import { fastPush, isStableIdentifier, @@ -17,29 +12,36 @@ import { SOURCE, storeFor, } from '@ember-data/store/-private'; -import type { Cache } from '@ember-data/store/-types/q/cache'; -import type { JsonApiRelationship } from '@ember-data/store/-types/q/record-data-json-api'; -import type { OpaqueRecordInstance } from '@ember-data/store/-types/q/record-instance'; -import type { BaseFinderOptions } from '@ember-data/store/-types/q/store'; +import type { BaseFinderOptions } from '@ember-data/store/types'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; +import type { Cache } from '@warp-drive/core-types/cache'; 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 type { ManyArray } from '../-private'; -import RelatedCollection from './many-array'; +import type { OpaqueRecordInstance, TypeFromInstanceOrString } from '@warp-drive/core-types/record'; +import type { + CollectionResourceRelationship, + InnerRelationshipDocument, + SingleResourceRelationship, +} from '@warp-drive/core-types/spec/json-api-raw'; + +import { RelatedCollection as ManyArray } from './many-array'; import type { MinimalLegacyRecord } from './model-methods'; import type { BelongsToProxyCreateArgs, BelongsToProxyMeta } from './promise-belongs-to'; import { PromiseBelongsTo } from './promise-belongs-to'; import type { HasManyProxyCreateArgs } from './promise-many-array'; -import PromiseManyArray from './promise-many-array'; +import { PromiseManyArray } from './promise-many-array'; import BelongsToReference from './references/belongs-to'; import HasManyReference from './references/has-many'; type PromiseBelongsToFactory = { create(args: BelongsToProxyCreateArgs): PromiseBelongsTo }; -export const LEGACY_SUPPORT: Map = new Map(); +export const LEGACY_SUPPORT = getOrSetGlobal( + 'LEGACY_SUPPORT', + new Map() +); export function lookupLegacySupport(record: MinimalLegacyRecord): LegacySupport { const identifier = recordIdentifierFor(record); @@ -63,8 +65,8 @@ export class LegacySupport { declare cache: Cache; declare references: Record; declare identifier: StableRecordIdentifier; - declare _manyArrayCache: Record; - declare _relationshipPromisesCache: Record>; + declare _manyArrayCache: Record; + declare _relationshipPromisesCache: Record>; declare _relationshipProxyCache: Record; declare _pending: Record | undefined>; @@ -77,24 +79,21 @@ export class LegacySupport { this.identifier = recordIdentifierFor(record); this.cache = peekCache(record); - if (HAS_JSON_API_PACKAGE) { + if (macroCondition(dependencySatisfies('@ember-data/graph', '*'))) { const graphFor = (importSync('@ember-data/graph/-private') as typeof import('@ember-data/graph/-private')) .graphFor; this.graph = graphFor(this.store); } - this._manyArrayCache = Object.create(null) as Record; - this._relationshipPromisesCache = Object.create(null) as Record< - string, - Promise - >; + this._manyArrayCache = Object.create(null) as Record; + this._relationshipPromisesCache = Object.create(null) as Record>; this._relationshipProxyCache = Object.create(null) as Record; this._pending = Object.create(null) as Record>; this.references = Object.create(null) as Record; } - _syncArray(array: RelatedCollection) { + _syncArray(array: LiveArray) { // It’s possible the parent side of the relationship may have been destroyed by this point if (this.isDestroyed || this.isDestroying) { return; @@ -102,7 +101,7 @@ export class LegacySupport { const currentState = array[SOURCE]; const identifier = this.identifier; - const [identifiers, jsonApi] = this._getCurrentState(identifier, array.key); + const [identifiers, jsonApi] = this._getCurrentState(identifier, (array as ManyArray).key); if (jsonApi.meta) { array.meta = jsonApi.meta; @@ -215,16 +214,16 @@ export class LegacySupport { ); } - _getCurrentState( + _getCurrentState( identifier: StableRecordIdentifier, field: string - ): [StableRecordIdentifier[], CollectionRelationship] { + ): [StableRecordIdentifier>[], CollectionRelationship] { const jsonApi = this.cache.getRelationship(identifier, field) as CollectionRelationship; const cache = this.store._instanceCache; - const identifiers: StableRecordIdentifier[] = []; + const identifiers: StableRecordIdentifier>[] = []; if (jsonApi.data) { for (let i = 0; i < jsonApi.data.length; i++) { - const relatedIdentifier: StableRecordIdentifier = jsonApi.data[i]; + const relatedIdentifier = jsonApi.data[i] as StableRecordIdentifier>; assert(`Expected a stable identifier`, isStableIdentifier(relatedIdentifier)); if (cache.recordIsLoaded(relatedIdentifier, true)) { identifiers.push(relatedIdentifier); @@ -235,19 +234,19 @@ export class LegacySupport { return [identifiers, jsonApi]; } - getManyArray(key: string, definition?: UpgradedMeta): RelatedCollection { - if (HAS_JSON_API_PACKAGE) { - let manyArray: RelatedCollection | undefined = this._manyArrayCache[key] as RelatedCollection | undefined; + getManyArray(key: string, definition?: UpgradedMeta): ManyArray { + if (macroCondition(dependencySatisfies('@ember-data/graph', '*'))) { + let manyArray: ManyArray | undefined = this._manyArrayCache[key] as ManyArray | undefined; if (!definition) { definition = this.graph.get(this.identifier, key).definition; } if (!manyArray) { - const [identifiers, doc] = this._getCurrentState(this.identifier, key); + const [identifiers, doc] = this._getCurrentState(this.identifier, key); - manyArray = new RelatedCollection({ + manyArray = new ManyArray({ store: this.store, - type: definition.type, + type: definition.type as TypeFromInstanceOrString, identifier: this.identifier, cache: this.cache, identifiers, @@ -272,11 +271,11 @@ export class LegacySupport { fetchAsyncHasMany( key: string, relationship: CollectionEdge, - manyArray: RelatedCollection, + manyArray: ManyArray, options?: BaseFinderOptions - ): Promise { - if (HAS_JSON_API_PACKAGE) { - let loadingPromise = this._relationshipPromisesCache[key] as Promise | undefined; + ): Promise { + if (macroCondition(dependencySatisfies('@ember-data/graph', '*'))) { + let loadingPromise = this._relationshipPromisesCache[key] as Promise | undefined; if (loadingPromise) { return loadingPromise; } @@ -300,7 +299,7 @@ export class LegacySupport { } reloadHasMany(key: string, options?: BaseFinderOptions): Promise> | PromiseManyArray { - if (HAS_JSON_API_PACKAGE) { + if (macroCondition(dependencySatisfies('@ember-data/graph', '*'))) { const loadingPromise = this._relationshipPromisesCache[key]; if (loadingPromise) { return loadingPromise as Promise>; @@ -322,8 +321,8 @@ export class LegacySupport { assert(`hasMany only works with the @ember-data/json-api package`); } - getHasMany(key: string, options?: BaseFinderOptions): PromiseManyArray | RelatedCollection { - if (HAS_JSON_API_PACKAGE) { + getHasMany(key: string, options?: BaseFinderOptions): PromiseManyArray | ManyArray { + if (macroCondition(dependencySatisfies('@ember-data/graph', '*'))) { const relationship = this.graph.get(this.identifier, key) as CollectionEdge; const { definition, state } = relationship; const manyArray = this.getManyArray(key, definition); @@ -395,7 +394,7 @@ export class LegacySupport { let reference = this.references[name]; if (!reference) { - if (!HAS_JSON_API_PACKAGE) { + if (macroCondition(!dependencySatisfies('@ember-data/graph', '*'))) { // TODO @runspired while this feels odd, it is not a regression in capability because we do // not today support references pulling from RecordDatas other than our own // because of the intimate API access involved. This is something we will need to redesign. @@ -435,7 +434,7 @@ export class LegacySupport { relationship: CollectionEdge, options: BaseFinderOptions = {} ): Promise | void { - if (HAS_JSON_API_PACKAGE) { + if (macroCondition(dependencySatisfies('@ember-data/graph', '*'))) { if (!resource) { return; } @@ -609,7 +608,7 @@ export class LegacySupport { this.isDestroying = true; let cache: Record = this._manyArrayCache; - this._manyArrayCache = Object.create(null) as Record; + this._manyArrayCache = Object.create(null) as Record; Object.keys(cache).forEach((key) => { cache[key]!.destroy(); }); @@ -642,8 +641,8 @@ function handleCompletedRelationshipRequest( recordExt: LegacySupport, key: string, relationship: CollectionEdge, - value: RelatedCollection -): RelatedCollection; + value: ManyArray +): ManyArray; function handleCompletedRelationshipRequest( recordExt: LegacySupport, key: string, @@ -655,16 +654,16 @@ function handleCompletedRelationshipRequest( recordExt: LegacySupport, key: string, relationship: CollectionEdge, - value: RelatedCollection, + value: ManyArray, error: Error ): never; function handleCompletedRelationshipRequest( recordExt: LegacySupport, key: string, relationship: ResourceEdge | CollectionEdge, - value: RelatedCollection | StableRecordIdentifier | null, + value: ManyArray | StableRecordIdentifier | null, error?: Error -): RelatedCollection | OpaqueRecordInstance | null { +): ManyArray | OpaqueRecordInstance | null { delete recordExt._relationshipPromisesCache[key]; relationship.state.shouldForceReload = false; const isHasMany = relationship.definition.kind === 'hasMany'; @@ -672,7 +671,7 @@ function handleCompletedRelationshipRequest( if (isHasMany) { // we don't notify the record property here to avoid refetch // only the many array - (value as RelatedCollection).notify(); + (value as ManyArray).notify(); } if (error) { @@ -697,7 +696,7 @@ function handleCompletedRelationshipRequest( } if (isHasMany) { - (value as RelatedCollection).isLoaded = true; + (value as ManyArray).isLoaded = true; } else { recordExt.store.notifications._flush(); } @@ -736,7 +735,7 @@ function anyUnloaded(store: Store, relationship: CollectionEdge) { return unloaded || false; } -export function areAllInverseRecordsLoaded(store: Store, resource: JsonApiRelationship): boolean { +export function areAllInverseRecordsLoaded(store: Store, resource: InnerRelationshipDocument): boolean { const instanceCache = store._instanceCache; const identifiers = resource.data; diff --git a/packages/model/src/-private/many-array.ts b/packages/model/src/-private/many-array.ts index 47fbc1b7b0d..b040f754c46 100644 --- a/packages/model/src/-private/many-array.ts +++ b/packages/model/src/-private/many-array.ts @@ -1,37 +1,41 @@ /** @module @ember-data/store */ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import type Store from '@ember-data/store'; -import type { NativeProxy } from '@ember-data/store/-private'; +import type { CreateRecordProperties, NativeProxy } from '@ember-data/store/-private'; import { ARRAY_SIGNAL, isStableIdentifier, + LiveArray, MUTATE, notifyArray, - RecordArray, recordIdentifierFor, SOURCE, } from '@ember-data/store/-private'; -import type { IdentifierArrayCreateOptions } from '@ember-data/store/-private/record-arrays/identifier-array'; -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 { OpaqueRecordInstance } from '@ember-data/store/-types/q/record-instance'; -import type { BaseFinderOptions } from '@ember-data/store/-types/q/store'; +import type { BaseFinderOptions, ModelSchema } from '@ember-data/store/types'; import type { Signal } from '@ember-data/tracking/-private'; import { addToTransaction } from '@ember-data/tracking/-private'; import { DEPRECATE_MANY_ARRAY_DUPLICATES } from '@warp-drive/build-config/deprecations'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; -import type { Links, PaginationLinks } from '@warp-drive/core-types/spec/raw'; +import type { Cache } from '@warp-drive/core-types/cache'; +import type { + OpaqueRecordInstance, + TypedRecordInstance, + TypeFromInstance, + TypeFromInstanceOrString, +} from '@warp-drive/core-types/record'; +import type { Links, PaginationLinks } from '@warp-drive/core-types/spec/json-api-raw'; import type { LegacySupport } from './legacy-relationships-support'; -export interface ManyArrayCreateArgs { - identifiers: StableRecordIdentifier[]; - type: string; +type IdentifierArrayCreateOptions = ConstructorParameters[0]; + +export interface ManyArrayCreateArgs { + identifiers: StableRecordIdentifier>[]; + type: TypeFromInstanceOrString; store: Store; allowMutation: boolean; manager: LegacySupport; @@ -89,7 +93,7 @@ export interface ManyArrayCreateArgs { @class ManyArray @public */ -export default class RelatedCollection extends RecordArray { +export class RelatedCollection extends LiveArray { declare isAsync: boolean; /** The loading state of this array @@ -154,14 +158,13 @@ export default class RelatedCollection extends RecordArray { declare links: Links | PaginationLinks | null; declare identifier: StableRecordIdentifier; declare cache: Cache; - // @ts-expect-error declare _manager: LegacySupport; declare store: Store; declare key: string; declare type: ModelSchema; declare modelName: T extends TypedRecordInstance ? TypeFromInstance : string; - constructor(options: ManyArrayCreateArgs) { + constructor(options: ManyArrayCreateArgs) { super(options as unknown as IdentifierArrayCreateOptions); this.isLoaded = options.isLoaded || false; this.isAsync = options.isAsync || false; @@ -383,7 +386,6 @@ export default class RelatedCollection extends RecordArray { notify() { const signal = this[ARRAY_SIGNAL]; signal.shouldReset = true; - // @ts-expect-error notifyArray(this); } diff --git a/packages/model/src/-private/model-methods.ts b/packages/model/src/-private/model-methods.ts index 067a44e6349..6b18c60de7e 100644 --- a/packages/model/src/-private/model-methods.ts +++ b/packages/model/src/-private/model-methods.ts @@ -1,5 +1,3 @@ -import { assert } from '@ember/debug'; - import { importSync } from '@embroider/macros'; import type { Snapshot } from '@ember-data/legacy-compat/-private'; @@ -7,10 +5,11 @@ import { upgradeStore } from '@ember-data/legacy-compat/-private'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; import { peekCache } from '@ember-data/store/-private'; +import { assert } from '@warp-drive/build-config/macros'; import type { ChangedAttributesHash } from '@warp-drive/core-types/cache'; import { RecordStore } from '@warp-drive/core-types/symbols'; -import type Errors from './errors'; +import type { Errors } from './errors'; import { lookupLegacySupport } from './legacy-relationships-support'; import type RecordState from './record-state'; import type BelongsToReference from './references/belongs-to'; diff --git a/packages/model/src/-private/model.ts b/packages/model/src/-private/model.ts index f056f531e28..9303fd2511f 100644 --- a/packages/model/src/-private/model.ts +++ b/packages/model/src/-private/model.ts @@ -2,7 +2,6 @@ @module @ember-data/model */ -import { assert } from '@ember/debug'; import EmberObject from '@ember/object'; import type Store from '@ember-data/store'; @@ -12,12 +11,13 @@ import { coerceId } from '@ember-data/store/-private'; import { compat } from '@ember-data/tracking'; import { defineSignal } from '@ember-data/tracking/-private'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Cache } from '@warp-drive/core-types/cache'; -import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { LegacyAttributeField, LegacyRelationshipSchema } from '@warp-drive/core-types/schema/fields'; import { RecordStore } from '@warp-drive/core-types/symbols'; -import Errors from './errors'; +import { Errors } from './errors'; import { LEGACY_SUPPORT } from './legacy-relationships-support'; import type { MinimalLegacyRecord } from './model-methods'; import { @@ -1039,14 +1039,14 @@ class Model extends EmberObject implements MinimalLegacyRecord { callback: ( this: NoInfer | undefined, key: Exclude, - meta: RelationshipSchema + meta: LegacyRelationshipSchema ) => void, binding?: T ): void { (this.constructor as typeof Model).eachRelationship(callback, binding); } - relationshipFor(name: string): RelationshipSchema | undefined { + relationshipFor(name: string): LegacyRelationshipSchema | undefined { return (this.constructor as typeof Model).relationshipsByName.get(name); } @@ -1058,7 +1058,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { callback: ( this: NoInfer | undefined, key: Exclude, - meta: AttributeSchema + meta: LegacyAttributeField ) => void, binding?: T ): void { @@ -1161,12 +1161,12 @@ class Model extends EmberObject implements MinimalLegacyRecord { } @computeOnce - static get inverseMap(): Record { + static get inverseMap(): Record { assert( `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName ); - return Object.create(null) as Record; + return Object.create(null) as Record; } /** @@ -1202,7 +1202,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { @param {Store} store @return {Object} the inverse relationship, or null */ - static inverseFor(name: string, store: Store): RelationshipSchema | null { + static inverseFor(name: string, store: Store): LegacyRelationshipSchema | null { assert( `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName @@ -1218,7 +1218,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { } //Calculate the inverse, ignoring the cache - static _findInverseFor(name: string, store: Store): RelationshipSchema | null { + static _findInverseFor(name: string, store: Store): LegacyRelationshipSchema | null { assert( `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName @@ -1302,13 +1302,13 @@ class Model extends EmberObject implements MinimalLegacyRecord { */ @computeOnce - static get relationships(): Map { + static get relationships(): Map { assert( `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName ); - const map = new Map(); + const map = new Map(); const relationshipsByName = this.relationshipsByName; // Loop through each computed property on the class @@ -1476,7 +1476,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { @readOnly */ @computeOnce - static get relationshipsByName(): Map { + static get relationshipsByName(): Map { assert( `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName @@ -1496,13 +1496,13 @@ class Model extends EmberObject implements MinimalLegacyRecord { } @computeOnce - static get relationshipsObject(): Record { + static get relationshipsObject(): Record { assert( `Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName ); - const relationships = Object.create(null) as Record; + const relationships = Object.create(null) as Record; const modelName = this.modelName; this.eachComputedProperty((name: string, meta: unknown) => { if (!isRelationshipSchema(meta)) { @@ -1511,7 +1511,6 @@ class Model extends EmberObject implements MinimalLegacyRecord { // TODO deprecate key being here (meta as unknown as { key: string }).key = name; meta.name = name; - (meta as unknown as { parentModelName: string }).parentModelName = modelName; relationships[name] = meta; assert(`Expected options in meta`, meta.options && typeof meta.options === 'object'); @@ -1598,7 +1597,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { callback: ( this: T | undefined, key: Exclude, - relationship: RelationshipSchema + relationship: LegacyRelationshipSchema ) => void, binding?: T ): void { @@ -1645,7 +1644,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { * @deprecated */ static determineRelationshipType( - knownSide: RelationshipSchema, + knownSide: LegacyRelationshipSchema, store: Store ): 'oneToOne' | 'oneToMany' | 'manyToOne' | 'manyToMany' | 'oneToNone' | 'manyToNone' { assert( @@ -1784,7 +1783,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { const map = new Map(); - this.eachAttribute((name: string, meta: AttributeSchema) => { + this.eachAttribute((name: string, meta: LegacyAttributeField) => { if (meta.type) { map.set(name, meta.type); } @@ -1841,7 +1840,7 @@ class Model extends EmberObject implements MinimalLegacyRecord { callback: ( this: T | undefined, key: Exclude, - attribute: AttributeSchema + attribute: LegacyAttributeField ) => void, binding?: T ): void { @@ -1850,9 +1849,11 @@ class Model extends EmberObject implements MinimalLegacyRecord { this.modelName ); - this.attributes.forEach((meta: AttributeSchema, name: Exclude) => { - callback.call(binding, name, meta); - }); + this.attributes.forEach( + (meta: LegacyAttributeField, name: Exclude) => { + callback.call(binding, name, meta); + } + ); } /** @@ -2006,11 +2007,11 @@ if (DEBUG) { export { Model }; -function isRelationshipSchema(meta: unknown): meta is RelationshipSchema { +function isRelationshipSchema(meta: unknown): meta is LegacyRelationshipSchema { const hasKind = typeof meta === 'object' && meta !== null && 'kind' in meta && 'options' in meta; return hasKind && (meta.kind === 'hasMany' || meta.kind === 'belongsTo'); } -function isAttributeSchema(meta: unknown): meta is AttributeSchema { +function isAttributeSchema(meta: unknown): meta is LegacyAttributeField { return typeof meta === 'object' && meta !== null && 'kind' in meta && meta.kind === 'attribute'; } diff --git a/packages/model/src/-private/model.type-test.ts b/packages/model/src/-private/model.type-test.ts index b4c96b260dc..7897d01ea0a 100644 --- a/packages/model/src/-private/model.type-test.ts +++ b/packages/model/src/-private/model.type-test.ts @@ -5,10 +5,10 @@ import { ResourceType } from '@warp-drive/core-types/symbols'; import { attr } from './attr'; import { belongsTo } from './belongs-to'; import { hasMany } from './has-many'; -import type ManyArray from './many-array'; +import type { RelatedCollection as ManyArray } from './many-array'; import { Model } from './model'; import type { PromiseBelongsTo } from './promise-belongs-to'; -import type PromiseManyArray from './promise-many-array'; +import type { PromiseManyArray } from './promise-many-array'; import type BelongsToReference from './references/belongs-to'; import type HasManyReference from './references/has-many'; diff --git a/packages/model/src/-private/notify-changes.ts b/packages/model/src/-private/notify-changes.ts index 221b083f963..c97c80b4644 100644 --- a/packages/model/src/-private/notify-changes.ts +++ b/packages/model/src/-private/notify-changes.ts @@ -1,10 +1,10 @@ -import { assert } from '@ember/debug'; import { cacheFor } from '@ember/object/internals'; import type Store from '@ember-data/store'; -import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; +import type { NotificationType } from '@ember-data/store'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { LegacyRelationshipSchema as RelationshipSchema } from '@warp-drive/core-types/schema/fields'; import { LEGACY_SUPPORT } from './legacy-relationships-support'; import type { Model } from './model'; diff --git a/packages/model/src/-private/promise-belongs-to.ts b/packages/model/src/-private/promise-belongs-to.ts index 8d42c57abd2..1abca141273 100644 --- a/packages/model/src/-private/promise-belongs-to.ts +++ b/packages/model/src/-private/promise-belongs-to.ts @@ -1,12 +1,11 @@ -import { assert } from '@ember/debug'; import { computed } from '@ember/object'; import type PromiseProxyMixin from '@ember/object/promise-proxy-mixin'; import type ObjectProxy from '@ember/object/proxy'; import type Store from '@ember-data/store'; -import type { OpaqueRecordInstance } from '@ember-data/store/-types/q/record-instance'; import { cached } from '@ember-data/tracking'; -import type { TypeFromInstanceOrString } from '@warp-drive/core-types/record'; +import { assert } from '@warp-drive/build-config/macros'; +import type { OpaqueRecordInstance, TypeFromInstanceOrString } from '@warp-drive/core-types/record'; import type { LegacySupport } from './legacy-relationships-support'; import { PromiseObject } from './promise-proxy-base'; @@ -29,7 +28,7 @@ interface PromiseObjectType extends PromiseProxyMixin, ObjectProxy< // eslint-disable-next-line @typescript-eslint/no-misused-new new (...args: unknown[]): PromiseObjectType; } -// eslint-disable-next-line @typescript-eslint/no-unused-vars +// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-extraneous-class declare class PromiseObjectType {} const Extended: PromiseObjectType = diff --git a/packages/model/src/-private/promise-many-array.ts b/packages/model/src/-private/promise-many-array.ts index 1e183f5e8b5..e153ed5c824 100644 --- a/packages/model/src/-private/promise-many-array.ts +++ b/packages/model/src/-private/promise-many-array.ts @@ -1,11 +1,10 @@ -import { assert } from '@ember/debug'; - -import type { BaseFinderOptions } from '@ember-data/store/-types/q/store'; +import type { BaseFinderOptions } from '@ember-data/store/types'; import { compat } from '@ember-data/tracking'; import { defineSignal } from '@ember-data/tracking/-private'; import { DEPRECATE_COMPUTED_CHAINS } from '@warp-drive/build-config/deprecations'; +import { assert } from '@warp-drive/build-config/macros'; -import type ManyArray from './many-array'; +import type { RelatedCollection as ManyArray } from './many-array'; import { LegacyPromiseProxy } from './promise-belongs-to'; export interface HasManyProxyCreateArgs { @@ -32,7 +31,7 @@ export interface HasManyProxyCreateArgs { @class PromiseManyArray @public */ -export default class PromiseManyArray { +export class PromiseManyArray { declare promise: Promise> | null; declare isDestroyed: boolean; declare content: ManyArray | null; diff --git a/packages/model/src/-private/record-state.ts b/packages/model/src/-private/record-state.ts index 741c1489037..1bd944d1a01 100644 --- a/packages/model/src/-private/record-state.ts +++ b/packages/model/src/-private/record-state.ts @@ -1,17 +1,15 @@ -import { assert } from '@ember/debug'; - import type Store from '@ember-data/store'; +import type { NotificationType } from '@ember-data/store'; import { storeFor } from '@ember-data/store'; +import type { RequestState, RequestStateService } from '@ember-data/store/-private'; import { recordIdentifierFor } from '@ember-data/store/-private'; -import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; -import type RequestStateService from '@ember-data/store/-private/network/request-cache'; -import type { RequestState } from '@ember-data/store/-private/network/request-cache'; -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 { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { Cache } from '@warp-drive/core-types/cache'; -import type Errors from './errors'; +import type { Errors } from './errors'; import type { MinimalLegacyRecord } from './model-methods'; const SOURCE_POINTER_REGEXP = /^\/?data\/(attributes|relationships)\/(.*)/; diff --git a/packages/model/src/-private/references/belongs-to.ts b/packages/model/src/-private/references/belongs-to.ts index 8c9432b033f..62e5525fe6b 100644 --- a/packages/model/src/-private/references/belongs-to.ts +++ b/packages/model/src/-private/references/belongs-to.ts @@ -1,7 +1,6 @@ -import type { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; -import type { Graph } from '@ember-data/graph/-private/graph'; +import type { Graph, ResourceEdge } from '@ember-data/graph/-private'; import type Store from '@ember-data/store'; -import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; +import type { NotificationType } from '@ember-data/store'; import { cached, compat } from '@ember-data/tracking'; import { defineSignal } from '@ember-data/tracking/-private'; import { DEBUG } from '@warp-drive/build-config/env'; @@ -14,7 +13,7 @@ import type { Meta, SingleResourceDocument, SingleResourceRelationship, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; import type { IsUnknown } from '../belongs-to'; import { assertPolymorphicType } from '../debug/assert-polymorphic-type'; diff --git a/packages/model/src/-private/references/has-many.ts b/packages/model/src/-private/references/has-many.ts index b9700306322..e511d2f6a92 100644 --- a/packages/model/src/-private/references/has-many.ts +++ b/packages/model/src/-private/references/has-many.ts @@ -1,13 +1,11 @@ -import { assert } from '@ember/debug'; - -import type { CollectionEdge } from '@ember-data/graph/-private/edges/collection'; -import type { Graph } from '@ember-data/graph/-private/graph'; +import type { CollectionEdge, Graph } from '@ember-data/graph/-private'; import type Store from '@ember-data/store'; -import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; -import type { BaseFinderOptions } from '@ember-data/store/-types/q/store'; +import type { NotificationType } from '@ember-data/store'; +import type { BaseFinderOptions } from '@ember-data/store/types'; import { cached, compat } from '@ember-data/tracking'; import { defineSignal } from '@ember-data/tracking/-private'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { CollectionRelationship } from '@warp-drive/core-types/cache/relationship'; import type { TypeFromInstanceOrString } from '@warp-drive/core-types/record'; @@ -18,13 +16,13 @@ import type { LinkObject, Meta, PaginationLinks, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; import type { IsUnknown } from '../belongs-to'; import { assertPolymorphicType } from '../debug/assert-polymorphic-type'; import type { LegacySupport } from '../legacy-relationships-support'; import { areAllInverseRecordsLoaded, LEGACY_SUPPORT } from '../legacy-relationships-support'; -import type ManyArray from '../many-array'; +import type { RelatedCollection as ManyArray } from '../many-array'; /** @module @ember-data/model diff --git a/packages/model/src/-private/schema-provider.ts b/packages/model/src/-private/schema-provider.ts index 58bedd139c4..f192a7bd143 100644 --- a/packages/model/src/-private/schema-provider.ts +++ b/packages/model/src/-private/schema-provider.ts @@ -1,30 +1,33 @@ import { getOwner } from '@ember/application'; import type Store from '@ember-data/store'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { SchemaService } from '@ember-data/store/types'; import type { RecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { LegacyFieldSchema } from '@warp-drive/core-types/schema/fields'; import type { FactoryCache, Model, ModelFactory, ModelStore } from './model'; import _modelForMixin from './model-for-mixin'; import { normalizeModelName } from './util'; +type AttributesSchema = ReturnType; +type RelationshipsSchema = ReturnType; + export class ModelSchemaProvider { declare store: ModelStore; declare _relationshipsDefCache: Record; declare _attributesDefCache: Record; - declare _fieldsDefCache: Record>; + declare _fieldsDefCache: Record>; constructor(store: ModelStore) { this.store = store; this._relationshipsDefCache = Object.create(null) as Record; this._attributesDefCache = Object.create(null) as Record; - this._fieldsDefCache = Object.create(null) as Record>; + this._fieldsDefCache = Object.create(null) as Record>; } - fields(identifier: RecordIdentifier | { type: string }): Map { + fields(identifier: RecordIdentifier | { type: string }): Map { const { type } = identifier; - let fieldDefs: Map | undefined = this._fieldsDefCache[type]; + let fieldDefs: Map | undefined = this._fieldsDefCache[type]; if (fieldDefs === undefined) { fieldDefs = new Map(); diff --git a/packages/model/src/index.ts b/packages/model/src/index.ts index 6a97a98722b..c91bbdc8df7 100644 --- a/packages/model/src/index.ts +++ b/packages/model/src/index.ts @@ -40,7 +40,7 @@ export { Model as default, attr, belongsTo, hasMany } from './-private'; export type { PromiseBelongsTo as AsyncBelongsTo } from './-private/promise-belongs-to'; -export type { default as AsyncHasMany } from './-private/promise-many-array'; -export type { default as ManyArray } from './-private/many-array'; +export type { PromiseManyArray as AsyncHasMany } from './-private/promise-many-array'; +export type { RelatedCollection as ManyArray } from './-private/many-array'; export { instantiateRecord, teardownRecord, modelFor } from './-private/hooks'; export { ModelSchemaProvider } from './-private/schema-provider'; diff --git a/packages/model/src/migration-support.ts b/packages/model/src/migration-support.ts index 01ef20f3903..f396be00f0c 100644 --- a/packages/model/src/migration-support.ts +++ b/packages/model/src/migration-support.ts @@ -1,7 +1,7 @@ -import { assert } from '@ember/debug'; - import { recordIdentifierFor } from '@ember-data/store'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import { Errors } from './-private'; import type { MinimalLegacyRecord } from './-private/model-methods'; @@ -53,7 +53,7 @@ const LegacyFields = [ 'unloadRecord', ]; -const LegacySupport = new WeakMap>(); +const LegacySupport = getOrSetGlobal('LegacySupport', new WeakMap>()); function legacySupport(record: MinimalLegacyRecord, options: Record | null, prop: string): unknown { let state = LegacySupport.get(record); @@ -135,7 +135,6 @@ export function withFields(fields: FieldSchema[]) { fields.push({ name: 'id', kind: '@id', - type: null, }); fields.push({ name: 'isReloading', diff --git a/packages/model/tsconfig.json b/packages/model/tsconfig.json index 7ca61fcc56e..e5ec4f5ba4c 100644 --- a/packages/model/tsconfig.json +++ b/packages/model/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,6 +7,7 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, @@ -15,40 +15,67 @@ "forceConsistentCasingInFileNames": true, "experimentalDecorators": true, "allowJs": false, - "noEmit": false, + "emitDeclarationOnly": true, "noImplicitAny": false, - "noImplicitOverride": true, - - // Enable faster builds - // but causes us to not rebuild properly + "noImplicitOverride": false, "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/graph": ["../graph/unstable-preview-types"], + "@ember-data/graph/*": ["../graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../legacy-compat/unstable-preview-types/*"], + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../graph" }, - { "path": "../json-api" }, - { "path": "../legacy-compat" }, - { "path": "../request" }, - { "path": "../request-utils" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../graph" + }, + { + "path": "../json-api" + }, + { + "path": "../legacy-compat" + }, + { + "path": "../request" + }, + { + "path": "../request-utils" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/model/vite.config.mjs b/packages/model/vite.config.mjs new file mode 100644 index 00000000000..0bd74020510 --- /dev/null +++ b/packages/model/vite.config.mjs @@ -0,0 +1,25 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/service', + '@ember/debug', + '@ember/object/computed', + '@ember/object/internals', + '@ember/object/promise-proxy-mixin', + '@ember/object/proxy', + '@ember/array', + '@ember/array/proxy', + '@ember/object', + '@ember/object/mixin', + '@ember/application', + '@ember/polyfills', +]; +export const entryPoints = ['src/index.ts', 'src/-private.ts', 'src/hooks.ts', 'src/migration-support.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/private-build-infra/.npmignore b/packages/private-build-infra/.npmignore deleted file mode 100644 index ee47bc4193c..00000000000 --- a/packages/private-build-infra/.npmignore +++ /dev/null @@ -1,19 +0,0 @@ -# compiled output -/dist/ -/tmp/ -/types/ - -# misc -/.bowerrc -/.editorconfig -/.env* -/.gitignore -/.watchmanconfig -/CONTRIBUTING.md -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-data -/node-tests \ No newline at end of file diff --git a/packages/private-build-infra/CHANGELOG.md b/packages/private-build-infra/CHANGELOG.md deleted file mode 100644 index 15b74aa1d6f..00000000000 --- a/packages/private-build-infra/CHANGELOG.md +++ /dev/null @@ -1,30 +0,0 @@ -# @ember-data/private-build-infra Changelog - -For the full project changelog see [https://github.com/emberjs/data/blob/main/CHANGELOG.md](https://github.com/emberjs/data/blob/main/CHANGELOG.md) - -## v5.3.1 (2024-02-24) - -#### :evergreen_tree: New Deprecation - -* [#9189](https://github.com/emberjs/data/pull/9189) fix: mutating ManyArray should handle duplicates gracefully (with deprecation) ([@gitKrystan](https://github.com/gitKrystan)) - -#### :rocket: Enhancement - -* [#9220](https://github.com/emberjs/data/pull/9220) feat: request infra improvements ([@runspired](https://github.com/runspired)) - -#### :bug: Bug Fix - -* [#9189](https://github.com/emberjs/data/pull/9189) fix: mutating ManyArray should handle duplicates gracefully (with deprecation) ([@gitKrystan](https://github.com/gitKrystan)) - -#### :house: Internal - -* [#9057](https://github.com/emberjs/data/pull/9057) Add eslint-plugin-n to eslint config for node files ([@gitKrystan](https://github.com/gitKrystan)) -* [#9051](https://github.com/emberjs/data/pull/9051) chore: use references for tsc, add checks to schema-record, bun to run scripts ([@runspired](https://github.com/runspired)) -* [#9032](https://github.com/emberjs/data/pull/9032) chore(types): split out lint and type commands to be per-package ([@runspired](https://github.com/runspired)) -* [#8931](https://github.com/emberjs/data/pull/8931) chore: package infra for schema-record ([@runspired](https://github.com/runspired)) - -#### Committers: (2) - -Krystan HuffMenne ([@gitKrystan](https://github.com/gitKrystan)) -Chris Thoburn ([@runspired](https://github.com/runspired)) - diff --git a/packages/private-build-infra/README.md b/packages/private-build-infra/README.md deleted file mode 100644 index acb84c1d340..00000000000 --- a/packages/private-build-infra/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# @ember-data/private-build-infra - -!! This is an internal package for use by `@ember-data` only. !! - -This package provides utilities for configuring addon-build setup -for `@ember-data/` packages. It is directly depended upon by those -packages and should not be installed for use in an app directly. - -## License - -This project is licensed under the [MIT License](LICENSE.md). diff --git a/packages/private-build-infra/ember-data-logo-dark.svg b/packages/private-build-infra/ember-data-logo-dark.svg deleted file mode 100644 index 737a4aa4321..00000000000 --- a/packages/private-build-infra/ember-data-logo-dark.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/packages/private-build-infra/ember-data-logo-light.svg b/packages/private-build-infra/ember-data-logo-light.svg deleted file mode 100644 index 58ac3d4e544..00000000000 --- a/packages/private-build-infra/ember-data-logo-light.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/packages/private-build-infra/src/addon-build-config-for-data-package.js b/packages/private-build-infra/src/addon-build-config-for-data-package.js deleted file mode 100644 index 273ea6774b4..00000000000 --- a/packages/private-build-infra/src/addon-build-config-for-data-package.js +++ /dev/null @@ -1,178 +0,0 @@ -const calculateCacheKeyForTree = require('calculate-cache-key-for-tree'); -const BroccoliDebug = require('broccoli-debug'); - -const detectModule = require('./utilities/detect-module'); - -function addonBuildConfigForDataPackage(pkg) { - return { - name: pkg.name, - - init() { - this._super.init && this._super.init.apply(this, arguments); - // console.log( - // 'init: ' + - // this.name + - // ' for ' + - // (typeof this.parent.name === 'function' ? this.parent.name() : this.parent.name) - // ); - this.debugTree = BroccoliDebug.buildDebugCallback(`ember-data:${pkg.name}`); - this.options = this.options || {}; - Object.assign(this.options, { - '@embroider/macros': { - setOwnConfig: {}, - }, - 'ember-cli-babel': { - enableTypeScriptTransform: true, - }, - autoImport: { - exclude: [ - '@ember/string', - 'ember-inflector', - '@ember-data/store', - '@ember-data/adapter', - '@ember-data/serializer', - '@ember-data/request', - '@ember-data/model', - '@ember-data/json-api', - '@ember-data/debug', - '@ember-data/tracking', - '@glimmer/tracking', - ], - }, - }); - }, - - isDevelopingAddon() { - if (typeof this.parent.name === 'string' && this.parent.name === 'ember-data') { - return this.parent.isDevelopingAddon(); - } - return this._super(...arguments); - }, - - shouldIncludeChildAddon(addon) { - if (addon.name.startsWith('@ember-data/')) { - if (this.name === 'ember-data' || addon.name === '@ember-data/tracking') { - return true; - } - - return false; - } - return true; - }, - - buildBabelOptions() { - let babelOptions = this.options.babel || {}; - let existingPlugins = babelOptions.plugins || []; - let config = this.getEmberDataConfig(); - - let customPlugins = require('./stripped-build-plugins')(config); - let plugins = existingPlugins.map((plugin) => { - return Array.isArray(plugin) ? plugin : [plugin]; - }); - plugins = plugins.concat(customPlugins.plugins); - - return { - loose: true, - plugins, - postTransformPlugins: customPlugins.postTransformPlugins, - exclude: ['transform-block-scoping', 'transform-typeof-symbol'], - }; - }, - - _setupBabelOptions() { - if (this._hasSetupBabelOptions) { - return; - } - - this.options.babel = this.buildBabelOptions(); - - this._hasSetupBabelOptions = true; - }, - - included() { - this._super.included.apply(this, arguments); - - const host = this._findHost(); - const name = this.name; - const options = host.options['@embroider/macros']?.setConfig?.[name]; - - if (options) { - Object.assign(this.options['@embroider/macros'].setOwnConfig, options); - } - - this._setupBabelOptions(); - }, - - cacheKeyForTree(treeType) { - return calculateCacheKeyForTree(treeType, this); - }, - - _emberDataConfig: null, - getEmberDataConfig() { - if (this._emberDataConfig) { - return this._emberDataConfig; - } - const app = this._findHost(); - const isProd = /production/.test(process.env.EMBER_ENV); - - let options = (app.options = app.options || {}); - options.emberData = options.emberData || {}; - options.emberData.debug = options.emberData.debug || {}; - options.emberData.polyfillUUID = options.emberData.polyfillUUID ?? false; - const hostOptions = 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, - }, - options.emberData.debug - ); - options.emberData.debug = debugOptions; - - const HAS_DEBUG_PACKAGE = detectModule(require, '@ember-data/debug', __dirname, pkg); - const HAS_META_PACKAGE = detectModule(require, 'ember-data', __dirname, pkg); - - options.emberData.includeDataAdapterInProduction = - typeof options.emberData.includeDataAdapterInProduction === 'boolean' - ? options.emberData.includeDataAdapterInProduction - : HAS_META_PACKAGE; - - const includeDataAdapter = HAS_DEBUG_PACKAGE - ? isProd - ? options.emberData.includeDataAdapterInProduction - : true - : false; - options.emberData.includeDataAdapter = includeDataAdapter; - - const DEPRECATIONS = require('./deprecations')(options.emberData.compatWith || null); - const FEATURES = require('./features')(isProd); - options.emberData.__DEPRECATIONS = DEPRECATIONS; - options.emberData.__FEATURES = FEATURES; - - // copy configs forward - const ownConfig = this.options['@embroider/macros'].setOwnConfig; - ownConfig.polyfillUUID = options.emberData.polyfillUUID; - ownConfig.compatWith = options.emberData.compatWith || null; - ownConfig.debug = debugOptions; - ownConfig.deprecations = Object.assign( - DEPRECATIONS, - ownConfig.deprecations || {}, - hostOptions.deprecations || {} - ); - ownConfig.features = Object.assign({}, FEATURES); - ownConfig.includeDataAdapter = includeDataAdapter; - - this._emberDataConfig = ownConfig; - return ownConfig; - }, - }; -} - -module.exports = addonBuildConfigForDataPackage; diff --git a/packages/private-build-infra/src/create-version-module.js b/packages/private-build-infra/src/create-version-module.js deleted file mode 100644 index ff2f2a35490..00000000000 --- a/packages/private-build-infra/src/create-version-module.js +++ /dev/null @@ -1,40 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -var createFile = require('broccoli-file-creator'); -var gitRepoInfo = require('git-repo-info'); -var npmGitInfo = require('npm-git-info'); - -function calculateVersion() { - var gitPath = path.join(__dirname, '..', '.git'); - var pkg = require('../package.json'); - var packageVersion = pkg.version; - var suffix = ''; - - var info; - if (fs.existsSync(gitPath)) { - info = gitRepoInfo(gitPath); - if (info.tag) { - return info.tag.replace(/^v/, ''); - } - - suffix = '+' + info.sha.slice(0, 10); - } else { - info = npmGitInfo(pkg); - if (info.isInstalledAsNpmPackage() && !info.hasVersionInRef()) { - suffix = '+' + info.abbreviatedSha; - } - } - - return packageVersion + suffix; -} - -module.exports = function (compatVersion) { - return createFile( - 'version.js', - 'export default "' + - calculateVersion() + - '";\n' + - (compatVersion ? `export const COMPAT_VERSION = "${compatVersion}";\n` : '') - ); -}; diff --git a/packages/private-build-infra/src/debug-macros.js b/packages/private-build-infra/src/debug-macros.js deleted file mode 100644 index 54a88797efa..00000000000 --- a/packages/private-build-infra/src/debug-macros.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; - -module.exports = function debugMacros(config) { - const requireModule = require('./utilities/require-module'); - - const TransformPackages = require.resolve('./transforms/babel-plugin-transform-packages'); - const TransformDeprecations = require.resolve('./transforms/babel-plugin-transform-deprecations'); - const TransformDebugLogging = require.resolve('./transforms/babel-plugin-transform-logging'); - const TransformFeatures = require.resolve('./transforms/babel-plugin-transform-features'); - const TransformHasDebugPackage = require.resolve('./transforms/babel-plugin-transform-has-debug-package'); - - 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']; - - let plugins = [ - [ - TransformFeatures, - { - source: '@warp-drive/build-config/canary-features', - flags: config.features, - }, - '@warp-drive/build-config/canary-features-stripping', - ], - [ - TransformPackages, - { - source: '@ember-data/packages', - flags: MACRO_PACKAGE_FLAGS, - }, - ], - [ - TransformDeprecations, - { - source: '@warp-drive/build-config/deprecations', - flags: config.deprecations, - }, - '@ember-data/deprecation-stripping', - ], - [ - TransformDebugLogging, - { - source: '@warp-drive/build-config/debugging', - configKey: 'debug', - flags: config.debug, - }, - '@warp-drive/build-config/debugging', - ], - [ - TransformDebugLogging, - { - source: '@warp-drive/build-config/env', - configKey: 'env', - flags: { - TESTING: true, - PRODUCTION: true, - DEBUG: true, - }, - }, - '@warp-drive/build-config/env', - ], - [ - TransformHasDebugPackage, - { - source: '@ember-data/packages', - flags: { HAS_DEBUG_PACKAGE: true }, - }, - '@ember-data/optional-packages-stripping', - ], - ]; - - return plugins; -}; diff --git a/packages/private-build-infra/src/debugging.js b/packages/private-build-infra/src/debugging.js deleted file mode 100644 index b8e6062c500..00000000000 --- a/packages/private-build-infra/src/debugging.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const requireModule = require('./utilities/require-module'); - -function getDebugFeatures(debugConfig, isProd) { - const { default: DEBUG_FEATURES } = requireModule('@ember-data/private-build-infra/virtual-packages/debugging.js'); - const flags = {}; - - Object.keys(DEBUG_FEATURES).forEach((flag) => { - flags[flag] = isProd ? false : debugConfig[flag] || DEBUG_FEATURES[flag]; - }); - - return flags; -} - -module.exports = getDebugFeatures; diff --git a/packages/private-build-infra/src/packages.js b/packages/private-build-infra/src/packages.js deleted file mode 100644 index 7534df02eb5..00000000000 --- a/packages/private-build-infra/src/packages.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -const requireModule = require('./utilities/require-module'); - -function detectPackage(dep, packageName, seen) { - let isFirst = !seen; - seen = seen || new Map(); - if (seen.has(dep)) { - return false; - } - seen.set(dep, true); - - if (isFirst) { - if (dep.name() === packageName) { - return true; - } - } else if (dep.name === packageName) { - return true; - } - - if (!dep.addonPackages) { - return false; - } - - if (dep.addonPackages[packageName]) { - return true; - } - for (let i = 0; i < dep.addons.length; i++) { - if (detectPackage(dep.addons[i], packageName, seen)) { - return true; - } - } - return false; -} - -function getPackages(app) { - const { default: POSSIBLE_PACKAGES } = requireModule('@ember-data/private-build-infra/virtual-packages/packages.js'); - const flags = {}; - const excludeDebugInProduction = - app && app.options && app.options.emberData && app.options.emberData.includeDataAdapterInProduction === false; - const isProduction = process.env.EMBER_ENV === 'production'; - - Object.keys(POSSIBLE_PACKAGES).forEach((flag) => { - const packageName = POSSIBLE_PACKAGES[flag]; - - if (packageName === '@ember-data/debug' && isProduction && excludeDebugInProduction) { - flags[flag] = false; - } else { - let hasPackage = app ? detectPackage(app.project, packageName) : true; - // console.log(`${flag}=${hasPackage}`); - flags[flag] = hasPackage; - } - }); - - return flags; -} - -module.exports = getPackages; diff --git a/packages/private-build-infra/src/stripped-build-plugins.js b/packages/private-build-infra/src/stripped-build-plugins.js deleted file mode 100644 index 8de0e3e4172..00000000000 --- a/packages/private-build-infra/src/stripped-build-plugins.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -const getEnv = require('./utilities/get-env'); - -const StripClassCallCheck = require.resolve('babel6-plugin-strip-class-callcheck'); - -function isProduction(environment) { - return /production/.test(environment); -} - -module.exports = function (config = {}) { - let plugins = []; - config.env = getEnv(config); - const DebugMacros = require('./debug-macros')(config); - let postTransformPlugins = []; - - const environment = process.env.EMBER_ENV; - const isProd = isProduction(environment); - if (isProd) { - postTransformPlugins.push([StripClassCallCheck]); - } - - plugins.push(...DebugMacros); - - return { plugins, postTransformPlugins }; -}; diff --git a/packages/private-build-infra/src/transforms/babel-plugin-convert-existence-checks-to-macros/index.js b/packages/private-build-infra/src/transforms/babel-plugin-convert-existence-checks-to-macros/index.js deleted file mode 100644 index 4a678c55956..00000000000 --- a/packages/private-build-infra/src/transforms/babel-plugin-convert-existence-checks-to-macros/index.js +++ /dev/null @@ -1,61 +0,0 @@ -const { ImportUtil } = require('babel-import-util'); - -function parentIsUnary(node) { - if (node.parent.type === 'UnaryExpression' && node.parent.operator === '!') { - return true; - } - return false; -} - -module.exports = function (babel) { - const { types: t } = babel; - - return { - name: 'existence-checks', - visitor: { - ImportDeclaration(path, state) { - const replacements = state.opts.flags; - const importPath = path.node.source.value; - - if (importPath === state.opts.source) { - const specifiers = path.get('specifiers'); - specifiers.forEach((specifier) => { - let name = specifier.node.imported.name; - if (replacements[name]) { - let localBindingName = specifier.node.local.name; - let binding = specifier.scope.getBinding(localBindingName); - binding.referencePaths.forEach((p) => { - let negateStatement = false; - let node = p; - if (parentIsUnary(p)) { - negateStatement = true; - node = p.parentPath; - } - - const exp = t.callExpression(state.importer.import(p, '@embroider/macros', 'dependencySatisfies'), [ - t.stringLiteral(replacements[name]), - t.stringLiteral('*'), - ]); - - node.replaceWith( - t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [ - negateStatement ? t.unaryExpression('!', exp) : exp, - ]) - ); - }); - specifier.scope.removeOwnBinding(localBindingName); - specifier.remove(); - } - }); - } - if (path.get('specifiers').length === 0) { - path.remove(); - } - }, - - Program(path, state) { - state.importer = new ImportUtil(t, path); - }, - }, - }; -}; diff --git a/packages/private-build-infra/src/transforms/babel-plugin-transform-debug-env/index.js b/packages/private-build-infra/src/transforms/babel-plugin-transform-debug-env/index.js deleted file mode 100644 index 0bffaa34ca0..00000000000 --- a/packages/private-build-infra/src/transforms/babel-plugin-transform-debug-env/index.js +++ /dev/null @@ -1,59 +0,0 @@ -const { ImportUtil } = require('babel-import-util'); - -function parentIsUnary(node) { - if (node.parent.type === 'UnaryExpression' && node.parent.operator === '!') { - return true; - } - return false; -} - -module.exports = function (babel) { - const { types: t } = babel; - - return { - name: 'ast-transform', // not required - visitor: { - ImportDeclaration(path, state) { - const importPath = path.node.source.value; - - if (importPath === state.opts.source) { - const specifiers = path.get('specifiers'); - specifiers.forEach((specifier) => { - let name = specifier.node.imported.name; - if (!(name in state.opts.flags)) { - throw new Error(`Unexpected flag ${name} imported from ${state.opts.source}`); - } - let localBindingName = specifier.node.local.name; - let binding = specifier.scope.getBinding(localBindingName); - binding.referencePaths.forEach((p) => { - let negateStatement = false; - let node = p; - if (parentIsUnary(p)) { - negateStatement = true; - node = p.parentPath; - } - let getConfig = t.callExpression(state.importer.import(p, '@embroider/macros', 'isDevelopingApp'), []); - node.replaceWith( - // if (DEBUG) - // => - // if (macroCondition(isDevelopingApp()) - // t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [ - negateStatement ? t.unaryExpression('!', getConfig) : getConfig - // ]) - ); - }); - specifier.scope.removeOwnBinding(localBindingName); - specifier.remove(); - }); - } - if (path.get('specifiers').length === 0) { - path.remove(); - } - }, - - Program(path, state) { - state.importer = new ImportUtil(t, path); - }, - }, - }; -}; diff --git a/packages/private-build-infra/src/transforms/babel-plugin-transform-ext.js b/packages/private-build-infra/src/transforms/babel-plugin-transform-ext.js deleted file mode 100644 index a7371a493f8..00000000000 --- a/packages/private-build-infra/src/transforms/babel-plugin-transform-ext.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = function () { - return { - name: '@ember-data/v1-addon-shim/transform-ext', - visitor: { - Program(path) { - path.node.body.forEach((node) => { - if (node.type === 'ImportDeclaration' || (node.type === 'ExportNamedDeclaration' && node.source)) { - if (node.source.value.endsWith('.js')) { - node.source.value = node.source.value.replace('.js', ''); - } - } - }); - }, - }, - }; -}; diff --git a/packages/private-build-infra/src/transforms/babel-plugin-transform-has-debug-package/index.js b/packages/private-build-infra/src/transforms/babel-plugin-transform-has-debug-package/index.js deleted file mode 100644 index 4abd10eb752..00000000000 --- a/packages/private-build-infra/src/transforms/babel-plugin-transform-has-debug-package/index.js +++ /dev/null @@ -1,63 +0,0 @@ -const { ImportUtil } = require('babel-import-util'); - -function parentIsUnary(node) { - if (node.parent.type === 'UnaryExpression' && node.parent.operator === '!') { - return true; - } - return false; -} - -module.exports = function (babel) { - const { types: t } = babel; - - return { - name: 'ast-transform', // not required - visitor: { - ImportDeclaration(path, state) { - const importPath = path.node.source.value; - - if (importPath === state.opts.source) { - const specifiers = path.get('specifiers'); - specifiers.forEach((specifier) => { - let name = specifier.node.imported.name; - if (!(name in state.opts.flags)) { - throw new Error(`Unexpected flag ${name} imported from ${state.opts.source}`); - } - let localBindingName = specifier.node.local.name; - let binding = specifier.scope.getBinding(localBindingName); - binding.referencePaths.forEach((p) => { - let negateStatement = false; - let node = p; - - if (parentIsUnary(p)) { - negateStatement = true; - node = p.parentPath; - } - let getConfig = t.memberExpression( - t.callExpression(state.importer.import(p, '@embroider/macros', 'getOwnConfig'), []), - t.identifier('includeDataAdapter') - ); - node.replaceWith( - // if (LOG_FOO) - // => - // if (macroCondition(getOwnConfig().debug.LOG_FOO)) - t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [ - negateStatement ? t.unaryExpression('!', getConfig) : getConfig, - ]) - ); - }); - specifier.scope.removeOwnBinding(localBindingName); - specifier.remove(); - }); - } - if (path.get('specifiers').length === 0) { - path.remove(); - } - }, - - Program(path, state) { - state.importer = new ImportUtil(t, path); - }, - }, - }; -}; diff --git a/packages/private-build-infra/src/transforms/babel-plugin-transform-packages/index.js b/packages/private-build-infra/src/transforms/babel-plugin-transform-packages/index.js deleted file mode 100644 index bb7da452275..00000000000 --- a/packages/private-build-infra/src/transforms/babel-plugin-transform-packages/index.js +++ /dev/null @@ -1,65 +0,0 @@ -const { ImportUtil } = require('babel-import-util'); - -function parentIsUnary(node) { - if (node.parent.type === 'UnaryExpression' && node.parent.operator === '!') { - return true; - } - return false; -} - -module.exports = function (babel) { - const { types: t } = babel; - - return { - name: 'ast-transform', // not required - visitor: { - ImportDeclaration(path, state) { - const importPath = path.node.source.value; - - if (importPath === state.opts.source) { - const specifiers = path.get('specifiers'); - specifiers.forEach((specifier) => { - let name = specifier.node.imported.name; - if (!(name in state.opts.flags)) { - return; - } - let localBindingName = specifier.node.local.name; - let binding = specifier.scope.getBinding(localBindingName); - binding.referencePaths.forEach((p) => { - let negateStatement = false; - let node = p; - if (parentIsUnary(p)) { - negateStatement = true; - node = p.parentPath; - } - let getConfig = t.memberExpression( - t.memberExpression( - t.callExpression(state.importer.import(p, '@embroider/macros', 'getOwnConfig'), []), - t.identifier('packages') - ), - t.identifier(name) - ); - node.replaceWith( - // if (LOG_FOO) - // => - // if (macroCondition(getOwnConfig().debug.LOG_FOO)) - t.callExpression(state.importer.import(p, '@embroider/macros', 'macroCondition'), [ - negateStatement ? t.unaryExpression('!', getConfig) : getConfig, - ]) - ); - }); - specifier.scope.removeOwnBinding(localBindingName); - specifier.remove(); - }); - } - if (path.get('specifiers').length === 0) { - path.remove(); - } - }, - - Program(path, state) { - state.importer = new ImportUtil(t, path); - }, - }, - }; -}; diff --git a/packages/private-build-infra/src/utilities/detect-module.js b/packages/private-build-infra/src/utilities/detect-module.js deleted file mode 100644 index 3f758015fc3..00000000000 --- a/packages/private-build-infra/src/utilities/detect-module.js +++ /dev/null @@ -1,88 +0,0 @@ -/* eslint-disable no-console */ -const path = require('node:path'); -const fs = require('node:fs'); - -const chalk = require('chalk'); - -function moduleSurelyExists(modulePath) { - try { - fs.statSync(path.join(modulePath, 'package.json')); - return true; - } catch { - return false; - } -} - -function log(str) { - if (process.env.DEBUG_MODULE_RESOLUTION) { - console.log(chalk.grey(str)); - } -} - -function bustCache(require) { - Object.keys(require.cache).forEach((key) => { - if (key.includes('ember-data')) { - delete require.cache[key]; - } - }); -} - -// do our best to detect being present -// Note: when this is not enough, consuming apps may need -// to "hoist" peer-deps or specify us as a direct dependency -// in order to deal with peer-dep bugs in package managers -module.exports = function detectModule(require, moduleName, baseDir, pkg) { - const pkgName = pkg.name; - if (moduleName === pkgName) { - return true; - } - const isDeclaredDependency = pkg.dependencies?.[moduleName] || pkg.peerDependencies?.[moduleName]; - - if (!isDeclaredDependency) { - return false; - } - - log(`\n\n${chalk.yellow(pkgName)} >> ${chalk.cyan(moduleName)} in ${chalk.white(baseDir)}`); - - const expectedLocation = path.join(baseDir, '../../', moduleName); - if (moduleSurelyExists(expectedLocation)) { - log(`\t✅ FOUND in Expected Location`); - return true; - } else { - log(`\tMISSING in ${expectedLocation}`); - } - - bustCache(require); - - try { - // try default algorithm first - require.resolve(moduleName); - log('\t✅ FOUND via normal resolution'); - return true; - } catch { - try { - bustCache(require); - // package managers have peer-deps bugs where another library - // bringing a peer-dependency doesn't necessarily result in all - // versions of the dependent getting the peer-dependency - // - // so we resolve from project as well as from our own location - require.resolve(moduleName, { paths: [baseDir, process.cwd()] }); - log('\t✅ FOUND via custom paths'); - return true; - } catch { - try { - bustCache(require); - // ember-data brings all packages so if present we are present - // - // eslint-disable-next-line n/no-missing-require - require.resolve('ember-data', { paths: [baseDir, path.join(baseDir, '../'), process.cwd()] }); - log('\t✅ FOUND ember-data'); - return true; - } catch { - log('\t🙈 NOT FOUND'); - return false; - } - } - } -}; diff --git a/packages/private-build-infra/src/utilities/edition-detector.js b/packages/private-build-infra/src/utilities/edition-detector.js deleted file mode 100644 index 5eba83070e0..00000000000 --- a/packages/private-build-infra/src/utilities/edition-detector.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const path = require('path'); - -const { has } = require('@ember/edition-utils'); - -module.exports = function (blueprint) { - blueprint.filesPath = function () { - let hasOctane = has('octane'); - if (hasOctane && process.env.EMBER_EDITION === 'classic') { - hasOctane = false; //forcible override - } - let rootPath = hasOctane ? 'native-files' : 'files'; - return path.join(blueprint.root, rootPath); - }; - - return blueprint; -}; diff --git a/packages/private-build-infra/src/utilities/extend-from-application-entity.js b/packages/private-build-infra/src/utilities/extend-from-application-entity.js deleted file mode 100644 index 352a4d77272..00000000000 --- a/packages/private-build-infra/src/utilities/extend-from-application-entity.js +++ /dev/null @@ -1,58 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -const stringUtil = require('ember-cli-string-utils'); -const SilentError = require('silent-error'); -const pathUtil = require('ember-cli-path-utils'); - -module.exports = function (type, baseClass, options) { - let isAddon = options.inRepoAddon || options.project.isEmberCLIAddon(); - - let entityName = options.entity.name; - let relativePath = pathUtil.getRelativePath(options.entity.name); - - if (options.pod && options.podPath) { - relativePath = pathUtil.getRelativePath(options.podPath + options.entity.name); - } - - let applicationEntityPath = path.join(options.project.root, 'app', `${type}s`, 'application.js'); - - let hasApplicationEntity = fs.existsSync(applicationEntityPath); - if (!isAddon && !options.baseClass && entityName !== 'application' && hasApplicationEntity) { - options.baseClass = 'application'; - } - - if (options.baseClass === entityName) { - throw new SilentError( - stringUtil.classify(type) + - 's cannot extend from themself. To resolve this, remove the `--base-class` option or change to a different base-class.' - ); - } - - let importStatement; - - if (options.baseClass) { - let baseClassPath = options.baseClass; - baseClass = stringUtil.classify(baseClassPath.replace('/', '-')); - baseClass = baseClass + stringUtil.classify(type); - - importStatement = `import ${baseClass} from '${relativePath}${baseClassPath}';`; - } else { - let baseClassPath = `@ember-data/${type}`; - - if (baseClass.startsWith('JSONAPI')) { - baseClassPath += '/json-api'; - } - - if (baseClass.startsWith('REST')) { - baseClassPath += '/rest'; - } - - importStatement = `import ${baseClass} from '${baseClassPath}';`; - } - - return { - importStatement, - baseClass, - }; -}; diff --git a/packages/private-build-infra/src/utilities/get-env.js b/packages/private-build-infra/src/utilities/get-env.js deleted file mode 100644 index bacc48e7c35..00000000000 --- a/packages/private-build-infra/src/utilities/get-env.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = function getEnv() { - const { EMBER_ENV, IS_TESTING, EMBER_CLI_TEST_COMMAND } = process.env; - const PRODUCTION = EMBER_ENV === 'production'; - const DEBUG = !PRODUCTION; - const TESTING = DEBUG || Boolean(EMBER_ENV === 'test' || IS_TESTING || EMBER_CLI_TEST_COMMAND); - - return { - TESTING, - PRODUCTION, - DEBUG, - }; -}; diff --git a/packages/private-build-infra/src/utilities/module-prefix-for-project.js b/packages/private-build-infra/src/utilities/module-prefix-for-project.js deleted file mode 100644 index bd051380526..00000000000 --- a/packages/private-build-infra/src/utilities/module-prefix-for-project.js +++ /dev/null @@ -1,5 +0,0 @@ -const { dasherize } = require('ember-cli-string-utils'); - -module.exports = function modulePrefixForProject(project) { - return dasherize(project.config().modulePrefix); -}; diff --git a/packages/private-build-infra/src/utilities/require-module.js b/packages/private-build-infra/src/utilities/require-module.js deleted file mode 100644 index 295fb36beb3..00000000000 --- a/packages/private-build-infra/src/utilities/require-module.js +++ /dev/null @@ -1,36 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -const PGK_ROOT = path.join(__dirname, '../../'); - -module.exports = function requireModule(modulePath) { - if (modulePath.startsWith('@ember-data/private-build-infra/')) { - modulePath = modulePath.replace('@ember-data/private-build-infra/', PGK_ROOT); - } else if (modulePath.startsWith('@ember-data/private-build-infra')) { - modulePath = modulePath.replace('@ember-data/private-build-infra', PGK_ROOT); - } - const path = require.resolve(modulePath); - const fileContents = fs.readFileSync(path, { encoding: 'utf8' }); - let newContents; - - if (fileContents.includes('export default')) { - newContents = fileContents.replace('export default ', 'return '); - } else { - newContents = replaceAll(fileContents, 'export const ', 'module.exports.'); - newContents = `const module = { exports: {} };\n${newContents}\nreturn module.exports;`; - } - try { - const func = new Function(newContents); - return { default: func() }; - } catch (e) { - // eslint-disable-next-line no-console - console.log(e); - } -}; - -function replaceAll(str, pattern, replacement) { - if (str.replaceAll) { - return str.replaceAll(pattern, replacement); - } - return str.replace(new RegExp(pattern, 'g'), replacement); -} diff --git a/packages/private-build-infra/src/utilities/test-framework-detector.js b/packages/private-build-infra/src/utilities/test-framework-detector.js deleted file mode 100644 index ff82d83185d..00000000000 --- a/packages/private-build-infra/src/utilities/test-framework-detector.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); - -const VersionChecker = require('ember-cli-version-checker'); - -module.exports = function (blueprint) { - blueprint.supportsAddon = function () { - return false; - }; - - blueprint.filesPath = function () { - let type; - - let dependencies = this.project.dependencies(); - - if ('ember-qunit' in dependencies) { - if (fs.existsSync(blueprint.root + '/qunit-rfc-232-files')) { - type = 'qunit-rfc-232'; - } else { - type = 'qunit'; - } - } else if ('ember-cli-qunit' in dependencies) { - let checker = new VersionChecker(this.project); - if ( - fs.existsSync(blueprint.root + '/qunit-rfc-232-files') && - checker.for('ember-cli-qunit', 'npm').gte('4.2.0') - ) { - type = 'qunit-rfc-232'; - } else { - type = 'qunit'; - } - } else { - this.ui.writeLine("Couldn't determine test style - using QUnit"); - type = 'qunit'; - } - - return path.join(blueprint.root, type + '-files'); - }; - - return blueprint; -}; diff --git a/packages/private-build-infra/src/v2-babel-build-pack.js b/packages/private-build-infra/src/v2-babel-build-pack.js deleted file mode 100644 index 6641d934dc9..00000000000 --- a/packages/private-build-infra/src/v2-babel-build-pack.js +++ /dev/null @@ -1,37 +0,0 @@ -const pkg = require('../package.json'); - -const getEnv = require('./utilities/get-env'); -// eslint-disable-next-line import/order -const requireModule = require('./utilities/require-module'); - -const debugFlags = requireModule('@ember-data/private-build-infra/virtual-packages/debugging.js'); -const deprecationFlags = requireModule('@ember-data/private-build-infra/virtual-packages/deprecations.js'); -const featureFlags = requireModule('@ember-data/private-build-infra/virtual-packages/canary-features.js'); - -const isCanary = pkg.version.includes('alpha'); - -const features = {}; -Object.keys(featureFlags).forEach((flag) => { - if (isCanary) { - features[flag] = featureFlags[flag]; - } else { - const value = featureFlags[flag]; - - if (value === null) { - features[flag] = false; - } else { - features[flag] = value; - } - } -}); - -const config = { - debug: Object.assign({}, debugFlags.default), - deprecations: Object.assign({}, deprecationFlags.default), - features, - env: getEnv(), -}; - -const plugins = require('./debug-macros')(config); - -module.exports = plugins; diff --git a/packages/private-build-infra/virtual-packages/canary-features.d.ts b/packages/private-build-infra/virtual-packages/canary-features.d.ts deleted file mode 100644 index ed43316344a..00000000000 --- a/packages/private-build-infra/virtual-packages/canary-features.d.ts +++ /dev/null @@ -1 +0,0 @@ -export const SAMPLE_FEATURE_FLAG: boolean | null; diff --git a/packages/private-build-infra/virtual-packages/debugging.d.ts b/packages/private-build-infra/virtual-packages/debugging.d.ts deleted file mode 100644 index f1eeebe3855..00000000000 --- a/packages/private-build-infra/virtual-packages/debugging.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const LOG_PAYLOADS: boolean; -export const LOG_OPERATIONS: boolean; -export const LOG_MUTATIONS: boolean; -export const LOG_NOTIFICATIONS: boolean; -export const LOG_REQUESTS: boolean; -export const LOG_REQUEST_STATUS: boolean; -export const LOG_IDENTIFIERS: boolean; -export const LOG_GRAPH: boolean; -export const LOG_INSTANCE_CACHE: boolean; diff --git a/packages/private-build-infra/virtual-packages/env.d.ts b/packages/private-build-infra/virtual-packages/env.d.ts deleted file mode 100644 index ee75ffb830c..00000000000 --- a/packages/private-build-infra/virtual-packages/env.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const DEBUG: boolean; -export const TESTING: boolean; -export const PRODUCTION: boolean; diff --git a/packages/private-build-infra/virtual-packages/packages.d.ts b/packages/private-build-infra/virtual-packages/packages.d.ts deleted file mode 100644 index 476beea3689..00000000000 --- a/packages/private-build-infra/virtual-packages/packages.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const HAS_EMBER_DATA_PACKAGE: boolean; -export const HAS_STORE_PACKAGE: boolean; -export const HAS_MODEL_PACKAGE: boolean; -export const HAS_ADAPTER_PACKAGE: boolean; -export const HAS_SERIALIZER_PACKAGE: boolean; -export const HAS_DEBUG_PACKAGE: boolean; -export const HAS_JSON_API_PACKAGE: boolean; -export const HAS_GRAPH_PACKAGE: boolean; -export const HAS_REQUEST_PACKAGE: boolean; -export const HAS_TRACKING_PACKAGE: boolean; -export const HAS_COMPAT_PACKAGE: boolean; diff --git a/packages/private-build-infra/virtual-packages/packages.js b/packages/private-build-infra/virtual-packages/packages.js deleted file mode 100644 index c75784c6f37..00000000000 --- a/packages/private-build-infra/virtual-packages/packages.js +++ /dev/null @@ -1,11 +0,0 @@ -export const HAS_EMBER_DATA_PACKAGE = 'ember-data'; -export const HAS_STORE_PACKAGE = '@ember-data/store'; -export const HAS_MODEL_PACKAGE = '@ember-data/model'; -export const HAS_JSON_API_PACKAGE = '@ember-data/json-api'; -export const HAS_GRAPH_PACKAGE = '@ember-data/graph'; -export const HAS_REQUEST_PACKAGE = '@ember-data/request'; -export const HAS_COMPAT_PACKAGE = '@ember-data/legacy-compat'; -export const HAS_TRACKING_PACKAGE = '@ember-data/tracking'; -export const HAS_ADAPTER_PACKAGE = '@ember-data/adapter'; -export const HAS_SERIALIZER_PACKAGE = '@ember-data/serializer'; -export const HAS_DEBUG_PACKAGE = '@ember-data/debug'; diff --git a/packages/request-utils/.eslintrc.cjs b/packages/request-utils/.eslintrc.cjs deleted file mode 100644 index a34d3761938..00000000000 --- a/packages/request-utils/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/request-utils/addon-main.cjs b/packages/request-utils/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/request-utils/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/request-utils/addon-main.js b/packages/request-utils/addon-main.js deleted file mode 100644 index 459ef9174ca..00000000000 --- a/packages/request-utils/addon-main.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - name: require('./package.json').name, - - treeForVendor() { - return; - }, - treeForPublic() { - return; - }, - treeForStyles() { - return; - }, - treeForAddonStyles() { - return; - }, - treeForApp() { - return; - }, -}; diff --git a/packages/request-utils/babel.config.json b/packages/request-utils/babel.config.json deleted file mode 100644 index 0e04314a08c..00000000000 --- a/packages/request-utils/babel.config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "plugins": [ - "@babel/plugin-transform-runtime", - ["@babel/plugin-transform-typescript", { "allowDeclareFields": true }], - ["@babel/plugin-proposal-decorators", { "legacy": true }], - "@babel/plugin-transform-class-properties" - ] -} diff --git a/packages/request-utils/babel.config.mjs b/packages/request-utils/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/request-utils/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/request-utils/eslint.config.mjs b/packages/request-utils/eslint.config.mjs new file mode 100644 index 00000000000..63296bac802 --- /dev/null +++ b/packages/request-utils/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/debug'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/request-utils/package.json b/packages/request-utils/package.json index 98e8d25e52c..24a34da5ce8 100644 --- a/packages/request-utils/package.json +++ b/packages/request-utils/package.json @@ -13,7 +13,7 @@ "homepage": "https://github.com/emberjs/data", "bugs": "https://github.com/emberjs/data/issues", "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "keywords": [ "ember-addon" @@ -21,16 +21,10 @@ "volta": { "extends": "../../package.json" }, - "peerDependencies": { - "@warp-drive/core-types": "workspace:0.0.0-alpha.50" - }, - "dependencies": { - "ember-cli-babel": "^8.2.0" - }, "files": [ "unstable-preview-types", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -39,43 +33,40 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" } }, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, + "peerDependencies": { + "@warp-drive/core-types": "workspace:0.0.0-alpha.50" + }, + "dependencies": { + "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" + }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0" + "vite": "^5.2.11" }, "ember": { "edition": "octane" @@ -83,6 +74,9 @@ "dependenciesMeta": { "@warp-drive/core-types": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } } } diff --git a/packages/request-utils/rollup.config.mjs b/packages/request-utils/rollup.config.mjs deleted file mode 100644 index ac33c58f32b..00000000000 --- a/packages/request-utils/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external(['@ember/debug']), - - 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', '-private.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/request-utils/src/index.ts b/packages/request-utils/src/index.ts index f4243a28406..0d121ed50e4 100644 --- a/packages/request-utils/src/index.ts +++ b/packages/request-utils/src/index.ts @@ -1,5 +1,6 @@ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; +import { assert } from '@warp-drive/build-config/macros'; 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'; diff --git a/packages/request-utils/tsconfig.json b/packages/request-utils/tsconfig.json index 21ccf854219..95432a7eb43 100644 --- a/packages/request-utils/tsconfig.json +++ b/packages/request-utils/tsconfig.json @@ -7,15 +7,13 @@ "skipLibCheck": true, "declarationDir": "unstable-preview-types", "emitDeclarationOnly": true, - "noEmit": false, "allowJs": false, "checkJs": false, - "alwaysStrict": true, "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "allowSyntheticDefaultImports": true, - "noImplicitAny": true, "noImplicitThis": true, "strictBindCallApply": true, @@ -28,21 +26,30 @@ "noErrorTruncation": true, "preserveConstEnums": false, "experimentalDecorators": true, - "pretty": true, - // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "inlineSourceMap": true, "inlineSources": true, - - "baseUrl": "src", - "types": ["ember-source/types"] + "types": ["ember-source/types"], + "paths": { + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] + } }, - "references": [{ "path": "../core-types" }] + "references": [ + { + "path": "../core-types" + }, + { + "path": "../build-config" + } + ] } diff --git a/packages/request-utils/vite.config.mjs b/packages/request-utils/vite.config.mjs new file mode 100644 index 00000000000..9eed6fe8273 --- /dev/null +++ b/packages/request-utils/vite.config.mjs @@ -0,0 +1,12 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = ['@ember/debug']; +export const entryPoints = ['src/index.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/request/.eslintrc.cjs b/packages/request/.eslintrc.cjs deleted file mode 100644 index a34d3761938..00000000000 --- a/packages/request/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/request/addon-main.cjs b/packages/request/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/request/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/request/addon-main.js b/packages/request/addon-main.js deleted file mode 100644 index 16a41526809..00000000000 --- a/packages/request/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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/request/babel.config.js b/packages/request/babel.config.js deleted file mode 100644 index 9057eab874b..00000000000 --- a/packages/request/babel.config.js +++ /dev/null @@ -1,12 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/request/babel.config.mjs b/packages/request/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/request/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/request/eslint.config.mjs b/packages/request/eslint.config.mjs new file mode 100644 index 00000000000..3b45156a9d4 --- /dev/null +++ b/packages/request/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: [], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/request/package.json b/packages/request/package.json index 283e4073c8e..c4e3e30a0d6 100644 --- a/packages/request/package.json +++ b/packages/request/package.json @@ -15,17 +15,15 @@ "ember-addon" ], "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "files": [ "unstable-preview-types", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -34,61 +32,51 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "peerDependencies": { "@warp-drive/core-types": "workspace:0.0.0-alpha.50" }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember/test-waiters": "^3.1.0", "@embroider/macros": "^1.15.1", - "ember-cli-babel": "^8.2.0" - }, - "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, - "@warp-drive/core-types": { - "injected": true - } + "ember-cli-babel": "^8.2.0", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0" + "vite": "^5.2.11" + }, + "dependenciesMeta": { + "@warp-drive/core-types": { + "injected": true + }, + "@warp-drive/build-config": { + "injected": true + } }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, diff --git a/packages/request/rollup.config.mjs b/packages/request/rollup.config.mjs deleted file mode 100644 index 8edbc126428..00000000000 --- a/packages/request/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external(['@embroider/macros', '@ember/test-waiters']), - - 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', 'fetch.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/request/src/-private/debug.ts b/packages/request/src/-private/debug.ts index 06c39a4f8cc..22c7f475be7 100644 --- a/packages/request/src/-private/debug.ts +++ b/packages/request/src/-private/debug.ts @@ -1,7 +1,8 @@ import { DEBUG } from '@warp-drive/build-config/env'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; +import type { ImmutableHeaders, RequestInfo } from '@warp-drive/core-types/request'; import { Context, upgradeHeaders } from './context'; -import type { ImmutableHeaders, RequestInfo } from '@warp-drive/core-types/request'; const BODY_TYPES = { type: 'string', @@ -69,8 +70,8 @@ const ValidKeys = new Map([ ], ]); -const IS_FROZEN = Symbol('FROZEN'); -const IS_COLLECTION = Symbol.for('Collection'); +const IS_FROZEN = getOrSetGlobal('IS_FROZEN', Symbol('FROZEN')); +const IS_COLLECTION = getOrSetGlobal('IS_COLLECTION', Symbol.for('Collection')); function freezeHeaders(headers: Headers | ImmutableHeaders): ImmutableHeaders { headers.delete = @@ -106,7 +107,7 @@ export function deepFreeze(value: T): T { return value; } const arr = (value as unknown[]).map(deepFreeze); - (arr as unknown[] & { [IS_FROZEN]: true })[IS_FROZEN] = true; + arr[IS_FROZEN as unknown as number] = true; return Object.freeze(arr) as T; } case 'null': @@ -133,7 +134,6 @@ export function deepFreeze(value: T): T { case 'error': case 'stream': default: - // eslint-disable-next-line no-console // console.log(`Cannot deep-freeze ${_niceType}`); return value; } @@ -199,7 +199,7 @@ function validateKey(key: string, value: unknown, errors: string[]) { if (typeof value === 'string' || value instanceof ReadableStream) { return; } - let type = niceTypeOf(value); + const type = niceTypeOf(value); if (schema.klass.includes(type)) { return; } @@ -248,7 +248,7 @@ function validateKey(key: string, value: unknown, errors: string[]) { } const keys = Object.keys(value); keys.forEach((k) => { - let v: unknown = (value as Record)[k]; + const v: unknown = (value as Record)[k]; if (typeof k !== 'string') { errors.push(`\tThe key ${String(k)} on ${key} should be a string key`); } else if (typeof v !== 'string') { @@ -334,7 +334,7 @@ export function assertValidRequest( // handle schema const keys = Object.keys(request) as Array; const validationErrors: string[] = []; - const isLegacyRequest: boolean = Boolean('op' in request && !request.url); + const isLegacyRequest = Boolean('op' in request && !request.url); keys.forEach((key) => { if (isLegacyRequest && key === 'data') { return; diff --git a/packages/request/src/-private/manager.ts b/packages/request/src/-private/manager.ts index aee073d8865..0d6d43b3297 100644 --- a/packages/request/src/-private/manager.ts +++ b/packages/request/src/-private/manager.ts @@ -435,6 +435,7 @@ For usage of the store's `requestManager` via `store.request()` see the import { importSync } from '@embroider/macros'; import { DEBUG, TESTING } from '@warp-drive/build-config/env'; +import { peekTransient, setTransient } from '@warp-drive/core-types/-private'; import type { RequestInfo, StructuredErrorDocument } from '@warp-drive/core-types/request'; import { assertValidRequest } from './debug'; @@ -443,7 +444,6 @@ import { clearRequestResult, getRequestResult, setPromiseResult } from './promis import type { CacheHandler, Future, GenericCreateArgs, Handler } from './types'; import { executeNextHandler, IS_CACHE_HANDLER } from './utils'; -let REQ_ID = 0; /** * ```js * import RequestManager from '@ember-data/request'; @@ -602,7 +602,7 @@ export class RequestManager { * @param {RequestInfo} request * @return {Future} */ - request(request: RequestInfo): Future { + request(request: RequestInfo): Future { const handlers = this.#handlers; if (DEBUG) { if (!Object.isFrozen(handlers)) { @@ -616,8 +616,10 @@ export class RequestManager { delete request.controller; } - const requestId = REQ_ID++; - const promise = executeNextHandler(handlers, request, 0, { + const requestId = peekTransient('REQ_ID') ?? 0; + setTransient('REQ_ID', requestId + 1); + + const promise = executeNextHandler(handlers, request, 0, { controller, response: null, stream: null, diff --git a/packages/request/src/-private/promise-cache.ts b/packages/request/src/-private/promise-cache.ts index f01896c448a..96230ab086f 100644 --- a/packages/request/src/-private/promise-cache.ts +++ b/packages/request/src/-private/promise-cache.ts @@ -1,3 +1,5 @@ +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; + export type CacheResult = { isError: true; result: E } | { isError: false; result: T }; export type Awaitable = { @@ -6,8 +8,8 @@ export type Awaitable = { finally: (onFinally: () => unknown) => unknown; }; -export const PromiseCache = new WeakMap(); -export const RequestMap = new Map(); +export const PromiseCache = getOrSetGlobal('PromiseCache', new WeakMap()); +export const RequestMap = getOrSetGlobal('RequestMap', new Map()); export function setRequestResult(requestId: number, result: CacheResult) { RequestMap.set(requestId, result); diff --git a/packages/request/src/-private/utils.ts b/packages/request/src/-private/utils.ts index b6eb1a93f87..c6df020c5ee 100644 --- a/packages/request/src/-private/utils.ts +++ b/packages/request/src/-private/utils.ts @@ -1,4 +1,5 @@ import { DEBUG } from '@warp-drive/build-config/env'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import { type RequestInfo, STRUCTURED, @@ -12,7 +13,7 @@ import { createFuture, isFuture } from './future'; import { setRequestResult } from './promise-cache'; import type { DeferredFuture, Future, GodContext, Handler } from './types'; -export const IS_CACHE_HANDLER = Symbol('IS_CACHE_HANDLER'); +export const IS_CACHE_HANDLER = getOrSetGlobal('IS_CACHE_HANDLER', Symbol('IS_CACHE_HANDLER')); export function curryFuture(owner: ContextOwner, inbound: Future, outbound: DeferredFuture): Future { owner.setStream(inbound.getStream()); diff --git a/packages/request/tsconfig.json b/packages/request/tsconfig.json index 1418925fcb7..ac4c62d775b 100644 --- a/packages/request/tsconfig.json +++ b/packages/request/tsconfig.json @@ -7,14 +7,13 @@ "skipLibCheck": true, "declarationDir": "unstable-preview-types", "emitDeclarationOnly": true, - "noEmit": false, "allowJs": false, "checkJs": false, "alwaysStrict": true, "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "allowSyntheticDefaultImports": true, - "noImplicitAny": true, "noImplicitThis": true, "strictBindCallApply": true, @@ -27,24 +26,27 @@ "noErrorTruncation": true, "preserveConstEnums": false, "experimentalDecorators": true, - "pretty": true, - - // Enable faster builds - // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - "declaration": true, "declarationMap": true, "inlineSourceMap": true, "inlineSources": true, - - "baseUrl": "src", - + "baseUrl": ".", "paths": { - "@warp-drive/build-config/env": ["../../private-build-infra/virtual-packages/env.d.ts"] + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"] } }, - "references": [{ "path": "../core-types" }] + "references": [ + { + "path": "../core-types" + }, + { + "path": "../build-config" + } + ] } diff --git a/packages/request/vite.config.mjs b/packages/request/vite.config.mjs new file mode 100644 index 00000000000..9d67ac8f00d --- /dev/null +++ b/packages/request/vite.config.mjs @@ -0,0 +1,12 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = ['@ember/test-waiters']; +export const entryPoints = ['src/index.ts', 'src/fetch.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/rest/.eslintrc.cjs b/packages/rest/.eslintrc.cjs deleted file mode 100644 index dbf68cb61a9..00000000000 --- a/packages/rest/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/rest/addon-main.cjs b/packages/rest/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/rest/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/rest/addon-main.js b/packages/rest/addon-main.js deleted file mode 100644 index 459ef9174ca..00000000000 --- a/packages/rest/addon-main.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - name: require('./package.json').name, - - treeForVendor() { - return; - }, - treeForPublic() { - return; - }, - treeForStyles() { - return; - }, - treeForAddonStyles() { - return; - }, - treeForApp() { - return; - }, -}; diff --git a/packages/rest/babel.config.json b/packages/rest/babel.config.json deleted file mode 100644 index 0e04314a08c..00000000000 --- a/packages/rest/babel.config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "plugins": [ - "@babel/plugin-transform-runtime", - ["@babel/plugin-transform-typescript", { "allowDeclareFields": true }], - ["@babel/plugin-proposal-decorators", { "legacy": true }], - "@babel/plugin-transform-class-properties" - ] -} diff --git a/packages/rest/babel.config.mjs b/packages/rest/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/rest/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/rest/eslint.config.mjs b/packages/rest/eslint.config.mjs new file mode 100644 index 00000000000..a1fe959bb9c --- /dev/null +++ b/packages/rest/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/string', 'ember-inflector'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/rest/package.json b/packages/rest/package.json index 2d9cd771989..cda11de8c1d 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -13,7 +13,7 @@ "homepage": "https://github.com/emberjs/data", "bugs": "https://github.com/emberjs/data/issues", "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "keywords": [ "ember-addon" @@ -22,6 +22,8 @@ "extends": "../../package.json" }, "dependencies": { + "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-cli-babel": "^8.2.0" }, "peerDependencies": { @@ -33,8 +35,8 @@ }, "files": [ "unstable-preview-types", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -43,49 +45,38 @@ "exports": { "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-inflector": "^4.0.2", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0" + "vite": "^5.2.11" }, "ember": { "edition": "octane" @@ -111,6 +102,9 @@ }, "@ember-data/tracking": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } } } diff --git a/packages/rest/rollup.config.mjs b/packages/rest/rollup.config.mjs deleted file mode 100644 index 683b7c9b8b0..00000000000 --- a/packages/rest/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external(['@ember/debug']), - - 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(['request.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/rest/src/-private/builders/save-record.ts b/packages/rest/src/-private/builders/save-record.ts index f5f66bd59e5..f619fb3cfdb 100644 --- a/packages/rest/src/-private/builders/save-record.ts +++ b/packages/rest/src/-private/builders/save-record.ts @@ -1,4 +1,3 @@ -import { assert } from '@ember/debug'; import { camelize } from '@ember/string'; import { pluralize } from 'ember-inflector'; @@ -10,6 +9,7 @@ import { type UpdateRecordUrlOptions, } from '@ember-data/request-utils'; import { recordIdentifierFor } from '@ember-data/store'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { ConstrainedRequestOptions, diff --git a/packages/rest/tsconfig.json b/packages/rest/tsconfig.json index e9832428f85..eb3e30415db 100644 --- a/packages/rest/tsconfig.json +++ b/packages/rest/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,42 +7,60 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../request" }, - { "path": "../request-utils" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../request" + }, + { + "path": "../request-utils" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/rest/vite.config.mjs b/packages/rest/vite.config.mjs new file mode 100644 index 00000000000..d1123ac5a32 --- /dev/null +++ b/packages/rest/vite.config.mjs @@ -0,0 +1,12 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = []; +export const entryPoints = ['src/request.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/schema-record/.eslintrc.cjs b/packages/schema-record/.eslintrc.cjs deleted file mode 100644 index a34d3761938..00000000000 --- a/packages/schema-record/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/schema-record/.npmignore b/packages/schema-record/.npmignore deleted file mode 100644 index e4bce62a5ec..00000000000 --- a/packages/schema-record/.npmignore +++ /dev/null @@ -1,40 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# ember-data -/node-tests - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json \ No newline at end of file diff --git a/packages/schema-record/addon-main.cjs b/packages/schema-record/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/schema-record/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/schema-record/addon-main.js b/packages/schema-record/addon-main.js deleted file mode 100644 index 16a41526809..00000000000 --- a/packages/schema-record/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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/schema-record/babel.config.js b/packages/schema-record/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/schema-record/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/schema-record/babel.config.mjs b/packages/schema-record/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/schema-record/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/schema-record/eslint.config.mjs b/packages/schema-record/eslint.config.mjs new file mode 100644 index 00000000000..3b45156a9d4 --- /dev/null +++ b/packages/schema-record/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: [], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/schema-record/package.json b/packages/schema-record/package.json index d5a2b0495e2..c55d9c1b673 100644 --- a/packages/schema-record/package.json +++ b/packages/schema-record/package.json @@ -13,21 +13,19 @@ "license": "MIT", "author": "", "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:runtime": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "build:types": "tsc --build", - "_build": "bun run build:runtime && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, "files": [ - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "NCC-1701-a.svg", @@ -37,18 +35,16 @@ "exports": { "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "peerDependencies": { + "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", - "@warp-drive/core-types": "workspace:0.0.0-alpha.50", - "@ember-data/tracking": "workspace:5.4.0-alpha.64" + "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50" }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/request": { "injected": true }, @@ -63,47 +59,39 @@ }, "@ember/string": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember/edition-utils": "^1.2.0", "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-cli-babel": "^8.2.0" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", - "@embroider/addon-dev": "^4.3.1", + "@ember/string": "^3.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:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0", - "@ember/string": "^3.1.1" + "vite": "^5.2.11" }, "ember": { "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/schema-record/rollup.config.mjs b/packages/schema-record/rollup.config.mjs deleted file mode 100644 index a17ff14a021..00000000000 --- a/packages/schema-record/rollup.config.mjs +++ /dev/null @@ -1,33 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external(['@embroider/macros', '@ember/debug']), - - 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(['hooks.js', 'index.js', 'record.js', 'schema.js', 'managed-array.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/schema-record/src/-base-fields.ts b/packages/schema-record/src/-base-fields.ts deleted file mode 100644 index 0e6b8047b03..00000000000 --- a/packages/schema-record/src/-base-fields.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { assert } from '@ember/debug'; - -import { recordIdentifierFor } from '@ember-data/store'; -import type { OpaqueRecordInstance } from '@ember-data/store/-types/q/record-instance'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; -import type { StableRecordIdentifier } from '@warp-drive/core-types'; - -import { Identifier, type SchemaRecord } from './record'; -import type { Derivation, SchemaService } from './schema'; - -const Support = new WeakMap>(); - -export const SchemaRecordFields: FieldSchema[] = [ - { - type: '@constructor', - name: 'constructor', - kind: 'derived', - }, - { - name: 'id', - kind: '@id', - type: null, - }, - { - type: '@identity', - name: '$type', - kind: 'derived', - options: { key: 'type' }, - }, -]; - -const _constructor: Derivation = function (record) { - let state = Support.get(record as WeakKey); - if (!state) { - state = {}; - Support.set(record as WeakKey, state); - } - - return (state._constructor = state._constructor || { - name: `SchemaRecord<${recordIdentifierFor(record).type}>`, - get modelName() { - throw new Error('Cannot access record.constructor.modelName on non-Legacy Schema Records.'); - }, - }); -}; - -export function withFields(fields: FieldSchema[]) { - fields.push(...SchemaRecordFields); - return fields; -} - -export function fromIdentity(record: SchemaRecord, options: null, key: string): asserts options; -export function fromIdentity(record: SchemaRecord, options: { key: 'lid' }, key: string): string; -export function fromIdentity(record: SchemaRecord, options: { key: 'type' }, key: string): string; -export function fromIdentity(record: SchemaRecord, options: { key: 'id' }, key: string): string | null; -export function fromIdentity(record: SchemaRecord, options: { key: '^' }, key: string): StableRecordIdentifier; -export function fromIdentity( - record: SchemaRecord, - options: { key: 'id' | 'lid' | 'type' | '^' } | null, - key: string -): StableRecordIdentifier | string | null { - const identifier = record[Identifier]; - assert(`Cannot compute @identity for a record without an identifier`, identifier); - assert( - `Expected to receive a key to compute @identity, but got ${String(options)}`, - options?.key && ['lid', 'id', 'type', '^'].includes(options.key) - ); - - return options.key === '^' ? identifier : identifier[options.key]; -} - -export function registerDerivations(schema: SchemaService) { - schema.registerDerivation( - '@identity', - fromIdentity as Derivation - ); - schema.registerDerivation('@constructor', _constructor); -} diff --git a/packages/schema-record/src/hooks.ts b/packages/schema-record/src/hooks.ts index 4abe43b255a..b0f1e80d5f5 100644 --- a/packages/schema-record/src/hooks.ts +++ b/packages/schema-record/src/hooks.ts @@ -1,8 +1,9 @@ import type Store from '@ember-data/store'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import { Destroy, Editable, Legacy, SchemaRecord } from './record'; +import { SchemaRecord } from './record'; import type { SchemaService } from './schema'; +import { Destroy, Editable, Legacy } from './symbols'; export function instantiateRecord( store: Store, diff --git a/packages/schema-record/src/managed-array.ts b/packages/schema-record/src/managed-array.ts index 32977ef5bc3..c6b4c93e9ed 100644 --- a/packages/schema-record/src/managed-array.ts +++ b/packages/schema-record/src/managed-array.ts @@ -1,21 +1,16 @@ -import { assert } from '@ember/debug'; - import type Store from '@ember-data/store'; -import type { OpaqueRecordInstance } from '@ember-data/store/-types/q/record-instance'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; import type { Signal } from '@ember-data/tracking/-private'; import { addToTransaction, createSignal, subscribe } from '@ember-data/tracking/-private'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { ArrayValue, Value } from '@warp-drive/core-types/json/raw'; +import type { OpaqueRecordInstance } from '@warp-drive/core-types/record'; +import type { ArrayField } from '@warp-drive/core-types/schema/fields'; import type { SchemaRecord } from './record'; import type { SchemaService } from './schema'; - -export const SOURCE = Symbol('#source'); -export const MUTATE = Symbol('#update'); -export const ARRAY_SIGNAL = Symbol('#signal'); -export const NOTIFY = Symbol('#notify'); +import { ARRAY_SIGNAL, MUTATE, SOURCE } from './symbols'; export function notifyArray(arr: ManagedArray) { addToTransaction(arr[ARRAY_SIGNAL]); @@ -119,7 +114,7 @@ export class ManagedArray { store: Store, schema: SchemaService, cache: Cache, - field: FieldSchema, + field: ArrayField, data: unknown[], address: StableRecordIdentifier, key: string, @@ -167,7 +162,7 @@ export class ManagedArray { if (!transaction) { subscribe(_SIGNAL); } - if (field.type !== null) { + if (field.type) { const transform = schema.transforms.get(field.type); if (!transform) { throw new Error(`No '${field.type}' transform defined for use by ${address.type}.${String(prop)}`); @@ -226,7 +221,7 @@ export class ManagedArray { const reflect = Reflect.set(target, prop, value, receiver); if (reflect) { - if (field.type === null) { + if (!field.type) { cache.setAttr(self.address, self.key, self[SOURCE] as Value); _SIGNAL.shouldReset = true; return true; diff --git a/packages/schema-record/src/managed-object.ts b/packages/schema-record/src/managed-object.ts index a6ad58dc49a..b68fb2a0edc 100644 --- a/packages/schema-record/src/managed-object.ts +++ b/packages/schema-record/src/managed-object.ts @@ -1,18 +1,14 @@ import type Store from '@ember-data/store'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; import type { Signal } from '@ember-data/tracking/-private'; import { addToTransaction, createSignal, subscribe } from '@ember-data/tracking/-private'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { ObjectValue, Value } from '@warp-drive/core-types/json/raw'; +import type { ObjectField } from '@warp-drive/core-types/schema/fields'; import type { SchemaRecord } from './record'; import type { SchemaService } from './schema'; - -export const SOURCE = Symbol('#source'); -export const MUTATE = Symbol('#update'); -export const OBJECT_SIGNAL = Symbol('#signal'); -export const NOTIFY = Symbol('#notify'); +import { MUTATE, OBJECT_SIGNAL, SOURCE } from './symbols'; export function notifyObject(obj: ManagedObject) { addToTransaction(obj[OBJECT_SIGNAL]); @@ -41,7 +37,7 @@ export class ManagedObject { store: Store, schema: SchemaService, cache: Cache, - field: FieldSchema, + field: ObjectField, data: object, address: StableRecordIdentifier, key: string, @@ -78,7 +74,7 @@ export class ManagedObject { _SIGNAL.shouldReset = false; let newData = cache.getAttr(self.address, self.key); if (newData && newData !== self[SOURCE]) { - if (field.type !== null) { + if (field.type) { const transform = schema.transforms.get(field.type); if (!transform) { throw new Error(`No '${field.type}' transform defined for use by ${address.type}.${String(prop)}`); @@ -118,7 +114,7 @@ export class ManagedObject { const reflect = Reflect.set(target, prop, value, receiver); if (reflect) { - if (field.type === null) { + if (!field.type) { cache.setAttr(self.address, self.key, self[SOURCE] as Value); _SIGNAL.shouldReset = true; return true; diff --git a/packages/schema-record/src/record.ts b/packages/schema-record/src/record.ts index 83014ac95c0..a4c2eb5e765 100644 --- a/packages/schema-record/src/record.ts +++ b/packages/schema-record/src/record.ts @@ -1,10 +1,6 @@ -import { assert } from '@ember/debug'; - import type { Future } from '@ember-data/request'; import type Store from '@ember-data/store'; -import type { StoreRequestInput } from '@ember-data/store/-private/cache-handler'; -import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { NotificationType, StoreRequestInput } from '@ember-data/store'; import { addToTransaction, defineSignal, @@ -15,32 +11,40 @@ import { Signals, } from '@ember-data/tracking/-private'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import type { Cache } from '@warp-drive/core-types/cache'; import type { ResourceRelationship as SingleResourceRelationship } from '@warp-drive/core-types/cache/relationship'; import type { ArrayValue, ObjectValue, Value } from '@warp-drive/core-types/json/raw'; import { STRUCTURED } from '@warp-drive/core-types/request'; -import type { Link, Links } from '@warp-drive/core-types/spec/raw'; +import type { + ArrayField, + DerivedField, + FieldSchema, + GenericField, + LocalField, + ObjectField, +} from '@warp-drive/core-types/schema/fields'; +import type { Link, Links } from '@warp-drive/core-types/spec/json-api-raw'; import { RecordStore } from '@warp-drive/core-types/symbols'; -import { ARRAY_SIGNAL, ManagedArray } from './managed-array'; -import { ManagedObject, OBJECT_SIGNAL } from './managed-object'; +import { ManagedArray } from './managed-array'; +import { ManagedObject } from './managed-object'; import type { SchemaService } from './schema'; +import { ARRAY_SIGNAL, Checkout, Destroy, Editable, Identifier, Legacy, OBJECT_SIGNAL, Parent } from './symbols'; -export const Destroy = Symbol('Destroy'); -export const Identifier = Symbol('Identifier'); -export const Editable = Symbol('Editable'); -export const Parent = Symbol('Parent'); -export const Checkout = Symbol('Checkout'); -export const Legacy = Symbol('Legacy'); +export { Editable, Legacy } from './symbols'; +const IgnoredGlobalFields = new Set(['then', STRUCTURED]); +const symbolList = [Destroy, RecordStore, Identifier, Editable, Parent, Checkout, Legacy, Signals]; +const RecordSymbols = new Set(symbolList); -const IgnoredGlobalFields = new Set(['then', STRUCTURED]); -const RecordSymbols = new Set([Destroy, RecordStore, Identifier, Editable, Parent, Checkout, Legacy, Signals]); +type RecordSymbol = (typeof symbolList)[number]; -const ManagedArrayMap = new Map>(); -const ManagedObjectMap = new Map>(); +const ManagedArrayMap = getOrSetGlobal('ManagedArrayMap', new Map>()); +const ManagedObjectMap = getOrSetGlobal('ManagedObjectMap', new Map>()); -function computeLocal(record: typeof Proxy, field: FieldSchema, prop: string): unknown { +function computeLocal(record: typeof Proxy, field: LocalField, prop: string): unknown { let signal = peekSignal(record, prop); if (!signal) { @@ -70,11 +74,11 @@ function computeField( cache: Cache, record: SchemaRecord, identifier: StableRecordIdentifier, - field: FieldSchema, + field: GenericField, prop: string ): unknown { const rawValue = cache.getAttr(identifier, prop); - if (field.type === null) { + if (!field.type) { return rawValue; } const transform = schema.transforms.get(field.type); @@ -90,7 +94,7 @@ function computeArray( cache: Cache, record: SchemaRecord, identifier: StableRecordIdentifier, - field: FieldSchema, + field: ArrayField, prop: string ) { // the thing we hand out needs to know its owner and path in a private manner @@ -127,7 +131,7 @@ function computeObject( cache: Cache, record: SchemaRecord, identifier: StableRecordIdentifier, - field: FieldSchema, + field: ObjectField, prop: string ) { const managedObjectMapForRecord = ManagedObjectMap.get(record); @@ -143,7 +147,7 @@ function computeObject( return null; } if (field.kind === 'object') { - if (field.type !== null) { + if (field.type) { const transform = schema.transforms.get(field.type); if (!transform) { throw new Error(`No '${field.type}' transform defined for use by ${identifier.type}.${String(prop)}`); @@ -169,10 +173,10 @@ function computeDerivation( schema: SchemaService, record: SchemaRecord, identifier: StableRecordIdentifier, - field: FieldSchema, + field: DerivedField, prop: string ): unknown { - if (field.type === null) { + if (!field.type) { throw new Error(`The schema for ${identifier.type}.${String(prop)} is missing the type of the derivation`); } @@ -324,7 +328,7 @@ export class SchemaRecord { return new Proxy(this, { get(target: SchemaRecord, prop: string | number | symbol, receiver: typeof Proxy) { - if (RecordSymbols.has(prop as symbol)) { + if (RecordSymbols.has(prop as RecordSymbol)) { return target[prop as keyof SchemaRecord]; } @@ -338,7 +342,7 @@ export class SchemaRecord { const field = fields.get(prop as string); if (!field) { - if (IgnoredGlobalFields.has(prop as string | symbol)) { + if (IgnoredGlobalFields.has(prop as string)) { return undefined; } throw new Error(`No field named ${String(prop)} on ${identifier.type}`); @@ -417,7 +421,7 @@ export class SchemaRecord { return true; } case 'field': { - if (field.type === null) { + if (!field.type) { cache.setAttr(identifier, prop as string, value as Value); return true; } @@ -436,7 +440,7 @@ export class SchemaRecord { return true; } case 'array': { - if (field.type === null) { + if (!field.type) { cache.setAttr(identifier, prop as string, (value as ArrayValue)?.slice()); const peeked = peekManagedArray(self, field); if (peeked) { @@ -466,7 +470,7 @@ export class SchemaRecord { return true; } case 'object': { - if (field.type === null) { + if (!field.type) { let newValue = value; if (value !== null) { newValue = { ...(value as ObjectValue) }; diff --git a/packages/schema-record/src/schema.ts b/packages/schema-record/src/schema.ts index 5a3ef0f9fdc..9e7f1f8ab09 100644 --- a/packages/schema-record/src/schema.ts +++ b/packages/schema-record/src/schema.ts @@ -1,15 +1,83 @@ -import { assert } from '@ember/debug'; - -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import { recordIdentifierFor } from '@ember-data/store'; import { createCache, getValue } from '@ember-data/tracking'; -import { type Signal, Signals } from '@ember-data/tracking/-private'; +import type { Signal } from '@ember-data/tracking/-private'; +import { Signals } from '@ember-data/tracking/-private'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import type { Value } from '@warp-drive/core-types/json/raw'; -import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { OpaqueRecordInstance } from '@warp-drive/core-types/record'; +import type { FieldSchema, LegacyAttributeField, LegacyRelationshipSchema } from '@warp-drive/core-types/schema/fields'; import type { SchemaRecord } from './record'; +import { Identifier } from './symbols'; + +const Support = getOrSetGlobal('Support', new WeakMap>()); + +export const SchemaRecordFields: FieldSchema[] = [ + { + type: '@constructor', + name: 'constructor', + kind: 'derived', + }, + { + name: 'id', + kind: '@id', + }, + { + type: '@identity', + name: '$type', + kind: 'derived', + options: { key: 'type' }, + }, +]; + +const _constructor: Derivation = function (record) { + let state = Support.get(record as WeakKey); + if (!state) { + state = {}; + Support.set(record as WeakKey, state); + } -export { withFields, registerDerivations } from './-base-fields'; + return (state._constructor = state._constructor || { + name: `SchemaRecord<${recordIdentifierFor(record).type}>`, + get modelName() { + throw new Error('Cannot access record.constructor.modelName on non-Legacy Schema Records.'); + }, + }); +}; + +export function withFields(fields: FieldSchema[]) { + fields.push(...SchemaRecordFields); + return fields; +} + +export function fromIdentity(record: SchemaRecord, options: null, key: string): asserts options; +export function fromIdentity(record: SchemaRecord, options: { key: 'lid' } | { key: 'type' }, key: string): string; +export function fromIdentity(record: SchemaRecord, options: { key: 'id' }, key: string): string | null; +export function fromIdentity(record: SchemaRecord, options: { key: '^' }, key: string): StableRecordIdentifier; +export function fromIdentity( + record: SchemaRecord, + options: { key: 'id' | 'lid' | 'type' | '^' } | null, + key: string +): StableRecordIdentifier | string | null { + const identifier = record[Identifier]; + assert(`Cannot compute @identity for a record without an identifier`, identifier); + assert( + `Expected to receive a key to compute @identity, but got ${String(options)}`, + options?.key && ['lid', 'id', 'type', '^'].includes(options.key) + ); + + return options.key === '^' ? identifier : identifier[options.key]; +} + +export function registerDerivations(schema: SchemaService) { + schema.registerDerivation( + '@identity', + fromIdentity as Derivation + ); + schema.registerDerivation('@constructor', _constructor); +} /** * The full schema for a resource @@ -24,13 +92,13 @@ type FieldSpec = { * from relationship lookup * @internal */ - attributes: Record; + attributes: Record; /** * legacy schema service separated attribute * from relationship lookup * @internal */ - relationships: Record; + relationships: Record; /** * new schema service is fields based * @internal @@ -129,11 +197,11 @@ export class SchemaService { // const attr = Object.assign({}, field, { kind: 'attribute' }) as AttributeSchema; // fieldSpec.attributes[attr.name] = attr; } else if (field.kind === 'attribute') { - fieldSpec.attributes[field.name] = field as AttributeSchema; + fieldSpec.attributes[field.name] = field; } else if (field.kind === 'resource' || field.kind === 'collection') { const relSchema = Object.assign({}, field, { kind: field.kind === 'resource' ? 'belongsTo' : 'hasMany', - }) as unknown as RelationshipSchema; + }) as unknown as LegacyRelationshipSchema; fieldSpec.relationships[field.name] = relSchema; } else if ( field.kind !== 'derived' && diff --git a/packages/schema-record/src/symbols.ts b/packages/schema-record/src/symbols.ts new file mode 100644 index 00000000000..76cbb737656 --- /dev/null +++ b/packages/schema-record/src/symbols.ts @@ -0,0 +1,45 @@ +/////////////////// +///// WARNING ///// +/////////////////// + +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; + +// Great, got your attention with that warning didn't we? +// Good. Here's the deal: typescript treats symbols as unique types. +// If by accident a module creating a symbol is processed more than +// once, the symbol will be different in each processing. This will +// cause a type error. +// It could also cause a runtime error if the symbol is used innapropriately. +// However, this case is extremely hard to hit and would require other things +// to go wrong first. +// +// So, why do the warning? And why do we lie about the types of the symbols? +// +// Because we intentionally create multiple copies of them within the types +// at build time. This is because we rollup our d.ts files in order to give +// our consumers a better experience. +// +// However, no tool today supports rolling up d.ts files with multiple entry +// points correctly. The tool we use currently (vite-plugin-dts) uses @microsoft/api-extractor +// which creates a fully unique stand-alone types file per-entry-point. Thus +// every entry point that uses one of these symbols somewhere will have accidentally +// created a new symbol type. +// +// This cast allows us to rollup these types using this tool while not encountering +// the unique symbol type issue. +// +// Note that none of these symbols are part of the public API, these are used for +// debugging DX and as a safe way to provide an intimate contract on public objects. + +export const SOURCE = getOrSetGlobal('SOURCE', Symbol('#source')); +export const MUTATE = getOrSetGlobal('MUTATE', Symbol('#update')); +export const ARRAY_SIGNAL = getOrSetGlobal('ARRAY_SIGNAL', Symbol('#array-signal')); +export const OBJECT_SIGNAL = getOrSetGlobal('OBJECT_SIGNAL', Symbol('#object-signal')); +export const NOTIFY = getOrSetGlobal('NOTIFY', Symbol('#notify')); + +export const Destroy = getOrSetGlobal('Destroy', Symbol('Destroy')); +export const Identifier = getOrSetGlobal('Identifier', Symbol('Identifier')); +export const Editable = getOrSetGlobal('Editable', Symbol('Editable')); +export const Parent = getOrSetGlobal('Parent', Symbol('Parent')); +export const Checkout = getOrSetGlobal('Checkout', Symbol('Checkout')); +export const Legacy = getOrSetGlobal('Legacy', Symbol('Legacy')); diff --git a/packages/schema-record/tsconfig.json b/packages/schema-record/tsconfig.json index 015d9a9fbf0..b912eabffb6 100644 --- a/packages/schema-record/tsconfig.json +++ b/packages/schema-record/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,41 +7,55 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, + "emitDeclarationOnly": true, "experimentalDecorators": true, - // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, - "emitDeclarationOnly": true, "declarationDir": "unstable-preview-types", "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../request" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../request" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } ] } diff --git a/packages/schema-record/vite.config.mjs b/packages/schema-record/vite.config.mjs new file mode 100644 index 00000000000..1fe014056bc --- /dev/null +++ b/packages/schema-record/vite.config.mjs @@ -0,0 +1,13 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = []; + +export const entryPoints = ['src/hooks.ts', 'src/record.ts', 'src/schema.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/schema/.npmignore b/packages/schema/.npmignore deleted file mode 100644 index 07e6e472cc7..00000000000 --- a/packages/schema/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/packages/schema/package.json b/packages/schema/package.json index 1b59fc6eedd..d153423e3ef 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -39,16 +39,10 @@ "peerDependencies": {}, "dependencies": {}, "devDependencies": { - "bun-types": "1.1.3", - "chalk": "^5.3.0", - "@babel/parser": "^7.24.4", - "@babel/traverse": "^7.24.1", - "@types/babel__parser": "^7.1.1", - "@types/babel__traverse": "^7.20.5", - "typescript": "^5.4.5" + "bun-types": "1.1.3" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/schema/tsconfig.json b/packages/schema/tsconfig.json index 59f2eccae5e..e0a82179451 100644 --- a/packages/schema/tsconfig.json +++ b/packages/schema/tsconfig.json @@ -7,13 +7,14 @@ "moduleDetection": "force", "allowImportingTsExtensions": true, "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": true, + "emitDeclarationOnly": true, "types": ["bun-types"] } } diff --git a/packages/serializer/.eslintrc.cjs b/packages/serializer/.eslintrc.cjs deleted file mode 100644 index bf7106fbe2a..00000000000 --- a/packages/serializer/.eslintrc.cjs +++ /dev/null @@ -1,34 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/serializer/.npmignore b/packages/serializer/.npmignore deleted file mode 100644 index e4bce62a5ec..00000000000 --- a/packages/serializer/.npmignore +++ /dev/null @@ -1,40 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# ember-data -/node-tests - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json \ No newline at end of file diff --git a/packages/serializer/addon-main.cjs b/packages/serializer/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/serializer/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/serializer/addon-main.js b/packages/serializer/addon-main.js deleted file mode 100644 index 16a41526809..00000000000 --- a/packages/serializer/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - 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/serializer/babel.config.js b/packages/serializer/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/serializer/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/serializer/babel.config.mjs b/packages/serializer/babel.config.mjs new file mode 100644 index 00000000000..c23b859273f --- /dev/null +++ b/packages/serializer/babel.config.mjs @@ -0,0 +1,12 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ['module:decorator-transforms', { runtime: { import: 'decorator-transforms/runtime' } }], + ], +}; diff --git a/packages/serializer/blueprints/serializer-test/index.js b/packages/serializer/blueprints/serializer-test/index.js index ad806f42ed0..a6b662a9a86 100644 --- a/packages/serializer/blueprints/serializer-test/index.js +++ b/packages/serializer/blueprints/serializer-test/index.js @@ -1,15 +1,15 @@ const path = require('path'); const testInfo = require('ember-cli-test-info'); -const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); -const modulePrefixForProject = require('@ember-data/private-build-infra/src/utilities/module-prefix-for-project'); +const { dasherize } = require('ember-cli-string-utils'); -module.exports = useTestFrameworkDetector({ - description: 'Generates a serializer unit test.', +module.exports = { + description: 'Generates an EmberData Serializer unit test', + supportsAddon() { return false; }, root: __dirname, - fileMapTokens(options) { + fileMapTokens() { return { __root__() { return 'tests'; @@ -21,9 +21,15 @@ module.exports = useTestFrameworkDetector({ }, locals(options) { + const modulePrefix = dasherize(options.project.config().modulePrefix); return { friendlyTestDescription: testInfo.description(options.entity.name, 'Unit', 'Serializer'), - modulePrefix: modulePrefixForProject(options.project), + modulePrefix, }; }, -}); + + filesPath() { + return path.join(__dirname, 'qunit-files') + } +}; + diff --git a/packages/serializer/blueprints/serializer-test/qunit-files/__root__/__path__/__test__.js b/packages/serializer/blueprints/serializer-test/qunit-files/__root__/__path__/__test__.js index 4524c134cfe..9997d928613 100644 --- a/packages/serializer/blueprints/serializer-test/qunit-files/__root__/__path__/__test__.js +++ b/packages/serializer/blueprints/serializer-test/qunit-files/__root__/__path__/__test__.js @@ -1,24 +1,23 @@ -import { module, test } from 'qunit'; - import { setupTest } from '<%= modulePrefix %>/tests/helpers'; +import { module, test } from 'qunit'; module('<%= friendlyTestDescription %>', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('<%= dasherizedModuleName %>'); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('<%= dasherizedModuleName %>'); - assert.ok(serializer); + assert.ok(serializer, 'serializer exists'); }); test('it serializes records', function (assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('<%= dasherizedModuleName %>', {}); + const store = this.owner.lookup('service:store'); + const record = store.createRecord('<%= dasherizedModuleName %>', {}); - let serializedRecord = record.serialize(); + const serializedRecord = record.serialize(); - assert.ok(serializedRecord); + assert.ok(serializedRecord, 'it serializes records'); }); }); diff --git a/packages/serializer/blueprints/serializer/index.js b/packages/serializer/blueprints/serializer/index.js index 1bd401b7eb5..89c418582b3 100644 --- a/packages/serializer/blueprints/serializer/index.js +++ b/packages/serializer/blueprints/serializer/index.js @@ -1,14 +1,80 @@ -const extendFromApplicationEntity = require('@ember-data/private-build-infra/src/utilities/extend-from-application-entity'); -const useEditionDetector = require('@ember-data/private-build-infra/src/utilities/edition-detector'); +const path = require('path'); +const fs = require('fs'); -module.exports = useEditionDetector({ - description: 'Generates an ember-data serializer.', +const stringUtil = require('ember-cli-string-utils'); +const pathUtil = require('ember-cli-path-utils'); + +const { has } = require('@ember/edition-utils'); + +module.exports = { + description: 'Generates an ember-data Serializer.', availableOptions: [{ name: 'base-class', type: String }], root: __dirname, + filesPath() { + let hasOctane = has('octane'); + if (hasOctane && process.env.EMBER_EDITION === 'classic') { + hasOctane = false; //forcible override + } + let rootPath = hasOctane ? 'native-files' : 'files'; + return path.join(__dirname, rootPath); + }, + locals(options) { return extendFromApplicationEntity('serializer', 'JSONAPISerializer', options); }, -}); +}; + +function extendFromApplicationEntity(type, baseClass, options) { + let isAddon = options.inRepoAddon || options.project.isEmberCLIAddon(); + + let entityName = options.entity.name; + let relativePath = pathUtil.getRelativePath(options.entity.name); + + if (options.pod && options.podPath) { + relativePath = pathUtil.getRelativePath(options.podPath + options.entity.name); + } + + let applicationEntityPath = path.join(options.project.root, 'app', `${type}s`, 'application.js'); + + let hasApplicationEntity = fs.existsSync(applicationEntityPath); + if (!isAddon && !options.baseClass && entityName !== 'application' && hasApplicationEntity) { + options.baseClass = 'application'; + } + + if (options.baseClass === entityName) { + throw new Error( + stringUtil.classify(type) + + 's cannot extend from themself. To resolve this, remove the `--base-class` option or change to a different base-class.' + ); + } + + let importStatement; + + if (options.baseClass) { + let baseClassPath = options.baseClass; + baseClass = stringUtil.classify(baseClassPath.replace('/', '-')); + baseClass = baseClass + stringUtil.classify(type); + + importStatement = `import ${baseClass} from '${relativePath}${baseClassPath}';`; + } else { + let baseClassPath = `@ember-data/${type}`; + + if (baseClass.startsWith('JSONAPI')) { + baseClassPath += '/json-api'; + } + + if (baseClass.startsWith('REST')) { + baseClassPath += '/rest'; + } + + importStatement = `import ${baseClass} from '${baseClassPath}';`; + } + + return { + importStatement, + baseClass, + }; +} diff --git a/packages/serializer/blueprints/transform-test/index.js b/packages/serializer/blueprints/transform-test/index.js index 6d90912f4ee..59a47820b03 100644 --- a/packages/serializer/blueprints/transform-test/index.js +++ b/packages/serializer/blueprints/transform-test/index.js @@ -1,15 +1,15 @@ const path = require('path'); const testInfo = require('ember-cli-test-info'); -const useTestFrameworkDetector = require('@ember-data/private-build-infra/src/utilities/test-framework-detector'); -const modulePrefixForProject = require('@ember-data/private-build-infra/src/utilities/module-prefix-for-project'); +const { dasherize } = require('ember-cli-string-utils'); -module.exports = useTestFrameworkDetector({ - description: 'Generates a transform unit test.', +module.exports = { + description: 'Generates an EmberData Transform unit test', + supportsAddon() { return false; }, root: __dirname, - fileMapTokens(options) { + fileMapTokens() { return { __root__() { return 'tests'; @@ -21,9 +21,15 @@ module.exports = useTestFrameworkDetector({ }, locals(options) { + const modulePrefix = dasherize(options.project.config().modulePrefix); return { friendlyTestDescription: testInfo.description(options.entity.name, 'Unit', 'Transform'), - modulePrefix: modulePrefixForProject(options.project), + modulePrefix, }; }, -}); + + filesPath() { + return path.join(__dirname, 'qunit-files') + } +}; + diff --git a/packages/serializer/blueprints/transform-test/qunit-files/__root__/__path__/__test__.js b/packages/serializer/blueprints/transform-test/qunit-files/__root__/__path__/__test__.js index 5010aebee5a..334f2612774 100644 --- a/packages/serializer/blueprints/transform-test/qunit-files/__root__/__path__/__test__.js +++ b/packages/serializer/blueprints/transform-test/qunit-files/__root__/__path__/__test__.js @@ -1,13 +1,12 @@ -import { module, test } from 'qunit'; - import { setupTest } from '<%= modulePrefix %>/tests/helpers'; +import { module, test } from 'qunit'; module('<%= friendlyTestDescription %>', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let transform = this.owner.lookup('transform:<%= dasherizedModuleName %>'); - assert.ok(transform); + const transform = this.owner.lookup('transform:<%= dasherizedModuleName %>'); + assert.ok(transform, 'transform exists'); }); }); diff --git a/packages/serializer/blueprints/transform/index.js b/packages/serializer/blueprints/transform/index.js index f3a140349ec..e0eb47ed08e 100644 --- a/packages/serializer/blueprints/transform/index.js +++ b/packages/serializer/blueprints/transform/index.js @@ -1,7 +1,17 @@ -const useEditionDetector = require('@ember-data/private-build-infra/src/utilities/edition-detector'); +const path = require('path'); -module.exports = useEditionDetector({ - description: 'Generates an ember-data value transform.', +const { has } = require('@ember/edition-utils'); +module.exports = { + description: 'Generates an ember-data Transform.', root: __dirname, -}); + + filesPath() { + let hasOctane = has('octane'); + if (hasOctane && process.env.EMBER_EDITION === 'classic') { + hasOctane = false; //forcible override + } + let rootPath = hasOctane ? 'native-files' : 'files'; + return path.join(__dirname, rootPath); + }, +}; diff --git a/packages/serializer/eslint.config.mjs b/packages/serializer/eslint.config.mjs new file mode 100644 index 00000000000..cdf146015c8 --- /dev/null +++ b/packages/serializer/eslint.config.mjs @@ -0,0 +1,40 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; + +const AllowedImports = [ + 'ember-inflector', + '@ember/application', + '@ember/service', + '@ember/debug', + '@ember/object', + '@ember/string', + '@ember/object/mixin', +]; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js) ================ + js.browser({ + srcDirs: ['src'], + allowedImports: AllowedImports, + }), + + // browser (js/ts) ================ + typescript.browser({ + files: ['**/*.ts', '**/*.gts'], + srcDirs: ['src'], + allowedImports: AllowedImports, + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/serializer/package.json b/packages/serializer/package.json index 7c771188a58..9bcedcf7f6f 100644 --- a/packages/serializer/package.json +++ b/packages/serializer/package.json @@ -14,23 +14,21 @@ "author": "", "directories": {}, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:types": "tsc --build", - "build:client": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "_build": "bun run build:client && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, "files": [ "unstable-preview-types", "blueprints", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -39,23 +37,21 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "peerDependencies": { "@ember/string": "^3.1.1", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", "ember-inflector": "^4.0.2" }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@warp-drive/core-types": { "injected": true }, @@ -76,46 +72,43 @@ }, "@ember-data/legacy-compat": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@embroider/macros": "^1.15.1", - "ember-cli-babel": "^8.2.0", - "ember-cli-test-info": "^1.0.0" + "ember-cli-test-info": "^1.0.0", + "ember-cli-string-utils": "^1.1.0", + "ember-cli-path-utils": "^1.0.0", + "@ember/edition-utils": "1.2.0", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", + "@ember/test-waiters": "^3.1.0", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "decorator-transforms": "^1.1.0", "ember-inflector": "^4.0.2", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0" + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/packages/serializer/rollup.config.mjs b/packages/serializer/rollup.config.mjs deleted file mode 100644 index 4b47deb82c4..00000000000 --- a/packages/serializer/rollup.config.mjs +++ /dev/null @@ -1,42 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external([ - '@embroider/macros', - '@ember/service', - '@ember/object', - '@ember/application', - '@ember/debug', - '@ember/polyfills', - '@ember/array', - '@ember/object/mixin', - ]), - - 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', 'transform.js', 'json.js', 'json-api.js', 'rest.js', '-private.js']), - - nodeResolve({ extensions: ['.ts', '.js'] }), - babel({ - extensions: ['.ts', '.js'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/serializer/src/-private.ts b/packages/serializer/src/-private.ts deleted file mode 100644 index c9c38648440..00000000000 --- a/packages/serializer/src/-private.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - @module @ember-data/serializer -*/ - -export { default as EmbeddedRecordsMixin } from './-private/embedded-records-mixin'; - -export { default as Transform } from './-private/transforms/transform'; -export { default as BooleanTransform } from './-private/transforms/boolean'; -export { default as DateTransform } from './-private/transforms/date'; -export { default as NumberTransform } from './-private/transforms/number'; -export { default as StringTransform } from './-private/transforms/string'; -export { coerceId } from './-private/utils'; diff --git a/packages/serializer/src/-private/embedded-records-mixin.js b/packages/serializer/src/-private/embedded-records-mixin.js index cbfe8caa09f..8f1c8b0eec1 100644 --- a/packages/serializer/src/-private/embedded-records-mixin.js +++ b/packages/serializer/src/-private/embedded-records-mixin.js @@ -100,7 +100,7 @@ import { camelize } from '@ember/string'; @class EmbeddedRecordsMixin @public */ -export default Mixin.create({ +export const EmbeddedRecordsMixin = Mixin.create({ /** Normalize the record and recursively normalize/extract all the embedded records while pushing them into the store as they are encountered diff --git a/packages/serializer/src/-private/transforms/boolean.ts b/packages/serializer/src/-private/transforms/boolean.ts index 2efdae2bb10..8164a33a7f1 100644 --- a/packages/serializer/src/-private/transforms/boolean.ts +++ b/packages/serializer/src/-private/transforms/boolean.ts @@ -39,7 +39,7 @@ import { TransformName } from '@warp-drive/core-types/symbols'; @class BooleanTransform @public */ -export default class BooleanTransform { +export class BooleanTransform { deserialize(serialized: boolean | null | number | string, options?: { allowNull?: boolean }): boolean | null { if ((serialized === null || serialized === undefined) && options?.allowNull === true) { return null; diff --git a/packages/serializer/src/-private/transforms/date.ts b/packages/serializer/src/-private/transforms/date.ts index b4f01870330..6b04c461797 100644 --- a/packages/serializer/src/-private/transforms/date.ts +++ b/packages/serializer/src/-private/transforms/date.ts @@ -25,7 +25,7 @@ import { TransformName } from '@warp-drive/core-types/symbols'; @public */ -export default class DateTransform { +export class DateTransform { deserialize(serialized: string | number | null, _options?: Record) { if (typeof serialized === 'string') { let offset = serialized.indexOf('+'); diff --git a/packages/serializer/src/-private/transforms/number.ts b/packages/serializer/src/-private/transforms/number.ts index 75cd6d52c57..9cce0d9524d 100644 --- a/packages/serializer/src/-private/transforms/number.ts +++ b/packages/serializer/src/-private/transforms/number.ts @@ -29,7 +29,7 @@ function isNumber(value: number) { @class NumberTransform @public */ -export default class NumberTransform { +export class NumberTransform { deserialize(serialized: string | number | null | undefined, _options?: Record): number | null { if (serialized === '' || serialized === null || serialized === undefined) { return null; diff --git a/packages/serializer/src/-private/transforms/string.ts b/packages/serializer/src/-private/transforms/string.ts index 9f35c828a1e..57af3e10b10 100644 --- a/packages/serializer/src/-private/transforms/string.ts +++ b/packages/serializer/src/-private/transforms/string.ts @@ -25,7 +25,7 @@ import { TransformName } from '@warp-drive/core-types/symbols'; @class StringTransform @public */ -export default class StringTransform { +export class StringTransform { deserialize(serialized: unknown, _options?: Record): string | null { return !serialized && serialized !== '' ? null : String(serialized); } diff --git a/packages/serializer/src/-private/transforms/transform.ts b/packages/serializer/src/-private/transforms/transform.ts index eea309b1323..170bded3e1a 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 type { AttributeSchema } from '@warp-drive/core-types/schema'; +import type { LegacyAttributeField } from '@warp-drive/core-types/schema/fields'; /** The `Transform` class is used to serialize and deserialize model @@ -118,10 +118,8 @@ import type { AttributeSchema } from '@warp-drive/core-types/schema'; @param options hash of options passed to `attr` @return The deserialized value */ -interface Transform { - serialize(value: unknown, options: AttributeSchema['options']): unknown; - deserialize(value: unknown, options: AttributeSchema['options']): unknown; +export interface Transform { + serialize(value: unknown, options: LegacyAttributeField['options']): unknown; + deserialize(value: unknown, options: LegacyAttributeField['options']): unknown; } -const Transform = EmberObject; - -export default Transform; +export const Transform = EmberObject; diff --git a/packages/serializer/src/index.ts b/packages/serializer/src/index.ts index 3427886ccc0..ac177bb11eb 100644 --- a/packages/serializer/src/index.ts +++ b/packages/serializer/src/index.ts @@ -111,8 +111,8 @@ import EmberObject from '@ember/object'; import { inject as service } from '@ember/service'; import type Store from '@ember-data/store'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; -import type { EmptyResourceDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { ModelSchema } from '@ember-data/store/types'; +import type { EmptyResourceDocument, SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; /** > ⚠️ CAUTION you likely want the docs for [ Serializer](/ember-data/release/classes/%3CInterface%3E%20Serializer) diff --git a/packages/serializer/src/json-api.js b/packages/serializer/src/json-api.js index c96dbbcdead..b2cb29c2244 100644 --- a/packages/serializer/src/json-api.js +++ b/packages/serializer/src/json-api.js @@ -1,12 +1,13 @@ /** * @module @ember-data/serializer/json-api */ -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; import { dasherize } from '@ember/string'; import { pluralize, singularize } from 'ember-inflector'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import JSONSerializer from './json'; diff --git a/packages/serializer/src/json.js b/packages/serializer/src/json.js index 915926d1b42..da5b855198d 100644 --- a/packages/serializer/src/json.js +++ b/packages/serializer/src/json.js @@ -2,13 +2,15 @@ * @module @ember-data/serializer/json */ import { getOwner } from '@ember/application'; -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; import { dasherize } from '@ember/string'; import { singularize } from 'ember-inflector'; +import { assert } from '@warp-drive/build-config/macros'; + import Serializer from '.'; -import { coerceId } from './-private'; +import { coerceId } from './-private/utils'; const SOURCE_POINTER_REGEXP = /^\/?data\/(attributes|relationships)\/(.*)/; const SOURCE_POINTER_PRIMARY_REGEXP = /^\/?data/; diff --git a/packages/serializer/src/rest.js b/packages/serializer/src/rest.js index b499efea04a..c472c83d342 100644 --- a/packages/serializer/src/rest.js +++ b/packages/serializer/src/rest.js @@ -1,14 +1,15 @@ /** * @module @ember-data/serializer/rest */ -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; import { camelize, dasherize } from '@ember/string'; import { singularize } from 'ember-inflector'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; -import { coerceId } from './-private'; +import { coerceId } from './-private/utils'; import JSONSerializer from './json'; function makeArray(value) { @@ -813,6 +814,6 @@ if (DEBUG) { }); } -export { EmbeddedRecordsMixin } from './-private'; +export { EmbeddedRecordsMixin } from './-private/embedded-records-mixin'; export default RESTSerializer; diff --git a/packages/serializer/src/transform.ts b/packages/serializer/src/transform.ts index c661aae21cc..5585826c316 100644 --- a/packages/serializer/src/transform.ts +++ b/packages/serializer/src/transform.ts @@ -1,4 +1,8 @@ /** @module @ember-data/serializer */ -export { Transform as default, BooleanTransform, DateTransform, NumberTransform, StringTransform } from './-private'; +export { Transform as default } from './-private/transforms/transform'; +export { BooleanTransform } from './-private/transforms/boolean'; +export { DateTransform } from './-private/transforms/date'; +export { NumberTransform } from './-private/transforms/number'; +export { StringTransform } from './-private/transforms/string'; diff --git a/packages/serializer/tsconfig.json b/packages/serializer/tsconfig.json index f97e9895fce..31ce3b3201a 100644 --- a/packages/serializer/tsconfig.json +++ b/packages/serializer/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,6 +7,7 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, @@ -15,35 +15,53 @@ "forceConsistentCasingInFileNames": true, "experimentalDecorators": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "declarationDir": "unstable-preview-types", - "emitDeclarationOnly": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../legacy-compat/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, "references": [ - { "path": "../request" }, - { "path": "../store" }, - { "path": "../tracking" }, - { "path": "../core-types" } + { + "path": "../request" + }, + { + "path": "../store" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + }, + { + "path": "../legacy-compat" + } ] } diff --git a/packages/serializer/vite.config.mjs b/packages/serializer/vite.config.mjs new file mode 100644 index 00000000000..d6dd980d24b --- /dev/null +++ b/packages/serializer/vite.config.mjs @@ -0,0 +1,26 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@ember/service', + '@ember/object', + '@ember/application', + '@ember/debug', + '@ember/polyfills', + '@ember/array', + '@ember/object/mixin', +]; +export const entryPoints = [ + './src/index.ts', + './src/transform.ts', + './src/json.js', + './src/json-api.js', + './src/rest.js', +]; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/store/.eslintrc.cjs b/packages/store/.eslintrc.cjs deleted file mode 100644 index 24df7287ffe..00000000000 --- a/packages/store/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/store/.npmignore b/packages/store/.npmignore deleted file mode 100644 index fa012abdcb4..00000000000 --- a/packages/store/.npmignore +++ /dev/null @@ -1,37 +0,0 @@ -# compiled output -/dist/ -/dist/**/* -/tmp/ -/types/ -**/*.d.ts - -# dependencies -/bower_components/ - -# misc -/.bowerrc -/.editorconfig -/.ember-cli -/.env* -/.eslintignore -/.eslintrc.js -/.gitignore -/.template-lintrc.js -/.travis.yml -/.watchmanconfig -/bower.json -/config/ember-try.js -/CONTRIBUTING.md -/ember-cli-build.js -/testem.js -/tests/ -/yarn.lock -.gitkeep - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try - -# whitelist yuidoc's data.json for api docs generation -!/dist/docs/data.json \ No newline at end of file diff --git a/packages/store/addon-main.cjs b/packages/store/addon-main.cjs new file mode 100644 index 00000000000..25b3a963d42 --- /dev/null +++ b/packages/store/addon-main.cjs @@ -0,0 +1,5 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +module.exports = addonShim(__dirname); diff --git a/packages/store/addon-main.js b/packages/store/addon-main.js deleted file mode 100644 index d1246413dde..00000000000 --- a/packages/store/addon-main.js +++ /dev/null @@ -1,94 +0,0 @@ -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - ownConfig.compatWith = hostOptions.compatWith || null; - ownConfig.debug = debugOptions; - ownConfig.deprecations = Object.assign(DEPRECATIONS, ownConfig.deprecations || {}, hostOptions.deprecations || {}); - ownConfig.features = Object.assign({}, FEATURES, ownConfig.features || {}, hostOptions.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/store/babel.config.js b/packages/store/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/store/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/store/babel.config.mjs b/packages/store/babel.config.mjs new file mode 100644 index 00000000000..c23b859273f --- /dev/null +++ b/packages/store/babel.config.mjs @@ -0,0 +1,12 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ['module:decorator-transforms', { runtime: { import: 'decorator-transforms/runtime' } }], + ], +}; diff --git a/packages/store/eslint.config.mjs b/packages/store/eslint.config.mjs new file mode 100644 index 00000000000..ad826b1975b --- /dev/null +++ b/packages/store/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@ember/debug', '@ember/object', '@ember/string'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/store/package.json b/packages/store/package.json index c685a6e44ef..a00bf8cc077 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -14,8 +14,8 @@ "author": "Chris Thoburn ", "files": [ "unstable-preview-types", - "addon-main.js", - "addon", + "addon-main.cjs", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -24,30 +24,20 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:runtime": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "build:types": "tsc --build", - "_build": "bun run build:runtime && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" - }, - "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", - "@embroider/macros": "^1.15.1", - "ember-cli-babel": "^8.2.0" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/tracking": { "injected": true }, @@ -59,8 +49,16 @@ }, "@ember/string": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, + "dependencies": { + "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", + "ember-cli-babel": "^8.2.0" + }, "peerDependencies": { "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", @@ -68,42 +66,32 @@ "@warp-drive/core-types": "workspace:0.0.0-alpha.50" }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", "@ember/string": "^3.1.1", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "decorator-transforms": "^1.1.0", "ember-source": "~5.7.0", "expect-type": "^0.19.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0", - "webpack": "^5.91.0" + "vite": "^5.2.11" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" }, "packageManager": "pnpm@8.15.6", "ember-addon": { - "main": "addon-main.js", + "main": "addon-main.cjs", "type": "addon", "version": 1 }, diff --git a/packages/store/rollup.config.mjs b/packages/store/rollup.config.mjs deleted file mode 100644 index c1a48d6af45..00000000000 --- a/packages/store/rollup.config.mjs +++ /dev/null @@ -1,53 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - external: external([ - '@embroider/macros', - - '@ember-data/tracking/-private', - - // to eliminate - '@ember/runloop', - - // investigate why these are present - '@ember/application', - - // deprecated usages only - '@ember/object', - '@ember/object/proxy', - '@ember/object/promise-proxy-mixin', - '@ember/array/proxy', - - // test/debug only - '@ember/test', - '@ember/debug', - ]), - - 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', '-private.js']), - - nodeResolve({ extensions: ['.ts', '.js'] }), - babel({ - extensions: ['.ts', '.js'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/store/src/-private.ts b/packages/store/src/-private.ts index fbf841cfded..9584f256218 100644 --- a/packages/store/src/-private.ts +++ b/packages/store/src/-private.ts @@ -2,37 +2,49 @@ @module @ember-data/store */ -export { default as Store, storeFor } from './-private/store-service'; +export { Store, storeFor } from './-private/store-service'; export { recordIdentifierFor } from './-private/caches/instance-cache'; -export { CacheHandler, type LifetimesService } from './-private/cache-handler'; +export { CacheHandler, type LifetimesService, type StoreRequestContext } from './-private/cache-handler'; export { isStableIdentifier } from './-private/caches/identifier-cache'; -export { default as constructResource } from './-private/utils/construct-resource'; +export { constructResource } from './-private/utils/construct-resource'; + +export type { Document } from './-private/document'; +export type { InstanceCache } from './-private/caches/instance-cache'; + +export type { + FindRecordQuery, + Request, + SaveRecordMutation, + RequestState, + RequestStateService, +} from './-private/network/request-cache'; + +export type { CreateRecordProperties } from './-private/store-service'; // TODO this should be a deprecated helper but we have so much usage of it // to also eliminate -export { default as coerceId, ensureStringId } from './-private/utils/coerce-id'; +export { coerceId, ensureStringId } from './-private/utils/coerce-id'; export type { NativeProxy } from './-private/record-arrays/native-proxy-type-fix'; export { - default as RecordArray, - default as IdentifierArray, - Collection as AdapterPopulatedRecordArray, + IdentifierArray as LiveArray, + Collection as CollectionRecordArray, notifyArray, SOURCE, MUTATE, ARRAY_SIGNAL, } from './-private/record-arrays/identifier-array'; -export { default as RecordArrayManager, fastPush } from './-private/managers/record-array-manager'; +export { RecordArrayManager, fastPush } from './-private/managers/record-array-manager'; // leaked for private use / test use, should investigate removing export { _clearCaches } from './-private/caches/instance-cache'; -export { default as peekCache, removeRecordDataFor } from './-private/caches/cache-utils'; +export { peekCache, removeRecordDataFor } from './-private/caches/cache-utils'; // @ember-data/model needs these temporarily export { setRecordIdentifier, StoreMap } from './-private/caches/instance-cache'; export { setCacheFor } from './-private/caches/cache-utils'; -export { default as _deprecatingNormalize } from './-private/utils/normalize-model-name'; +export { normalizeModelName as _deprecatingNormalize } from './-private/utils/normalize-model-name'; export type { StoreRequestInput } from './-private/cache-handler'; diff --git a/packages/store/src/-private/cache-handler.ts b/packages/store/src/-private/cache-handler.ts index 45a681ce58d..14285b6bb81 100644 --- a/packages/store/src/-private/cache-handler.ts +++ b/packages/store/src/-private/cache-handler.ts @@ -1,9 +1,8 @@ /** * @module @ember-data/store */ -import { assert } from '@ember/debug'; - import type { CacheHandler as CacheHandlerType, Future, NextFn } from '@ember-data/request'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableDocumentIdentifier } from '@warp-drive/core-types/identifier'; import type { ImmutableCreateRequestOptions, @@ -22,11 +21,11 @@ import type { ResourceErrorDocument, } 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 { ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; import type { OpaqueRecordInstance } from '../-types/q/record-instance'; import { Document } from './document'; -import type Store from './store-service'; +import type { Store } from './store-service'; /** * A service which an application may provide to the store via diff --git a/packages/store/src/-private/caches/cache-utils.ts b/packages/store/src/-private/caches/cache-utils.ts index 11a3b2ca5e4..4e31d7f83c4 100644 --- a/packages/store/src/-private/caches/cache-utils.ts +++ b/packages/store/src/-private/caches/cache-utils.ts @@ -1,8 +1,8 @@ -import { assert } from '@ember/debug'; - +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; +import type { Cache } from '@warp-drive/core-types/cache'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { Cache } from '../../-types/q/cache'; import type { OpaqueRecordInstance } from '../../-types/q/record-instance'; /* @@ -10,7 +10,10 @@ import type { OpaqueRecordInstance } from '../../-types/q/record-instance'; * Model or Identifier */ -export const CacheForIdentifierCache = new Map(); +export const CacheForIdentifierCache = getOrSetGlobal( + 'CacheForIdentifierCache', + new Map() +); export function setCacheFor(identifier: StableRecordIdentifier | OpaqueRecordInstance, cache: Cache): void { assert( @@ -24,9 +27,9 @@ export function removeRecordDataFor(identifier: StableRecordIdentifier | OpaqueR CacheForIdentifierCache.delete(identifier); } -export default function peekCache(instance: StableRecordIdentifier): Cache | null; -export default function peekCache(instance: OpaqueRecordInstance): Cache; -export default function peekCache(instance: StableRecordIdentifier | OpaqueRecordInstance): Cache | null { +export function peekCache(instance: StableRecordIdentifier): Cache | null; +export function peekCache(instance: OpaqueRecordInstance): Cache; +export function peekCache(instance: StableRecordIdentifier | OpaqueRecordInstance): Cache | null { if (CacheForIdentifierCache.has(instance as StableRecordIdentifier)) { return CacheForIdentifierCache.get(instance as StableRecordIdentifier) as Cache; } diff --git a/packages/store/src/-private/caches/identifier-cache.ts b/packages/store/src/-private/caches/identifier-cache.ts index 2ba7e00e6a6..921e5f5176a 100644 --- a/packages/store/src/-private/caches/identifier-cache.ts +++ b/packages/store/src/-private/caches/identifier-cache.ts @@ -1,12 +1,14 @@ /** @module @ember-data/store */ -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; -import { getOwnConfig, macroCondition } from '@embroider/macros'; +import { getGlobalConfig, macroCondition } from '@embroider/macros'; import { LOG_IDENTIFIERS } from '@warp-drive/build-config/debugging'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal, peekTransient, setTransient } from '@warp-drive/core-types/-private'; import { CACHE_OWNER, DEBUG_CLIENT_ORIGINATED, @@ -20,7 +22,7 @@ import { 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 type { ExistingResourceObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; import type { ForgetMethod, @@ -28,16 +30,17 @@ import type { KeyInfo, KeyInfoMethod, ResetMethod, - ResourceData, UpdateMethod, } from '../../-types/q/identifier'; -import coerceId from '../utils/coerce-id'; -import normalizeModelName from '../utils/normalize-model-name'; +import { coerceId } from '../utils/coerce-id'; +import { normalizeModelName } from '../utils/normalize-model-name'; import installPolyfill from '../utils/uuid-polyfill'; import { hasId, hasLid, hasType } from './resource-utils'; -const IDENTIFIERS = new Set(); -const DOCUMENTS = new Set(); +type ResourceData = unknown; + +const IDENTIFIERS = getOrSetGlobal('IDENTIFIERS', new Set()); +const DOCUMENTS = getOrSetGlobal('DOCUMENTS', new Set()); export function isStableIdentifier(identifier: unknown): identifier is StableRecordIdentifier { return (identifier as StableRecordIdentifier)[CACHE_OWNER] !== undefined || IDENTIFIERS.has(identifier); @@ -50,7 +53,7 @@ export function isDocumentIdentifier(identifier: unknown): identifier is StableD const isFastBoot = typeof FastBoot !== 'undefined'; const _crypto: Crypto = isFastBoot ? (FastBoot.require('crypto') as Crypto) : window.crypto; -if (macroCondition(getOwnConfig<{ polyfillUUID: boolean }>().polyfillUUID)) { +if (macroCondition(getGlobalConfig<{ WarpDrive: { polyfillUUID: boolean } }>().WarpDrive.polyfillUUID)) { installPolyfill(); } @@ -92,30 +95,24 @@ export type MergeMethod = ( resourceData: unknown ) => StableRecordIdentifier; -let configuredForgetMethod: ForgetMethod | null; -let configuredGenerationMethod: GenerationMethod | null; -let configuredResetMethod: ResetMethod | null; -let configuredUpdateMethod: UpdateMethod | null; -let configuredKeyInfoMethod: KeyInfoMethod | null; - export function setIdentifierGenerationMethod(method: GenerationMethod | null): void { - configuredGenerationMethod = method; + setTransient('configuredGenerationMethod', method); } export function setIdentifierUpdateMethod(method: UpdateMethod | null): void { - configuredUpdateMethod = method; + setTransient('configuredUpdateMethod', method); } export function setIdentifierForgetMethod(method: ForgetMethod | null): void { - configuredForgetMethod = method; + setTransient('configuredForgetMethod', method); } export function setIdentifierResetMethod(method: ResetMethod | null): void { - configuredResetMethod = method; + setTransient('configuredResetMethod', method); } export function setKeyInfoForResource(method: KeyInfoMethod | null): void { - configuredKeyInfoMethod = method; + setTransient('configuredKeyInfoMethod', method); } function assertIsRequest(request: unknown): asserts request is ImmutableRequestInfo { @@ -124,7 +121,9 @@ function assertIsRequest(request: unknown): asserts request is ImmutableRequestI // Map> type TypeIdMap = Map>; +// TODO can we just delete this? const NEW_IDENTIFIERS: TypeIdMap = new Map(); +// TODO @runspired maybe needs peekTransient ? let IDENTIFIER_CACHE_ID = 0; function updateTypeIdMapping(typeMap: TypeIdMap, identifier: StableRecordIdentifier, id: string): void { @@ -206,7 +205,7 @@ function defaultMergeMethod( let DEBUG_MAP: WeakMap; if (DEBUG) { - DEBUG_MAP = new WeakMap(); + DEBUG_MAP = getOrSetGlobal('DEBUG_MAP', new WeakMap()); } /** @@ -230,19 +229,18 @@ export class IdentifierCache { declare _reset: ResetMethod; declare _merge: MergeMethod; declare _keyInfoForResource: KeyInfoMethod; - declare _isDefaultConfig: boolean; declare _id: number; constructor() { // we cache the user configuredGenerationMethod at init because it must // be configured prior and is not allowed to be changed - this._generate = configuredGenerationMethod || (defaultGenerationMethod as GenerationMethod); - this._update = configuredUpdateMethod || defaultUpdateMethod; - this._forget = configuredForgetMethod || defaultEmptyCallback; - this._reset = configuredResetMethod || defaultEmptyCallback; + this._generate = + peekTransient('configuredGenerationMethod') || (defaultGenerationMethod as GenerationMethod); + this._update = peekTransient('configuredUpdateMethod') || defaultUpdateMethod; + this._forget = peekTransient('configuredForgetMethod') || defaultEmptyCallback; + this._reset = peekTransient('configuredResetMethod') || defaultEmptyCallback; this._merge = defaultMergeMethod; - this._keyInfoForResource = configuredKeyInfoMethod || defaultKeyInfoMethod; - this._isDefaultConfig = !configuredGenerationMethod; + this._keyInfoForResource = peekTransient('configuredKeyInfoMethod') || defaultKeyInfoMethod; this._id = IDENTIFIER_CACHE_ID++; this._cache = { diff --git a/packages/store/src/-private/caches/instance-cache.ts b/packages/store/src/-private/caches/instance-cache.ts index 5774893636e..17d86f34f1a 100644 --- a/packages/store/src/-private/caches/instance-cache.ts +++ b/packages/store/src/-private/caches/instance-cache.ts @@ -1,21 +1,25 @@ -import { assert, warn } from '@ember/debug'; +import { warn } from '@ember/debug'; import { LOG_INSTANCE_CACHE } from '@warp-drive/build-config/debugging'; import { DEBUG } from '@warp-drive/build-config/env'; -import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; +import type { Cache } from '@warp-drive/core-types/cache'; +import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { Value } from '@warp-drive/core-types/json/raw'; import type { TypedRecordInstance, TypeFromInstance, TypeFromInstanceOrString } from '@warp-drive/core-types/record'; -import type { RelationshipSchema } from '@warp-drive/core-types/schema'; -import type { ExistingResourceIdentifierObject, NewResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; +import type { LegacyRelationshipSchema as RelationshipSchema } from '@warp-drive/core-types/schema/fields'; +import type { + ExistingResourceIdentifierObject, + ExistingResourceObject, + InnerRelationshipDocument, +} from '@warp-drive/core-types/spec/json-api-raw'; -import type { Cache } from '../../-types/q/cache'; -import type { JsonApiRelationship, JsonApiResource } from '../../-types/q/record-data-json-api'; import type { OpaqueRecordInstance } from '../../-types/q/record-instance'; import RecordReference from '../legacy-model-support/record-reference'; import { CacheCapabilitiesManager } from '../managers/cache-capabilities-manager'; import type { CacheManager } from '../managers/cache-manager'; -import type { CreateRecordProperties } from '../store-service'; -import type Store from '../store-service'; +import type { CreateRecordProperties, Store } from '../store-service'; import { ensureStringId } from '../utils/coerce-id'; import { CacheForIdentifierCache, removeRecordDataFor, setCacheFor } from './cache-utils'; @@ -33,7 +37,7 @@ function isDestroyable(record: OpaqueRecordInstance): record is Destroyable { @module @ember-data/store */ -const RecordCache = new Map(); +const RecordCache = getOrSetGlobal('RecordCache', new Map()); export function peekRecordIdentifier(record: OpaqueRecordInstance): StableRecordIdentifier | undefined { return RecordCache.get(record); @@ -85,7 +89,7 @@ export function setRecordIdentifier(record: OpaqueRecordInstance, identifier: St RecordCache.set(record, identifier); } -export const StoreMap = new Map(); +export const StoreMap = getOrSetGlobal('StoreMap', new Map()); export function storeFor(record: OpaqueRecordInstance): Store | undefined { const store = StoreMap.get(record); @@ -106,7 +110,6 @@ export class InstanceCache { declare store: Store; declare cache: Cache; declare _storeWrapper: CacheCapabilitiesManager; - declare __cacheFor: (resource: RecordIdentifier) => Cache; declare __cacheManager: CacheManager; __instances: Caches = { @@ -411,7 +414,7 @@ export function resourceIsFullyDeleted(instanceCache: InstanceCache, identifier: */ type PreloadRelationshipValue = OpaqueRecordInstance | string; export function preloadData(store: Store, identifier: StableRecordIdentifier, preload: Record) { - const jsonPayload: JsonApiResource = {}; + const jsonPayload: Partial = {}; //TODO(Igor) consider the polymorphic case const schemas = store.getSchemaDefinitionService(); const relationships = schemas.relationshipsDefinitionFor(identifier); @@ -439,7 +442,7 @@ export function preloadData(store: Store, identifier: StableRecordIdentifier, pr function preloadRelationship( schema: RelationshipSchema, preloadValue: PreloadRelationshipValue | null | Array -): JsonApiRelationship { +): InnerRelationshipDocument { const relatedType = schema.type; if (schema.kind === 'hasMany') { @@ -458,13 +461,13 @@ function preloadRelationship( function _convertPreloadRelationshipToJSON( value: OpaqueRecordInstance | string, type: string -): ExistingResourceIdentifierObject | NewResourceIdentifierObject { +): ExistingResourceIdentifierObject { if (typeof value === 'string' || typeof value === 'number') { return { type, id: ensureStringId(value) }; } // TODO if not a record instance assert it's an identifier // and allow identifiers to be used - return recordIdentifierFor(value); + return recordIdentifierFor(value) as ExistingResourceIdentifierObject; } export function _clearCaches() { diff --git a/packages/store/src/-private/document.ts b/packages/store/src/-private/document.ts index f78e2f51007..ea20311ae34 100644 --- a/packages/store/src/-private/document.ts +++ b/packages/store/src/-private/document.ts @@ -1,14 +1,13 @@ /** * @module @ember-data/store */ -import { assert } from '@ember/debug'; - import { defineSignal } from '@ember-data/tracking/-private'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableDocumentIdentifier } from '@warp-drive/core-types/identifier'; import type { RequestInfo } from '@warp-drive/core-types/request'; -import type { Link, Meta, PaginationLinks } from '@warp-drive/core-types/spec/raw'; +import type { Link, Meta, PaginationLinks } from '@warp-drive/core-types/spec/json-api-raw'; -import type Store from './store-service'; +import type { Store } from './store-service'; function urlFromLink(link: Link): string { if (typeof link === 'string') return link; @@ -92,14 +91,18 @@ export class Document { this.identifier = identifier; } - async #request(link: keyof PaginationLinks, options: Partial): Promise | null> { + async #request( + link: keyof PaginationLinks, + options: Partial>> + ): Promise | null> { const href = this.links?.[link]; if (!href) { return null; } options.method = options.method || 'GET'; - const response = await this.#store.request>(Object.assign(options, { url: urlFromLink(href) })); + Object.assign(options, { url: urlFromLink(href) }); + const response = await this.#store.request>(options); return response.content; } @@ -114,7 +117,7 @@ export class Document { * @param {object} options * @return Promise */ - fetch(options: Partial = {}): Promise> { + fetch(options: Partial>> = {}): Promise> { assert(`No self or related link`, this.links?.related || this.links?.self); options.cacheOptions = options.cacheOptions || {}; options.cacheOptions.key = this.identifier?.lid; @@ -131,7 +134,7 @@ export class Document { * @param {object} options * @return Promise */ - next(options: Partial = {}): Promise | null> { + next(options: Partial>> = {}): Promise | null> { return this.#request('next', options); } @@ -145,7 +148,7 @@ export class Document { * @param {object} options * @return Promise */ - prev(options: Partial = {}): Promise | null> { + prev(options: Partial>> = {}): Promise | null> { return this.#request('prev', options); } @@ -159,7 +162,7 @@ export class Document { * @param {object} options * @return Promise */ - first(options: Partial = {}): Promise | null> { + first(options: Partial>> = {}): Promise | null> { return this.#request('first', options); } @@ -173,7 +176,7 @@ export class Document { * @param {object} options * @return Promise */ - last(options: Partial = {}): Promise | null> { + last(options: Partial>> = {}): Promise | null> { return this.#request('last', options); } 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 2f6d93755b9..065e1b46fdc 100644 --- a/packages/store/src/-private/legacy-model-support/record-reference.ts +++ b/packages/store/src/-private/legacy-model-support/record-reference.ts @@ -1,15 +1,14 @@ -import { assert } from '@ember/debug'; - import { defineSignal } from '@ember-data/tracking/-private'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; /** @module @ember-data/store */ -import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import type { OpaqueRecordInstance } from '../../-types/q/record-instance'; import type { NotificationType } from '../managers/notification-manager'; -import type Store from '../store-service'; +import type { Store } from '../store-service'; /** @module @ember-data/store 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 b08d3eb8457..851725015f7 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,12 +1,13 @@ +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; -import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { LegacyAttributeField, LegacyRelationshipSchema } from '@warp-drive/core-types/schema/fields'; import type { KeyOrString, ModelSchema } from '../../-types/q/ds-model'; -import type Store from '../store-service'; +import type { Store } from '../store-service'; // if modelFor turns out to be a bottleneck we should replace with a Map // and clear it during store teardown. -const AvailableShims = new WeakMap>(); +const AvailableShims = getOrSetGlobal('AvailableShims', new WeakMap>()); export function getShimClass( store: Store, @@ -57,19 +58,19 @@ export default class ShimModelClass implements ModelSchema { return fields; } - get attributes(): Map, AttributeSchema> { + get attributes(): Map, LegacyAttributeField> { const attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); - return mapFromHash(attrs as Record); + return mapFromHash(attrs as Record); } - get relationshipsByName(): Map, RelationshipSchema> { + get relationshipsByName(): Map, LegacyRelationshipSchema> { const relationships = this.__store .getSchemaDefinitionService() .relationshipsDefinitionFor({ type: this.modelName }); - return mapFromHash(relationships as Record); + return mapFromHash(relationships as Record); } - eachAttribute>(callback: (key: K, attribute: AttributeSchema) => void, binding?: T) { + eachAttribute>(callback: (key: K, attribute: LegacyAttributeField) => void, binding?: T) { const attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); Object.keys(attrDefs).forEach((key) => { callback.call(binding, key as K, attrDefs[key]); @@ -77,7 +78,7 @@ export default class ShimModelClass implements ModelSchema { } eachRelationship>( - callback: (key: K, relationship: RelationshipSchema) => void, + callback: (key: K, relationship: LegacyRelationshipSchema) => void, binding?: T ) { const relationshipDefs = this.__store @@ -91,8 +92,9 @@ export default class ShimModelClass implements ModelSchema { eachTransformedAttribute>(callback: (key: K, type: string | null) => void, binding?: T) { const attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName }); Object.keys(attrDefs).forEach((key) => { - if (attrDefs[key].type) { - callback.call(binding, key as K, attrDefs[key].type); + const type = attrDefs[key].type; + if (type) { + callback.call(binding, key as K, type); } }); } diff --git a/packages/store/src/-private/managers/cache-capabilities-manager.ts b/packages/store/src/-private/managers/cache-capabilities-manager.ts index 74743f46881..9a2c205e7c1 100644 --- a/packages/store/src/-private/managers/cache-capabilities-manager.ts +++ b/packages/store/src/-private/managers/cache-capabilities-manager.ts @@ -1,12 +1,11 @@ -import { assert } from '@ember/debug'; - +import { assert } from '@warp-drive/build-config/macros'; import type { StableDocumentIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { CacheCapabilitiesManager as StoreWrapper } from '../../-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager as StoreWrapper } from '../../-types/q/cache-capabilities-manager'; import type { SchemaService } from '../../-types/q/schema-service'; import type { IdentifierCache } from '../caches/identifier-cache'; import { isDocumentIdentifier, isStableIdentifier } from '../caches/identifier-cache'; -import type Store from '../store-service'; +import type { Store } from '../store-service'; import type { NotificationType } from './notification-manager'; /** diff --git a/packages/store/src/-private/managers/cache-manager.ts b/packages/store/src/-private/managers/cache-manager.ts index 893d98518f1..6efdad747dd 100644 --- a/packages/store/src/-private/managers/cache-manager.ts +++ b/packages/store/src/-private/managers/cache-manager.ts @@ -1,5 +1,6 @@ import type { Cache, ChangedAttributesHash, RelationshipDiff } from '@warp-drive/core-types/cache'; import type { Change } from '@warp-drive/core-types/cache/change'; +import type { MergeOperation } from '@warp-drive/core-types/cache/operations'; 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'; @@ -8,8 +9,6 @@ import type { StructuredDataDocument, StructuredDocument } from '@warp-drive/cor 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'; /** @@ -157,7 +156,7 @@ export class CacheManager implements Cache { * @param hasRecord * @return {void | string[]} if `hasRecord` is true then calculated key changes should be returned */ - upsert(identifier: StableRecordIdentifier, data: JsonApiResource, hasRecord: boolean): void | string[] { + upsert(identifier: StableRecordIdentifier, data: unknown, hasRecord: boolean): void | string[] { return this.#cache.upsert(identifier, data, hasRecord); } diff --git a/packages/store/src/-private/managers/notification-manager.ts b/packages/store/src/-private/managers/notification-manager.ts index dc18fe2bc0f..0638b866313 100644 --- a/packages/store/src/-private/managers/notification-manager.ts +++ b/packages/store/src/-private/managers/notification-manager.ts @@ -1,16 +1,16 @@ /** * @module @ember-data/store */ -import { assert } from '@ember/debug'; // eslint-disable-next-line no-restricted-imports import { _backburner } from '@ember/runloop'; import { LOG_NOTIFICATIONS } from '@warp-drive/build-config/debugging'; import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; import type { StableDocumentIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import { isDocumentIdentifier, isStableIdentifier } from '../caches/identifier-cache'; -import type Store from '../store-service'; +import type { Store } from '../store-service'; export type UnsubscribeToken = object; let tokenId = 0; @@ -32,7 +32,7 @@ export type NotificationType = 'attributes' | 'relationships' | 'identity' | 'er export interface NotificationCallback { (identifier: StableRecordIdentifier, notificationType: 'attributes' | 'relationships', key?: string): void; (identifier: StableRecordIdentifier, notificationType: 'errors' | 'meta' | 'identity' | 'state'): void; - (identifier: StableRecordIdentifier, notificationType: NotificationType, key?: string): void; + // (identifier: StableRecordIdentifier, notificationType: NotificationType, key?: string): void; } export interface ResourceOperationCallback { @@ -127,8 +127,7 @@ export default class NotificationManager { */ subscribe(identifier: StableRecordIdentifier, callback: NotificationCallback): UnsubscribeToken; subscribe(identifier: 'resource', callback: ResourceOperationCallback): UnsubscribeToken; - subscribe(identifier: StableDocumentIdentifier, callback: DocumentOperationCallback): UnsubscribeToken; - subscribe(identifier: 'document', callback: DocumentOperationCallback): UnsubscribeToken; + subscribe(identifier: 'document' | StableDocumentIdentifier, callback: DocumentOperationCallback): UnsubscribeToken; subscribe( identifier: StableDocumentIdentifier | StableRecordIdentifier | 'resource' | 'document', callback: NotificationCallback | ResourceOperationCallback | DocumentOperationCallback diff --git a/packages/store/src/-private/managers/record-array-manager.ts b/packages/store/src/-private/managers/record-array-manager.ts index cb5694a5240..a289dfa0ef0 100644 --- a/packages/store/src/-private/managers/record-array-manager.ts +++ b/packages/store/src/-private/managers/record-array-manager.ts @@ -2,22 +2,24 @@ @module @ember-data/store */ import { addTransactionCB } from '@ember-data/tracking/-private'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { ImmutableRequestInfo } from '@warp-drive/core-types/request'; -import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import type { CollectionCreateOptions } from '../record-arrays/identifier-array'; -import IdentifierArray, { +import { ARRAY_SIGNAL, Collection, + IdentifierArray, NOTIFY, notifyArray, SOURCE, } from '../record-arrays/identifier-array'; -import type Store from '../store-service'; +import type { Store } from '../store-service'; import type { CacheOperation, UnsubscribeToken } from './notification-manager'; -const FAKE_ARR = {}; +const FAKE_ARR = getOrSetGlobal('FAKE_ARR', {}); const SLICE_BATCH_SIZE = 1200; /** * This is a clever optimization. @@ -75,7 +77,7 @@ type ChangeSet = Map; @class RecordArrayManager @internal */ -class RecordArrayManager { +export class RecordArrayManager { declare store: Store; declare isDestroying: boolean; declare isDestroyed: boolean; @@ -436,5 +438,3 @@ function sync( */ } } - -export default RecordArrayManager; diff --git a/packages/store/src/-private/network/request-cache.ts b/packages/store/src/-private/network/request-cache.ts index 8e5cd1a6c5d..bb9199ff72a 100644 --- a/packages/store/src/-private/network/request-cache.ts +++ b/packages/store/src/-private/network/request-cache.ts @@ -1,16 +1,16 @@ /** * @module @ember-data/store */ -import { assert } from '@ember/debug'; - import { DEBUG } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { FindRecordOptions } from '../../-types/q/store'; -import type Store from '../store-service'; +import type { Store } from '../store-service'; -const Touching: unique symbol = Symbol('touching'); -export const RequestPromise: unique symbol = Symbol('promise'); +const Touching = getOrSetGlobal('Touching', Symbol('touching')); +export const RequestPromise = getOrSetGlobal('RequestPromise', Symbol('promise')); const EMPTY_ARR: RequestState[] = DEBUG ? (Object.freeze([]) as unknown as RequestState[]) : []; export interface Operation { @@ -65,7 +65,7 @@ function hasRecordIdentifier(op: Operation): op is RecordOperation { * @class RequestStateService * @public */ -export default class RequestStateService { +export class RequestStateService { _pending: Map = new Map(); _done: Map = new Map(); _subscriptions: Map = new Map(); diff --git a/packages/store/src/-private/record-arrays/identifier-array.ts b/packages/store/src/-private/record-arrays/identifier-array.ts index c6b8193aaad..d884f92f0ec 100644 --- a/packages/store/src/-private/record-arrays/identifier-array.ts +++ b/packages/store/src/-private/record-arrays/identifier-array.ts @@ -1,8 +1,6 @@ /** @module @ember-data/store */ -import { assert } from '@ember/debug'; - import { compat } from '@ember-data/tracking'; import type { Signal } from '@ember-data/tracking/-private'; import { @@ -12,16 +10,18 @@ import { defineSignal, subscribe, } from '@ember-data/tracking/-private'; +import { assert } from '@warp-drive/build-config/macros'; +import { getOrSetGlobal } from '@warp-drive/core-types/-private'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; +import type { TypeFromInstanceOrString } from '@warp-drive/core-types/record'; import type { ImmutableRequestInfo } from '@warp-drive/core-types/request'; -import type { Links, PaginationLinks } from '@warp-drive/core-types/spec/raw'; +import type { Links, PaginationLinks } from '@warp-drive/core-types/spec/json-api-raw'; import type { OpaqueRecordInstance } from '../../-types/q/record-instance'; import { isStableIdentifier } from '../caches/identifier-cache'; import { recordIdentifierFor } from '../caches/instance-cache'; -import type RecordArrayManager from '../managers/record-array-manager'; -import type Store from '../store-service'; +import type { RecordArrayManager } from '../managers/record-array-manager'; +import type { Store } from '../store-service'; import { NativeProxy } from './native-proxy-type-fix'; type KeyType = string | symbol | number; @@ -61,11 +61,11 @@ function isSelfProp(self: T, prop: KeyType): prop is Exclude unknown; export type IdentifierArrayCreateOptions = { - identifiers: StableRecordIdentifier[]; - type?: T extends TypedRecordInstance ? TypeFromInstance : string; + identifiers: StableRecordIdentifier>[]; + type?: TypeFromInstanceOrString; store: Store; allowMutation: boolean; - manager: RecordArrayManager; + manager: MinimumManager; links?: Links | PaginationLinks | null; meta?: Record | null; }; @@ -125,6 +125,10 @@ function safeForEach( return instance; } +type MinimumManager = { + _syncArray: (array: IdentifierArray) => void; +}; + /** A record array is an array that contains records of a certain type (or modelName). The record array materializes records as needed when they are retrieved for the first @@ -137,7 +141,7 @@ function safeForEach( @class RecordArray @public */ -interface IdentifierArray extends Omit, '[]'> { +export interface IdentifierArray extends Omit, '[]'> { [MUTATE]?( target: StableRecordIdentifier[], receiver: typeof NativeProxy, @@ -147,7 +151,7 @@ interface IdentifierArray extends Omit, '[]'> { ): unknown; } -class IdentifierArray { +export class IdentifierArray { declare DEPRECATED_CLASS_NAME: string; /** The flag to signal a `RecordArray` is currently loading data. @@ -177,7 +181,7 @@ class IdentifierArray { declare links: Links | PaginationLinks | null; declare meta: Record | null; - declare modelName?: T extends TypedRecordInstance ? TypeFromInstance : string; + declare modelName?: TypeFromInstanceOrString; /** The store that created this record array. @@ -186,7 +190,7 @@ class IdentifierArray { @type Store */ declare store: Store; - declare _manager: RecordArrayManager; + declare _manager: MinimumManager; destroy(clear: boolean) { this.isDestroying = !clear; @@ -386,7 +390,7 @@ class IdentifierArray { } if (!options.allowMutation) { - assert(`Mutating ${String(prop)} on this RecordArray is not allowed.`, options.allowMutation); + assert(`Mutating ${String(prop)} on this Array is not allowed.`, options.allowMutation); return false; } @@ -481,7 +485,7 @@ class IdentifierArray { } /* - Update this RecordArray and return a promise which resolves once the update + Update this Array and return a promise which resolves once the update is finished. */ _update(): Promise> { @@ -534,15 +538,15 @@ Object.defineProperty(IdentifierArray.prototype, '[]', desc); defineSignal(IdentifierArray.prototype, 'isUpdating', false); -export default IdentifierArray; - export type CollectionCreateOptions = IdentifierArrayCreateOptions & { + manager: RecordArrayManager; query: ImmutableRequestInfo | Record | null; isLoaded: boolean; }; export class Collection extends IdentifierArray { query: ImmutableRequestInfo | Record | null = null; + declare _manager: RecordArrayManager; constructor(options: CollectionCreateOptions) { super(options as IdentifierArrayCreateOptions); diff --git a/packages/store/src/-private/store-service.ts b/packages/store/src/-private/store-service.ts index fa0570aab77..f469e064bd5 100644 --- a/packages/store/src/-private/store-service.ts +++ b/packages/store/src/-private/store-service.ts @@ -2,16 +2,18 @@ @module @ember-data/store */ // this import location is deprecated but breaks in 4.8 and older -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import type EmberObject from '@ember/object'; import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros'; import type RequestManager from '@ember-data/request'; -import type { Future } from '@ember-data/request/-private/types'; +import type { Future } from '@ember-data/request'; import { LOG_PAYLOADS, LOG_REQUESTS } from '@warp-drive/build-config/debugging'; import { DEPRECATE_STORE_EXTENDS_EMBER_OBJECT } from '@warp-drive/build-config/deprecations'; import { DEBUG, TESTING } from '@warp-drive/build-config/env'; +import { assert } from '@warp-drive/build-config/macros'; +import type { Cache } from '@warp-drive/core-types/cache'; import type { Graph } from '@warp-drive/core-types/graph'; import type { StableDocumentIdentifier, @@ -27,11 +29,10 @@ import type { JsonApiDocument, ResourceIdentifierObject, SingleResourceDocument, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; import type { ResourceType } from '@warp-drive/core-types/symbols'; -import type { Cache, CacheV1 } from '../-types/q/cache'; -import type { CacheCapabilitiesManager } from '../-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager } from '../-types/q/cache-capabilities-manager'; import type { ModelSchema } from '../-types/q/ds-model'; import type { OpaqueRecordInstance } from '../-types/q/record-instance'; import type { SchemaService } from '../-types/q/schema-service'; @@ -51,13 +52,12 @@ import type RecordReference from './legacy-model-support/record-reference'; import { getShimClass } from './legacy-model-support/shim-model-class'; import { CacheManager } from './managers/cache-manager'; import NotificationManager from './managers/notification-manager'; -import RecordArrayManager from './managers/record-array-manager'; -import RequestStateService, { RequestPromise } from './network/request-cache'; -import type { Collection } from './record-arrays/identifier-array'; -import type IdentifierArray from './record-arrays/identifier-array'; -import coerceId, { ensureStringId } from './utils/coerce-id'; -import constructResource from './utils/construct-resource'; -import normalizeModelName from './utils/normalize-model-name'; +import { RecordArrayManager } from './managers/record-array-manager'; +import { RequestPromise, RequestStateService } from './network/request-cache'; +import type { Collection, IdentifierArray } from './record-arrays/identifier-array'; +import { coerceId, ensureStringId } from './utils/coerce-id'; +import { constructResource } from './utils/construct-resource'; +import { normalizeModelName } from './utils/normalize-model-name'; export { storeFor }; @@ -117,6 +117,7 @@ export type CreateRecordProperties> = T @class Store @public */ +// eslint-disable-next-line @typescript-eslint/no-extraneous-class const EmptyClass = class {}; const BaseClass = macroCondition(dependencySatisfies('ember-source', '*')) ? DEPRECATE_STORE_EXTENDS_EMBER_OBJECT @@ -155,9 +156,7 @@ const app = new EmberApp(defaults, { ); } -interface Store { - createRecordDataFor?(identifier: StableRecordIdentifier, wrapper: CacheCapabilitiesManager): Cache | CacheV1; - +export interface Store { createCache(storeWrapper: CacheCapabilitiesManager): Cache; instantiateRecord( @@ -168,7 +167,7 @@ interface Store { teardownRecord(record: OpaqueRecordInstance): void; } -class Store extends BaseClass { +export class Store extends BaseClass { declare recordArrayManager: RecordArrayManager; /** @@ -221,7 +220,7 @@ class Store extends BaseClass { * ```ts * import Store, { CacheHandler } from '@ember-data/store'; * import RequestManager from '@ember-data/request'; - * import Fetch from '@ember/data/request/fetch'; + * import Fetch from '@ember-data/request/fetch'; * * class extends Store { * constructor() { @@ -500,7 +499,8 @@ class Store extends BaseClass { ); } - const future = this.requestManager.request(Object.assign(requestConfig, opts)); + const request = Object.assign({}, requestConfig, opts); + const future = this.requestManager.request(request); future.onFinalize(() => { if (LOG_REQUESTS) { @@ -879,8 +879,6 @@ class Store extends BaseClass { **Example 1** ```app/routes/post.js - import Route from '@ember/routing/route'; - export default class PostRoute extends Route { model({ post_id }) { return this.store.findRecord('post', post_id); @@ -895,8 +893,6 @@ class Store extends BaseClass { the typical pairing from [JSON:API](https://jsonapi.org/format/#document-resource-object-identification) ```app/routes/post.js - import Route from '@ember/routing/route'; - export default class PostRoute extends Route { model({ post_id: id }) { return this.store.findRecord({ type: 'post', id }); @@ -928,8 +924,6 @@ class Store extends BaseClass { without also fetching the post you can pass in the post to the `findRecord` call: ```app/routes/post-comments.js - import Route from '@ember/routing/route'; - export default class PostRoute extends Route { model({ post_id, comment_id: id }) { return this.store.findRecord({ type: 'comment', id, { preload: { post: post_id }} }); @@ -964,8 +958,6 @@ class Store extends BaseClass { property on the options hash. ```app/routes/post-comments.js - import Route from '@ember/routing/route'; - export default class PostRoute extends Route { model({ post_id, comment_id: id }) { return this.store.findRecord({ type: 'comment', id, { adapterOptions: { post: post_id }} }); @@ -1084,8 +1076,6 @@ class Store extends BaseClass { `findRecord`. ```app/routes/post/edit.js - import Route from '@ember/routing/route'; - export default class PostEditRoute extends Route { model(params) { return this.store.findRecord('post', params.post_id, { backgroundReload: false }); @@ -1097,8 +1087,6 @@ class Store extends BaseClass { argument it will be passed to your adapter via the snapshot ```app/routes/post/edit.js - import Route from '@ember/routing/route'; - export default class PostEditRoute extends Route { model(params) { return this.store.findRecord('post', params.post_id, { @@ -1138,8 +1126,6 @@ class Store extends BaseClass { comments in the same request: ```app/routes/post.js - import Route from '@ember/routing/route'; - export default class PostRoute extends Route { model(params) { return this.store.findRecord('post', params.post_id, { include: 'comments' }); @@ -1175,8 +1161,6 @@ class Store extends BaseClass { comments and the authors of those comments the request would look like this: ```app/routes/post.js - import Route from '@ember/routing/route'; - export default class PostRoute extends Route { model(params) { return this.store.findRecord('post', params.post_id, { include: 'comments,comments.author' }); @@ -1210,24 +1194,22 @@ class Store extends BaseClass { Given a `post` model with attributes body, title, publishDate and meta, you can retrieve a filtered list of attributes. ```app/routes/post.js - import Route from '@ember/routing/route'; - export default Route.extend({ + export default class extends Route { model(params) { return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title' } }); } - }); + } ``` Moreover, you can filter attributes on related models as well. If a `post` has a `belongsTo` relationship to a user, just include the relationship key and attributes. ```app/routes/post.js - import Route from '@ember/routing/route'; - export default Route.extend({ + export default class extends Route { model(params) { return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title', user: 'name,email' } }); } - }); + } ``` @since 1.13.0 @@ -1288,7 +1270,7 @@ class Store extends BaseClass { record: identifier, options, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }); return promise.then((document) => { @@ -1512,7 +1494,7 @@ class Store extends BaseClass { query, options: options, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }); return promise.then((document) => document.content); @@ -1640,7 +1622,7 @@ class Store extends BaseClass { query, options: options || {}, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }); return promise.then((document) => document.content); @@ -1653,8 +1635,6 @@ class Store extends BaseClass { of them. ```app/routes/authors.js - import Route from '@ember/routing/route'; - export default class AuthorsRoute extends Route { model(params) { return this.store.findAll('author'); @@ -1747,8 +1727,6 @@ class Store extends BaseClass { `findAll`. ```app/routes/post/edit.js - import Route from '@ember/routing/route'; - export default class PostEditRoute extends Route { model() { return this.store.findAll('post', { backgroundReload: false }); @@ -1760,8 +1738,6 @@ class Store extends BaseClass { argument it will be passed to you adapter via the `snapshotRecordArray` ```app/routes/posts.js - import Route from '@ember/routing/route'; - export default class PostsRoute extends Route { model(params) { return this.store.findAll('post', { @@ -1802,8 +1778,6 @@ class Store extends BaseClass { all of the posts' comments in the same request: ```app/routes/posts.js - import Route from '@ember/routing/route'; - export default class PostsRoute extends Route { model() { return this.store.findAll('post', { include: 'comments' }); @@ -1816,8 +1790,6 @@ class Store extends BaseClass { comments and the authors of those comments the request would look like this: ```app/routes/posts.js - import Route from '@ember/routing/route'; - export default class PostsRoute extends Route { model() { return this.store.findAll('post', { include: 'comments,comments.author' }); @@ -1852,7 +1824,7 @@ class Store extends BaseClass { type: normalizeModelName(type), options: options || {}, }, - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }); return promise.then((document) => document.content); @@ -2202,7 +2174,7 @@ class Store extends BaseClass { record: identifier, }, records: [identifier], - cacheOptions: { [SkipCache as symbol]: true }, + cacheOptions: { [SkipCache]: true }, }; return this.request(request).then((document) => document.content); @@ -2228,7 +2200,7 @@ class Store extends BaseClass { * @property {Cache} cache * @public */ - get cache(): Cache { + get cache(): ReturnType { let { cache } = this._instanceCache; if (!cache) { cache = this._instanceCache.cache = this.createCache(this._instanceCache._storeWrapper); @@ -2236,7 +2208,8 @@ class Store extends BaseClass { cache = new CacheManager(cache); } } - return cache; + + return cache as ReturnType; } destroy(): void { @@ -2262,8 +2235,6 @@ class Store extends BaseClass { } } -export default Store; - let assertDestroyingStore: (store: Store, method: string) => void; let assertDestroyedStoreOnly: (store: Store, method: string) => void; diff --git a/packages/store/src/-private/store-service.type-test.ts b/packages/store/src/-private/store-service.type-test.ts index 2fa579aba25..541e3b22c4e 100644 --- a/packages/store/src/-private/store-service.type-test.ts +++ b/packages/store/src/-private/store-service.type-test.ts @@ -4,10 +4,9 @@ import { expectTypeOf } from 'expect-type'; import { ResourceType } from '@warp-drive/core-types/symbols'; -import type { IdentifierArray } from '../-private'; -import type { Collection } from './record-arrays/identifier-array'; +import type { Collection, IdentifierArray } from './record-arrays/identifier-array'; import type { CreateRecordProperties } from './store-service'; -import Store from './store-service'; +import { Store } from './store-service'; ////////////////////////////////// ////////////////////////////////// diff --git a/packages/store/src/-private/utils/coerce-id.ts b/packages/store/src/-private/utils/coerce-id.ts index 132ce19e1a7..d35f7e79dc6 100644 --- a/packages/store/src/-private/utils/coerce-id.ts +++ b/packages/store/src/-private/utils/coerce-id.ts @@ -2,9 +2,10 @@ @module @ember-data/store */ -import { assert, deprecate } from '@ember/debug'; +import { deprecate } from '@ember/debug'; import { DEPRECATE_NON_STRICT_ID } from '@warp-drive/build-config/deprecations'; +import { assert } from '@warp-drive/build-config/macros'; // Used by the store to normalize IDs entering the store. Despite the fact // that developers may provide IDs as numbers (e.g., `store.findRecord('person', 1)`), @@ -14,7 +15,7 @@ import { DEPRECATE_NON_STRICT_ID } from '@warp-drive/build-config/deprecations'; // corresponding record, we will not know if it is a string or a number. type Coercable = string | number | boolean | null | undefined | symbol; -function coerceId(id: unknown): string | null { +export function coerceId(id: unknown): string | null { if (DEPRECATE_NON_STRICT_ID) { let normalized: string | null; if (id === null || id === undefined || id === '') { @@ -62,5 +63,3 @@ export function ensureStringId(id: Coercable): string { return normalized; } - -export default coerceId; diff --git a/packages/store/src/-private/utils/construct-resource.ts b/packages/store/src/-private/utils/construct-resource.ts index f6ce3b4b4c4..8902b1b93af 100644 --- a/packages/store/src/-private/utils/construct-resource.ts +++ b/packages/store/src/-private/utils/construct-resource.ts @@ -1,21 +1,27 @@ -import { assert } from '@ember/debug'; - -import type { ExistingResourceIdentifierObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; +import { assert } from '@warp-drive/build-config/macros'; +import type { + ExistingResourceIdentifierObject, + ResourceIdentifierObject, +} from '@warp-drive/core-types/spec/json-api-raw'; import { isStableIdentifier } from '../caches/identifier-cache'; -import coerceId from './coerce-id'; -import isNonEmptyString from './is-non-empty-string'; +import { coerceId } from './coerce-id'; +import { isNonEmptyString } from './is-non-empty-string'; -function constructResource(type: ResourceIdentifierObject): ResourceIdentifierObject; -function constructResource(type: string, id: string, lid: string): ExistingResourceIdentifierObject; -function constructResource( +export function constructResource(type: ResourceIdentifierObject): ResourceIdentifierObject; +export function constructResource(type: string, id: string, lid: string): ExistingResourceIdentifierObject; +export function constructResource( type: string | undefined, id: null | undefined, lid: string ): ExistingResourceIdentifierObject; -function constructResource(type: string, id: string, lid?: string | null): ExistingResourceIdentifierObject; -function constructResource(type: string, id?: string | number | null, lid?: string | null): ResourceIdentifierObject; -function constructResource( +export function constructResource(type: string, id: string, lid?: string | null): ExistingResourceIdentifierObject; +export function constructResource( + type: string, + id?: string | number | null, + lid?: string | null +): ResourceIdentifierObject; +export function constructResource( type: string | ResourceIdentifierObject | undefined, id?: string | number | null, lid?: string | null @@ -54,5 +60,3 @@ function constructResource( return { type, id: trueId }; } } - -export default constructResource; diff --git a/packages/store/src/-private/utils/identifier-debug-consts.ts b/packages/store/src/-private/utils/identifier-debug-consts.ts deleted file mode 100644 index ea7fd3a170c..00000000000 --- a/packages/store/src/-private/utils/identifier-debug-consts.ts +++ /dev/null @@ -1,7 +0,0 @@ -// 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'); -export const DEBUG_STALE_CACHE_OWNER: unique symbol = Symbol('warpDriveStaleCache'); - -// also present in production -export const CACHE_OWNER: unique symbol = Symbol('warpDriveCache'); diff --git a/packages/store/src/-private/utils/is-non-empty-string.ts b/packages/store/src/-private/utils/is-non-empty-string.ts index c978bcbce53..12f74b3e3cc 100644 --- a/packages/store/src/-private/utils/is-non-empty-string.ts +++ b/packages/store/src/-private/utils/is-non-empty-string.ts @@ -1,3 +1,3 @@ -export default function isNonEmptyString(str: unknown): str is string { +export function isNonEmptyString(str: unknown): str is string { return Boolean(str && typeof str === 'string'); } diff --git a/packages/store/src/-private/utils/normalize-model-name.ts b/packages/store/src/-private/utils/normalize-model-name.ts index e126c6c08f0..8e0e7ead436 100644 --- a/packages/store/src/-private/utils/normalize-model-name.ts +++ b/packages/store/src/-private/utils/normalize-model-name.ts @@ -3,7 +3,7 @@ import { dasherize } from '@ember/string'; import { DEPRECATE_NON_STRICT_TYPES } from '@warp-drive/build-config/deprecations'; -export default function normalizeModelName(type: string): string { +export function normalizeModelName(type: string): string { if (DEPRECATE_NON_STRICT_TYPES) { const result = dasherize(type); diff --git a/packages/store/src/-types/q/cache-store-wrapper.ts b/packages/store/src/-types/q/cache-capabilities-manager.ts similarity index 96% rename from packages/store/src/-types/q/cache-store-wrapper.ts rename to packages/store/src/-types/q/cache-capabilities-manager.ts index 5145ce4ee87..867deb4b386 100644 --- a/packages/store/src/-types/q/cache-store-wrapper.ts +++ b/packages/store/src/-types/q/cache-capabilities-manager.ts @@ -11,8 +11,7 @@ import type { SchemaService } from './schema-service'; /** * CacheCapabilitiesManager provides encapsulated API access to the minimal * subset of the Store's functionality that Cache implementations - * should interact with. It is provided to the Store's `createRecordDataFor` - * and `createCache` hooks. + * should interact with. It is provided to the Store's `createCache` hook. * * Cache implementations should not need more than this API provides. * @@ -21,7 +20,7 @@ import type { SchemaService } from './schema-service'; * @class CacheCapabilitiesManager * @public */ -export interface CacheCapabilitiesManager { +export type CacheCapabilitiesManager = { /** * Provides access to the IdentifierCache instance * for this Store instance. @@ -114,4 +113,4 @@ export interface CacheCapabilitiesManager { namespace: NotificationType | 'added' | 'removed' | 'updated', key?: string ): void; -} +}; diff --git a/packages/store/src/-types/q/cache.ts b/packages/store/src/-types/q/cache.ts deleted file mode 100644 index 40ad38c0513..00000000000 --- a/packages/store/src/-types/q/cache.ts +++ /dev/null @@ -1,64 +0,0 @@ -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 type { JsonApiResource } from './record-data-json-api'; -/** - @module @ember-data/store -*/ - -export interface MergeOperation { - op: 'mergeIdentifiers'; - record: StableRecordIdentifier; // existing - value: StableRecordIdentifier; // new -} - -export interface CacheV1 { - version?: '1'; - - // Cache - // ===== - getResourceIdentifier(): RecordIdentifier | undefined; - - pushData(data: JsonApiResource, calculateChange: true): string[]; - pushData(data: JsonApiResource, calculateChange?: false): void; - pushData(data: JsonApiResource, calculateChange?: boolean): string[] | void; - clientDidCreate(): void; - _initRecordCreateOptions(options?: Record): Record; - - willCommit(): void; - didCommit(data: JsonApiResource | null): void; - commitWasRejected(recordIdentifier?: RecordIdentifier, errors?: ApiError[]): void; - - unloadRecord(): void; - - // Attrs - // ===== - getAttr(key: string): unknown; - setDirtyAttribute(key: string, value: unknown): void; - changedAttributes(): ChangedAttributesHash; - hasChangedAttributes(): boolean; - rollbackAttributes(): string[]; - - // Relationships - // ============= - getBelongsTo(key: string): SingleResourceRelationship; - getHasMany(key: string): CollectionResourceRelationship; - - setDirtyBelongsTo(name: string, recordData: Cache | null): void; - setDirtyHasMany(key: string, recordDatas: Cache[]): void; - addToHasMany(key: string, recordDatas: Cache[], idx?: number): void; - removeFromHasMany(key: string, recordDatas: Cache[]): void; - - // State - // ============= - setIsDeleted(isDeleted: boolean): void; - getErrors(identifier: StableRecordIdentifier): ApiError[]; - isEmpty?(identifier: StableRecordIdentifier): boolean; // needs rfc - isNew(identifier: StableRecordIdentifier): boolean; - isDeleted(identifier: StableRecordIdentifier): boolean; - isDeletionCommitted(identifier: StableRecordIdentifier): boolean; -} - -export type { Cache }; diff --git a/packages/store/src/-types/q/ds-model.ts b/packages/store/src/-types/q/ds-model.ts index 343c38e3573..28df41767c6 100644 --- a/packages/store/src/-types/q/ds-model.ts +++ b/packages/store/src/-types/q/ds-model.ts @@ -1,19 +1,29 @@ import type { TypedRecordInstance, TypeFromInstance } from '@warp-drive/core-types/record'; -import type { AttributeSchema, RelationshipSchema } from '@warp-drive/core-types/schema'; +import type { LegacyAttributeField, LegacyRelationshipSchema } from '@warp-drive/core-types/schema/fields'; export type KeyOrString = keyof T & string extends never ? string : keyof T & string; +/** + * Minimum subset of static schema methods and properties on the + * "model" class. + * + * Only used when using the legacy schema-service implementation + * for @ember-data/model or when wrapping schema for legacy + * Adapters/Serializers. + * + * @typedoc + */ export interface ModelSchema { modelName: T extends TypedRecordInstance ? TypeFromInstance : string; fields: Map, 'attribute' | 'belongsTo' | 'hasMany'>; - attributes: Map, AttributeSchema>; - relationshipsByName: Map, RelationshipSchema>; + attributes: Map, LegacyAttributeField>; + relationshipsByName: Map, LegacyRelationshipSchema>; eachAttribute>( - callback: (this: ModelSchema, key: K, attribute: AttributeSchema) => void, + callback: (this: ModelSchema, key: K, attribute: LegacyAttributeField) => void, binding?: T ): void; eachRelationship>( - callback: (this: ModelSchema, key: K, relationship: RelationshipSchema) => void, + callback: (this: ModelSchema, key: K, relationship: LegacyRelationshipSchema) => void, binding?: T ): void; eachTransformedAttribute>( diff --git a/packages/store/src/-types/q/identifier.ts b/packages/store/src/-types/q/identifier.ts index 5627b391f18..193e4b0f6cc 100644 --- a/packages/store/src/-types/q/identifier.ts +++ b/packages/store/src/-types/q/identifier.ts @@ -4,9 +4,6 @@ import type { ImmutableRequestInfo } from '@ember-data/request'; import type { 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; /** Configures how unique identifier lid strings are generated by @ember-data/store. 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 c1896bd1ab1..ff3cd3e7e66 100644 --- a/packages/store/src/-types/q/record-data-json-api.ts +++ b/packages/store/src/-types/q/record-data-json-api.ts @@ -5,7 +5,7 @@ import type { Links, Meta, SingleResourceRelationship, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; /** @module @ember-data/store diff --git a/packages/store/src/-types/q/schema-service.ts b/packages/store/src/-types/q/schema-service.ts index 513374c5ea2..31dfc66ce39 100644 --- a/packages/store/src/-types/q/schema-service.ts +++ b/packages/store/src/-types/q/schema-service.ts @@ -3,27 +3,15 @@ */ import type { RecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { + FieldSchema, + LegacyAttributeField, + LegacyBelongsToField, + LegacyHasManyField, +} from '@warp-drive/core-types/schema/fields'; -export interface FieldSchema { - type: string | null; - name: string; - kind: - | 'attribute' - | 'hasMany' - | 'belongsTo' - | 'field' - | 'resource' - | 'collection' - | 'derived' - | 'object' - | 'schema-object' - | 'array' - | 'schema-array' - | '@id' - | '@local'; - options?: Record; -} +export type AttributesSchema = Record; +export type RelationshipsSchema = Record; /** * The SchemaService provides the ability to query for information about the structure diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts index 26e22e8f957..8df161afb6e 100644 --- a/packages/store/src/index.ts +++ b/packages/store/src/index.ts @@ -184,14 +184,16 @@ export { Store as default, + type StoreRequestContext, CacheHandler, + type Document, type LifetimesService, type StoreRequestInput, recordIdentifierFor, storeFor, } from './-private'; -export type { NotificationType } from './-private/managers/notification-manager'; +export type { CacheOperation, NotificationType } from './-private/managers/notification-manager'; export { setIdentifierGenerationMethod, diff --git a/packages/store/src/types.ts b/packages/store/src/types.ts new file mode 100644 index 00000000000..dc9a7b8495e --- /dev/null +++ b/packages/store/src/types.ts @@ -0,0 +1,4 @@ +export type { CacheCapabilitiesManager } from './-types/q/cache-capabilities-manager'; +export type { ModelSchema } from './-types/q/ds-model'; +export type { SchemaService } from './-types/q/schema-service'; +export type { BaseFinderOptions, FindRecordOptions, QueryOptions, FindAllOptions } from './-types/q/store'; diff --git a/packages/store/tsconfig.json b/packages/store/tsconfig.json index 2eb31085af8..d5b32e8432f 100644 --- a/packages/store/tsconfig.json +++ b/packages/store/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*", "../../@types/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,36 +7,50 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, + "emitDeclarationOnly": true, "experimentalDecorators": true, - // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, - "emitDeclarationOnly": true, "declarationDir": "unstable-preview-types", "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": ["../private-build-infra/virtual-packages/deprecations.d.ts"], - "@ember-data/packages": ["../private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": ["../private-build-infra/virtual-packages/canary-features.d.ts"], - "@warp-drive/build-config/debugging": ["../private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"] + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } }, - "references": [{ "path": "../request" }, { "path": "../tracking" }, { "path": "../core-types" }] + "references": [ + { + "path": "../request" + }, + { + "path": "../tracking" + }, + { + "path": "../core-types" + }, + { + "path": "../build-config" + } + ] } diff --git a/packages/store/vite.config.mjs b/packages/store/vite.config.mjs new file mode 100644 index 00000000000..ca9aa0e126f --- /dev/null +++ b/packages/store/vite.config.mjs @@ -0,0 +1,12 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = ['@ember/runloop', '@ember/object', '@ember/debug']; +export const entryPoints = ['./src/index.ts', './src/types.ts', './src/-private.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/tracking/.eslintrc.cjs b/packages/tracking/.eslintrc.cjs deleted file mode 100644 index 08c92caa96c..00000000000 --- a/packages/tracking/.eslintrc.cjs +++ /dev/null @@ -1,31 +0,0 @@ -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.config(), node.defaults(), typescript.defaults()], -}; diff --git a/packages/tracking/addon-main.cjs b/packages/tracking/addon-main.cjs index d1246413dde..25b3a963d42 100644 --- a/packages/tracking/addon-main.cjs +++ b/packages/tracking/addon-main.cjs @@ -1,94 +1,5 @@ -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'); +'use strict'; -const pkg = require('./package.json'); +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); -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.polyfillUUID = hostOptions.polyfillUUID ?? false; - ownConfig.compatWith = hostOptions.compatWith || null; - ownConfig.debug = debugOptions; - ownConfig.deprecations = Object.assign(DEPRECATIONS, ownConfig.deprecations || {}, hostOptions.deprecations || {}); - ownConfig.features = Object.assign({}, FEATURES, ownConfig.features || {}, hostOptions.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; - }, -}; +module.exports = addonShim(__dirname); diff --git a/packages/tracking/babel.config.js b/packages/tracking/babel.config.js deleted file mode 100644 index 6ea02d74b8c..00000000000 --- a/packages/tracking/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -const macros = require('@ember-data/private-build-infra/src/v2-babel-build-pack'); - -module.exports = { - plugins: [ - ...macros, - // '@embroider/macros/src/babel/macros-babel-plugin.js', - ['@babel/plugin-transform-runtime', { loose: true }], - ['@babel/plugin-transform-typescript', { allowDeclareFields: true }], - ['@babel/plugin-proposal-decorators', { legacy: true, loose: true }], - ['@babel/plugin-transform-private-methods', { loose: true }], - ['@babel/plugin-transform-class-properties', { loose: true }], - ], -}; diff --git a/packages/tracking/babel.config.mjs b/packages/tracking/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/tracking/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/tracking/eslint.config.mjs b/packages/tracking/eslint.config.mjs new file mode 100644 index 00000000000..c9ecef455e9 --- /dev/null +++ b/packages/tracking/eslint.config.mjs @@ -0,0 +1,22 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['src'], + allowedImports: ['@glimmer/tracking/primitives/cache', '@ember/-internals/metal', '@glimmer/validator'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), +]; diff --git a/packages/tracking/package.json b/packages/tracking/package.json index d96df062de8..951fd36ca47 100644 --- a/packages/tracking/package.json +++ b/packages/tracking/package.json @@ -13,7 +13,7 @@ "homepage": "https://github.com/emberjs/data", "bugs": "https://github.com/emberjs/data/issues", "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "keywords": [ "ember-addon" @@ -22,19 +22,26 @@ "extends": "../../package.json" }, "dependenciesMeta": { - "@ember-data/private-build-infra": { + "@warp-drive/build-config": { + "injected": true + }, + "@warp-drive/core-types": { "injected": true } }, "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@embroider/macros": "^1.15.1", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-cli-babel": "^8.2.0" }, + "peerDependencies": { + "ember-source": ">= 3.28.0", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50" + }, "files": [ "unstable-preview-types", "addon-main.cjs", - "addon", + "dist", "README.md", "LICENSE.md", "ember-data-logo-dark.svg", @@ -43,48 +50,42 @@ "exports": { ".": { "types": "./unstable-preview-types/index.d.ts", - "default": "./addon/index.js" + "default": "./dist/index.js" }, "./*": { "types": "./unstable-preview-types/*.d.ts", - "default": "./addon/*.js" + "default": "./dist/*.js" } }, "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "build:runtime": "rollup --config && babel ./addon --out-dir addon --plugins=../private-build-infra/src/transforms/babel-plugin-transform-ext.js", - "build:types": "tsc --build", - "_build": "bun run build:runtime && bun run build:types", - "prepack": "bun run _build", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "ember-addon": { "main": "addon-main.cjs", "type": "addon", - "version": 1 + "version": 1, + "externals": [ + "@ember/-internals", + "@ember/-internals/metal", + "@glimmer/validator" + ] }, "devDependencies": { - "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@babel/plugin-proposal-decorators": "^7.24.1", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-runtime": "^7.24.3", "@babel/plugin-transform-typescript": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/preset-typescript": "^7.24.1", - "@babel/runtime": "^7.24.4", - "@embroider/addon-dev": "^4.3.1", "@glimmer/component": "^1.1.2", "@glimmer/validator": "^0.92.0", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", + "@warp-drive/core-types": "0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "rollup": "^4.14.3", "typescript": "^5.4.5", - "walk-sync": "^3.0.0" + "vite": "^5.2.11" }, "ember": { "edition": "octane" diff --git a/packages/tracking/rollup.config.mjs b/packages/tracking/rollup.config.mjs deleted file mode 100644 index 6da8def2ad0..00000000000 --- a/packages/tracking/rollup.config.mjs +++ /dev/null @@ -1,40 +0,0 @@ -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', -}); - -export default { - // This provides defaults that work well alongside `publicEntrypoints` below. - // You can augment this if you need to. - output: addon.output(), - - 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 - // addon. Anything not listed here may get optimized away. - addon.publicEntrypoints(['index.js', '-private.js']), - - nodeResolve({ extensions: ['.ts'] }), - babel({ - extensions: ['.ts'], - babelHelpers: 'runtime', // we should consider "external", - }), - - // Remove leftover build artifacts when starting a new build. - addon.clean(), - ], -}; diff --git a/packages/tracking/src/-private.ts b/packages/tracking/src/-private.ts index e48e5467439..cb6aac318d4 100644 --- a/packages/tracking/src/-private.ts +++ b/packages/tracking/src/-private.ts @@ -3,6 +3,7 @@ import { consumeTag, dirtyTag } from '@glimmer/validator'; import { DEPRECATE_COMPUTED_CHAINS } from '@warp-drive/build-config/deprecations'; import { DEBUG } from '@warp-drive/build-config/env'; +import { getOrSetGlobal, peekTransient, setTransient } from '@warp-drive/core-types/-private'; /** * This package provides primitives that allow powerful low-level @@ -26,7 +27,6 @@ type Transaction = { sub: Set; parent: Transaction | null; }; -let TRANSACTION: Transaction | null = null; function createTransaction() { const transaction: Transaction = { @@ -35,10 +35,12 @@ function createTransaction() { sub: new Set(), parent: null, }; + const TRANSACTION = peekTransient('TRANSACTION'); + if (TRANSACTION) { transaction.parent = TRANSACTION; } - TRANSACTION = transaction; + setTransient('TRANSACTION', transaction); } function maybeConsume(tag: ReturnType | null): void { @@ -65,6 +67,8 @@ function maybeDirty(tag: ReturnType | null): void { * @param obj */ export function subscribe(obj: Tag | Signal): void { + const TRANSACTION = peekTransient('TRANSACTION'); + if (TRANSACTION) { TRANSACTION.sub.add(obj); } else if ('tag' in obj) { @@ -147,8 +151,8 @@ function updateRef(obj: Tag | Signal): void { } function flushTransaction() { - const transaction = TRANSACTION!; - TRANSACTION = transaction.parent; + const transaction = peekTransient('TRANSACTION')!; + setTransient('TRANSACTION', transaction.parent); transaction.cbs.forEach((cb) => { cb(); }); @@ -170,8 +174,8 @@ function flushTransaction() { }); } async function untrack() { - const transaction = TRANSACTION!; - TRANSACTION = transaction.parent; + const transaction = peekTransient('TRANSACTION')!; + setTransient('TRANSACTION', transaction.parent); // defer writes await Promise.resolve(); @@ -186,15 +190,19 @@ async function untrack() { } export function addToTransaction(obj: Tag | Signal): void { - if (TRANSACTION) { - TRANSACTION.props.add(obj); + const transaction = peekTransient('TRANSACTION'); + + if (transaction) { + transaction.props.add(obj); } else { updateRef(obj); } } export function addTransactionCB(method: OpaqueFn): void { - if (TRANSACTION) { - TRANSACTION.cbs.add(method); + const transaction = peekTransient('TRANSACTION'); + + if (transaction) { + transaction.cbs.add(method); } else { method(); } @@ -267,7 +275,7 @@ export function memoTransact(method: T): (...args: unknown[] }; } -export const Signals = Symbol('Signals'); +export const Signals = getOrSetGlobal('Signals', Symbol('Signals')); /** * use to add a signal property to the prototype of something. diff --git a/packages/tracking/src/index.ts b/packages/tracking/src/index.ts index 3829c9e273d..58cfe387712 100644 --- a/packages/tracking/src/index.ts +++ b/packages/tracking/src/index.ts @@ -1,6 +1,7 @@ -import { assert } from '@ember/debug'; import { createCache, getValue } from '@glimmer/tracking/primitives/cache'; +import { assert } from '@warp-drive/build-config/macros'; + export { transact, memoTransact, untracked } from './-private'; // temporary so we can remove the glimmer and ember imports elsewhere diff --git a/packages/tracking/tsconfig.json b/packages/tracking/tsconfig.json index 328036f3260..ca805301705 100644 --- a/packages/tracking/tsconfig.json +++ b/packages/tracking/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["src/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -9,39 +8,38 @@ "moduleDetection": "force", "declarationDir": "unstable-preview-types", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, "emitDeclarationOnly": true, - // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, "rootDir": "src", - + "baseUrl": ".", "declaration": true, "declarationMap": true, "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "@warp-drive/build-config/deprecations": [ - "./node_modules/@ember-data/private-build-infra/virtual-packages/deprecations.d.ts" - ], - "@ember-data/packages": ["./node_modules/@ember-data/private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": [ - "./node_modules/@ember-data/private-build-infra/virtual-packages/canary-features.d.ts" - ], - "@warp-drive/build-config/debugging": [ - "./node_modules/@ember-data/private-build-infra/virtual-packages/debugging.d.ts" - ], - "@warp-drive/build-config/env": ["./node_modules/@ember-data/private-build-infra/virtual-packages/env.d.ts"] + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"] } - } + }, + "references": [ + { + "path": "../build-config" + }, + { + "path": "../core-types" + } + ] } diff --git a/packages/tracking/vite.config.mjs b/packages/tracking/vite.config.mjs new file mode 100644 index 00000000000..3eafa62858e --- /dev/null +++ b/packages/tracking/vite.config.mjs @@ -0,0 +1,17 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + '@glimmer/validator', + '@ember/-internals/metal', + '@glimmer/tracking/primitives/cache', + '@ember/object/compat', +]; +export const entryPoints = ['src/index.ts', 'src/-private.ts']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/packages/unpublished-eslint-rules/package.json b/packages/unpublished-eslint-rules/package.json index 4de9fcf7042..cc0e712f5de 100644 --- a/packages/unpublished-eslint-rules/package.json +++ b/packages/unpublished-eslint-rules/package.json @@ -11,10 +11,6 @@ "volta": { "extends": "../../package.json" }, - "devDependencies": { - "pnpm-sync-dependencies-meta-injected": "0.0.10" - }, - "scripts": { - "_syncPnpm": "bun run sync-dependencies-meta-injected" - } + "devDependencies": {}, + "scripts": {} } diff --git a/packages/unpublished-test-infra/addon-main.cjs b/packages/unpublished-test-infra/addon-main.cjs new file mode 100644 index 00000000000..1e19e33d528 --- /dev/null +++ b/packages/unpublished-test-infra/addon-main.cjs @@ -0,0 +1,13 @@ +'use strict'; + +const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs'); + +const addon = addonShim(__dirname); +addon.options = addon.options || {}; +addon.options['@embroider/macros'] = addon.options['@embroider/macros'] || {}; +addon.options['@embroider/macros'].setOwnConfig = { + VERSION: require('./package.json').version, + ASSERT_ALL_DEPRECATIONS: Boolean(process.env.ASSERT_ALL_DEPRECATIONS), +}; + +module.exports = addon; diff --git a/packages/unpublished-test-infra/addon-test-support/deep-copy.js b/packages/unpublished-test-infra/addon-test-support/deep-copy.js deleted file mode 100644 index eae8a64936a..00000000000 --- a/packages/unpublished-test-infra/addon-test-support/deep-copy.js +++ /dev/null @@ -1,53 +0,0 @@ -export default function deepCopy(obj) { - return _deepCopy(obj, new WeakMap()); -} - -function isPrimitive(value) { - return typeof value !== 'object' || value === null; -} - -function _deepCopy(oldObject, seen) { - if (Array.isArray(oldObject)) { - return copyArray(oldObject, seen); - } else if (!isPrimitive(oldObject)) { - return copyObject(oldObject, seen); - } else { - return oldObject; - } -} - -function copyObject(oldObject, seen) { - let newObject = {}; - - Object.keys(oldObject).forEach((key) => { - let value = oldObject[key]; - let newValue = isPrimitive(value) ? value : seen.get(value); - - if (value && newValue === undefined) { - newValue = newObject[key] = _deepCopy(value, seen); - seen.set(value, newValue); - } - - newObject[key] = newValue; - }); - - return newObject; -} - -function copyArray(oldArray, seen) { - let newArray = []; - - for (let i = 0; i < oldArray.length; i++) { - let value = oldArray[i]; - let newValue = isPrimitive(value) ? value : seen.get(value); - - if (value && newValue === undefined) { - newValue = newArray[i] = _deepCopy(value, seen); - seen.set(value, newValue); - } - - newArray[i] = newValue; - } - - return newArray; -} diff --git a/packages/unpublished-test-infra/addon-test-support/public-props.js b/packages/unpublished-test-infra/addon-test-support/public-props.js deleted file mode 100644 index 4da4f65576c..00000000000 --- a/packages/unpublished-test-infra/addon-test-support/public-props.js +++ /dev/null @@ -1,11 +0,0 @@ -// publicProps(['prop1', 'prop2'], { prop1: val, prop2: val2, privatePro: val3 }) -> { prop1: val, prop2: val2 } -export default function publicProps(publicArgs, obj) { - return Object.assign.apply( - this, - [{}].concat( - Object.keys(obj).map((key) => ({ - [key]: Object.assign.apply(this, [{}].concat(publicArgs.map((prop) => ({ [prop]: obj[key][prop] })))), - })) - ) - ); -} diff --git a/packages/unpublished-test-infra/addon-test-support/version.d.ts b/packages/unpublished-test-infra/addon-test-support/version.d.ts deleted file mode 100644 index 3b86978970d..00000000000 --- a/packages/unpublished-test-infra/addon-test-support/version.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -const VERSION: string; - -export default VERSION; - -export const COMPAT_VERSION: string; diff --git a/packages/unpublished-test-infra/babel.config.mjs b/packages/unpublished-test-infra/babel.config.mjs new file mode 100644 index 00000000000..89e6a46e8a2 --- /dev/null +++ b/packages/unpublished-test-infra/babel.config.mjs @@ -0,0 +1,11 @@ +import { macros } from '@warp-drive/build-config/babel-macros'; + +export default { + plugins: [ + ...macros(), + [ + '@babel/plugin-transform-typescript', + { allExtensions: true, onlyRemoveTypeImports: true, allowDeclareFields: true }, + ], + ], +}; diff --git a/packages/unpublished-test-infra/ember-cli-build.js b/packages/unpublished-test-infra/ember-cli-build.js deleted file mode 100644 index b3f346a9756..00000000000 --- a/packages/unpublished-test-infra/ember-cli-build.js +++ /dev/null @@ -1,34 +0,0 @@ -/* eslint n/no-unpublished-require: 'off' */ - -'use strict'; - -const EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); - -const compatWith = process.env.COMPAT_WITH || '0.0.0'; - -module.exports = function (defaults) { - let app = new EmberAddon(defaults, { - emberData: { - compatWith, - }, - babel: { - // this ensures that the same build-time code stripping that is done - // for library packages is also done for our tests and dummy app - plugins: [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith, - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ], - }, - 'ember-cli-babel': { - throwUnlessParallelizable: true, - enableTypeScriptTransform: true, - }, - }); - - return app.toTree(); -}; diff --git a/packages/unpublished-test-infra/index.js b/packages/unpublished-test-infra/index.js deleted file mode 100644 index 31460ea85c7..00000000000 --- a/packages/unpublished-test-infra/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; -// eslint-disable-next-line n/no-unpublished-require -const merge = require('broccoli-merge-trees'); -const version = require('@ember-data/private-build-infra/src/create-version-module'); -const addonBuildConfigForDataPackage = require('@ember-data/private-build-infra/src/addon-build-config-for-data-package'); - -const addonBaseConfig = addonBuildConfigForDataPackage(require('./package.json')); - -module.exports = Object.assign({}, addonBaseConfig, { - treeForAddonTestSupport(existingTree) { - const options = this.getEmberDataConfig(); - let compatVersion = options.compatWith; - let tree = merge([existingTree, version(compatVersion)]); - - return this.debugTree(this._super.treeForAddonTestSupport.call(this, tree), 'test-support'); - }, -}); diff --git a/packages/unpublished-test-infra/package.json b/packages/unpublished-test-infra/package.json index 2fff6a024ac..ee5d30ce754 100644 --- a/packages/unpublished-test-infra/package.json +++ b/packages/unpublished-test-infra/package.json @@ -14,25 +14,22 @@ "license": "MIT", "author": "", "files": [ - "addon-test-support", - "src", - "index.js", - "dist", - "tsconfig.json" + "unstable-preview-types", + "addon-main.cjs", + "testem", + "dist" ], - "typesVersions": { - "*": { - "test-support": [ - "dist/addon-test-support/index.d.ts" - ], - "test-support/*": [ - "dist/addon-test-support/*", - "dist/addon-test-support/*/index.d.ts" - ], - "*": [ - "dist/addon/*", - "dist/addon/*/index.d.ts" - ] + "exports": { + ".": { + "types": "./unstable-preview-types/index.d.ts", + "default": "./dist/index.js" + }, + "./testem/*": { + "default": "./testem/*.js" + }, + "./*": { + "types": "./unstable-preview-types/*.d.ts", + "default": "./dist/*.js" } }, "directories": { @@ -40,48 +37,19 @@ "test": "tests" }, "scripts": { - "build:types": "tsc --build --emitDeclarationOnly", - "_build": "bun run build:types", - "_syncPnpm": "bun run sync-dependencies-meta-injected" - }, - "peerDependencies": { - "qunit": "^2.20.1" + "build:pkg": "vite build;", + "prepack": "bun run build:pkg", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "peerDependenciesMeta": { "qunit": { "optional": true + }, + "@warp-drive/diagnostic": { + "optional": true } }, - "dependencies": { - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", - "@ember-data/request": "workspace:5.4.0-alpha.64", - "@ember-data/store": "workspace:5.4.0-alpha.64", - "@ember-data/tracking": "workspace:5.4.0-alpha.64", - "@ember/edition-utils": "^1.2.0", - "@ember/test-helpers": "^3.3.0", - "@embroider/macros": "^1.15.1", - "@types/qunit": "^2.19.10", - "@warp-drive/core-types": "workspace:0.0.0-alpha.50", - "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", - "broccoli-merge-trees": "^4.2.0", - "chalk": "^4.1.2", - "ember-auto-import": "^2.7.2", - "ember-cli-babel": "^8.2.0", - "ember-cli-blueprint-test-helpers": "^0.19.2", - "ember-get-config": "^2.1.1", - "qunit": "^2.20.1", - "semver": "^7.6.0", - "testem": "^3.12.0", - "typescript": "^5.4.5", - "webpack": "^5.91.0" - }, "dependenciesMeta": { - "@ember-data/private-build-infra": { - "injected": true - }, - "@ember/string": { - "injected": true - }, "@ember-data/store": { "injected": true }, @@ -96,39 +64,64 @@ }, "@ember-data/tracking": { "injected": true + }, + "@ember-data/build-config": { + "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, + "peerDependencies": { + "qunit": "^2.20.1", + "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "@ember/test-helpers": "^3.3.0" + }, + "dependencies": { + "@embroider/macros": "^1.15.1", + "chalk": "^4.1.2", + "qunit": "^2.20.1", + "semver": "^7.6.0", + "testem": "^3.12.0", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1" + }, "devDependencies": { "@babel/core": "^7.24.4", - "@babel/runtime": "^7.24.4", - "@ember/optional-features": "^2.1.0", - "@ember/string": "3.1.1", + "@babel/plugin-transform-typescript": "^7.24.4", + "@babel/preset-env": "^7.24.4", + "@babel/preset-typescript": "^7.24.1", + "@ember/test-helpers": "^3.3.0", "@glimmer/component": "^1.1.2", - "@glimmer/tracking": "^1.1.2", + "@ember/string": "^3.1.1", "@types/semver": "^7.5.8", - "ember-cli": "~5.7.0", - "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-disable-prototype-extensions": "^1.1.3", - "ember-load-initializers": "^2.1.2", - "ember-maybe-import-regenerator": "^1.0.0", - "ember-qunit": "^8.0.2", - "ember-resolver": "^11.0.1", + "@types/qunit": "^2.19.10", + "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", + "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-source": "~5.7.0", - "loader.js": "^4.7.0", "pnpm-sync-dependencies-meta-injected": "0.0.10", - "webpack": "^5.91.0" + "typescript": "^5.4.5", + "vite": "^5.2.11", + "qunit": "^2.20.1" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember": { "edition": "octane" }, "ember-addon": { - "configPath": "tests/dummy/config" + "main": "addon-main.cjs", + "type": "addon", + "version": 2, + "preventDownleveling": true }, "volta": { "extends": "../../package.json" diff --git a/packages/unpublished-test-infra/src/node-test-helpers/fixture.js b/packages/unpublished-test-infra/src/node-test-helpers/fixture.js deleted file mode 100644 index bf098c0d431..00000000000 --- a/packages/unpublished-test-infra/src/node-test-helpers/fixture.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -const path = require('path'); - -const file = require('ember-cli-blueprint-test-helpers/chai').file; - -module.exports = function (directory, filePath) { - return file(path.join(directory, '../fixtures', filePath)); -}; diff --git a/packages/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest.js b/packages/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest.js deleted file mode 100644 index ca16d36cc44..00000000000 --- a/packages/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest.js +++ /dev/null @@ -1,16 +0,0 @@ -var fs = require('fs'); - -module.exports = function generateFakePackageManifest(name, version) { - if (!fs.existsSync('node_modules')) { - fs.mkdirSync('node_modules'); - } - if (!fs.existsSync('node_modules/' + name)) { - fs.mkdirSync('node_modules/' + name); - } - fs.writeFileSync( - 'node_modules/' + name + '/package.json', - JSON.stringify({ - version: version, - }) - ); -}; diff --git a/packages/unpublished-test-infra/src/node-test-helpers/setup-test-environment.js b/packages/unpublished-test-infra/src/node-test-helpers/setup-test-environment.js deleted file mode 100644 index f342256ec71..00000000000 --- a/packages/unpublished-test-infra/src/node-test-helpers/setup-test-environment.js +++ /dev/null @@ -1,26 +0,0 @@ -const { setEdition, clearEdition } = require('@ember/edition-utils'); - -function enableOctane() { - beforeEach(function () { - setEdition('octane'); - }); - - afterEach(function () { - clearEdition(); - }); -} - -function enableClassic() { - beforeEach(function () { - setEdition('classic'); - }); - - afterEach(function () { - clearEdition(); - }); -} - -module.exports = { - enableOctane, - enableClassic, -}; diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/assert-all-deprecations.ts b/packages/unpublished-test-infra/src/test-support/asserts/assert-all-deprecations.ts similarity index 94% rename from packages/unpublished-test-infra/addon-test-support/asserts/assert-all-deprecations.ts rename to packages/unpublished-test-infra/src/test-support/asserts/assert-all-deprecations.ts index 242a0cce23c..4d83aefcf13 100644 --- a/packages/unpublished-test-infra/addon-test-support/asserts/assert-all-deprecations.ts +++ b/packages/unpublished-test-infra/src/test-support/asserts/assert-all-deprecations.ts @@ -1,11 +1,11 @@ -import config from 'ember-get-config'; - import { DEBUG } from '@warp-drive/build-config/env'; import type { ExpandedHooks } from '.'; import { FoundDeprecation } from './assert-deprecation'; -const { ASSERT_ALL_DEPRECATIONS } = config as { ASSERT_ALL_DEPRECATIONS?: boolean }; +import { getOwnConfig } from '@embroider/macros'; + +const { ASSERT_ALL_DEPRECATIONS } = getOwnConfig<{ ASSERT_ALL_DEPRECATIONS?: boolean }>(); const ALL_ASSERTED_DEPRECATIONS: Record = {}; diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/assert-assertion.ts b/packages/unpublished-test-infra/src/test-support/asserts/assert-assertion.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/asserts/assert-assertion.ts rename to packages/unpublished-test-infra/src/test-support/asserts/assert-assertion.ts diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/assert-better.ts b/packages/unpublished-test-infra/src/test-support/asserts/assert-better.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/asserts/assert-better.ts rename to packages/unpublished-test-infra/src/test-support/asserts/assert-better.ts diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/assert-deprecation.ts b/packages/unpublished-test-infra/src/test-support/asserts/assert-deprecation.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/asserts/assert-deprecation.ts rename to packages/unpublished-test-infra/src/test-support/asserts/assert-deprecation.ts diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/assert-notification.ts b/packages/unpublished-test-infra/src/test-support/asserts/assert-notification.ts similarity index 98% rename from packages/unpublished-test-infra/addon-test-support/asserts/assert-notification.ts rename to packages/unpublished-test-infra/src/test-support/asserts/assert-notification.ts index f53223731d8..1ea44b9551a 100644 --- a/packages/unpublished-test-infra/addon-test-support/asserts/assert-notification.ts +++ b/packages/unpublished-test-infra/src/test-support/asserts/assert-notification.ts @@ -5,7 +5,7 @@ import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type Assert from 'ember-data-qunit-asserts'; import type Store from '@ember-data/store'; -import type { CacheOperation, NotificationType } from '@ember-data/store/-private/managers/notification-manager'; +import type { CacheOperation, NotificationType } from '@ember-data/store'; import type { StableDocumentIdentifier } from '@warp-drive/core-types/identifier'; type Counter = { count: number }; diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/assert-warning.ts b/packages/unpublished-test-infra/src/test-support/asserts/assert-warning.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/asserts/assert-warning.ts rename to packages/unpublished-test-infra/src/test-support/asserts/assert-warning.ts diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/check-matcher.ts b/packages/unpublished-test-infra/src/test-support/asserts/check-matcher.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/asserts/check-matcher.ts rename to packages/unpublished-test-infra/src/test-support/asserts/check-matcher.ts diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/index.ts b/packages/unpublished-test-infra/src/test-support/asserts/index.ts similarity index 97% rename from packages/unpublished-test-infra/addon-test-support/asserts/index.ts rename to packages/unpublished-test-infra/src/test-support/asserts/index.ts index c5ab7254f86..379d0efe45e 100644 --- a/packages/unpublished-test-infra/addon-test-support/asserts/index.ts +++ b/packages/unpublished-test-infra/src/test-support/asserts/index.ts @@ -4,8 +4,7 @@ import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Diagnostic } from '@warp-drive/diagnostic/-types'; import type Assert from 'ember-data-qunit-asserts'; - -import { CacheOperation, NotificationType } from '@ember-data/store/-private/managers/notification-manager'; +import type { CacheOperation, NotificationType } from '@ember-data/store'; import type { StableDocumentIdentifier } from '@warp-drive/core-types/identifier'; import { configureAssertAllDeprecations } from './assert-all-deprecations'; diff --git a/packages/unpublished-test-infra/addon-test-support/asserts/utils/is-thenable.ts b/packages/unpublished-test-infra/src/test-support/asserts/utils/is-thenable.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/asserts/utils/is-thenable.ts rename to packages/unpublished-test-infra/src/test-support/asserts/utils/is-thenable.ts diff --git a/packages/unpublished-test-infra/addon-test-support/deprecated-test.ts b/packages/unpublished-test-infra/src/test-support/deprecated-test.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/deprecated-test.ts rename to packages/unpublished-test-infra/src/test-support/deprecated-test.ts diff --git a/packages/unpublished-test-infra/addon-test-support/test-helpers.ts b/packages/unpublished-test-infra/src/test-support/test-helpers.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/test-helpers.ts rename to packages/unpublished-test-infra/src/test-support/test-helpers.ts diff --git a/packages/unpublished-test-infra/addon-test-support/test-in-debug.ts b/packages/unpublished-test-infra/src/test-support/test-in-debug.ts similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/test-in-debug.ts rename to packages/unpublished-test-infra/src/test-support/test-in-debug.ts diff --git a/packages/unpublished-test-infra/addon-test-support/test.ts b/packages/unpublished-test-infra/src/test-support/test.ts similarity index 97% rename from packages/unpublished-test-infra/addon-test-support/test.ts rename to packages/unpublished-test-infra/src/test-support/test.ts index 58b3be4f585..0930eb59201 100644 --- a/packages/unpublished-test-infra/addon-test-support/test.ts +++ b/packages/unpublished-test-infra/src/test-support/test.ts @@ -1,7 +1,7 @@ import { type TestContext } from '@ember/test-helpers'; import { DEBUG } from '@warp-drive/build-config/env'; -import VERSION, { COMPAT_VERSION } from '@ember-data/unpublished-test-infra/test-support/version'; +import VERSION, { COMPAT_VERSION } from './version'; import { DeprecationConfig } from './asserts/assert-deprecation'; // small comparison function for major and minor semver values diff --git a/packages/unpublished-test-infra/addon-test-support/todo.js b/packages/unpublished-test-infra/src/test-support/todo.js similarity index 100% rename from packages/unpublished-test-infra/addon-test-support/todo.js rename to packages/unpublished-test-infra/src/test-support/todo.js diff --git a/packages/unpublished-test-infra/src/test-support/version.ts b/packages/unpublished-test-infra/src/test-support/version.ts new file mode 100644 index 00000000000..af063f65390 --- /dev/null +++ b/packages/unpublished-test-infra/src/test-support/version.ts @@ -0,0 +1,12 @@ +import { getGlobalConfig, getOwnConfig } from '@embroider/macros'; + +type OWNCONFIG = { + VERSION: string; +}; + +const VERSION: string = getOwnConfig().VERSION; +const COMPAT_VERSION: string = getGlobalConfig<{ WarpDrive: { compatWith: string } }>().WarpDrive.compatWith; + +export default VERSION; + +export { COMPAT_VERSION }; diff --git a/packages/unpublished-test-infra/testem.js b/packages/unpublished-test-infra/testem.js deleted file mode 100644 index 165c63b837d..00000000000 --- a/packages/unpublished-test-infra/testem.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - test_page: 'tests/index.html?hidepassed&nocontainer', - disable_watching: true, - launch_in_ci: ['Chrome'], - launch_in_dev: ['Chrome'], - browser_start_timeout: 120, - browser_args: { - Chrome: { - ci: [ - // --no-sandbox is needed when running Chrome inside a container - process.env.CI ? '--no-sandbox' : null, - '--headless', - '--disable-dev-shm-usage', - '--disable-software-rasterizer', - '--mute-audio', - '--remote-debugging-port=0', - '--window-size=1440,900', - ].filter(Boolean), - }, - }, -}; diff --git a/packages/unpublished-test-infra/src/testem/custom-dot-reporter.js b/packages/unpublished-test-infra/testem/custom-dot-reporter.js similarity index 100% rename from packages/unpublished-test-infra/src/testem/custom-dot-reporter.js rename to packages/unpublished-test-infra/testem/custom-dot-reporter.js diff --git a/packages/unpublished-test-infra/src/testem/testem.js b/packages/unpublished-test-infra/testem/testem.js similarity index 100% rename from packages/unpublished-test-infra/src/testem/testem.js rename to packages/unpublished-test-infra/testem/testem.js diff --git a/packages/unpublished-test-infra/tsconfig.json b/packages/unpublished-test-infra/tsconfig.json index f7ee93d1f59..81f8aa6becd 100644 --- a/packages/unpublished-test-infra/tsconfig.json +++ b/packages/unpublished-test-infra/tsconfig.json @@ -1,43 +1,68 @@ { - "include": ["addon-test-support/**/*", "src/**/*", "tests/**/*", "../../@types/ember-data-qunit-asserts"], + "include": ["src/addon-test-support/**/*", "src/**/*", "tests/**/*", "../../@types/ember-data-qunit-asserts"], "compilerOptions": { "baseUrl": ".", + "rootDir": "src", "lib": ["DOM", "ESNext"], "module": "esnext", "target": "esnext", "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - "noEmit": false, - "noImplicitOverride": true, - + "emitDeclarationOnly": true, + "noEmitOnError": false, + "noImplicitOverride": false, // Enable faster builds // but causes us to not rebuild properly "composite": true, "incremental": true, - "declaration": true, "declarationMap": true, - "declarationDir": "dist", + "declarationDir": "unstable-preview-types", "inlineSourceMap": true, "inlineSources": true, "types": ["ember-source/types"], - "paths": { - "dummy/tests/*": ["tests/*"], - "dummy/*": ["tests/dummy/app/*", "app/*"], - "@ember-data/unpublished-test-infra": ["addon"], - "@ember-data/unpublished-test-infra/*": ["addon/*"], - "@ember-data/unpublished-test-infra/test-support": ["addon-test-support"], - "@ember-data/unpublished-test-infra/test-support/*": ["addon-test-support/*"], - "@warp-drive/build-config/env": ["../private-build-infra/virtual-packages/env.d.ts"], - "ember-data-qunit-asserts": ["../../@types/ember-data-qunit-asserts"] + "ember-data-qunit-asserts": ["../../@types/ember-data-qunit-asserts"], + "@ember-data/request": ["../request/unstable-preview-types"], + "@ember-data/request/*": ["../request/unstable-preview-types/*"], + "@ember-data/store": ["../store/unstable-preview-types"], + "@ember-data/store/*": ["../store/unstable-preview-types/*"], + "@ember-data/tracking": ["../tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../tracking/unstable-preview-types/*"], + "@warp-drive/build-config": ["../build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../core-types/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../diagnostic/unstable-preview-types/*"] } - } + }, + "references": [ + { + "path": "../diagnostic" + }, + { + "path": "../build-config" + }, + { + "path": "../store" + }, + { + "path": "../request" + }, + { + "path": "../core-types" + }, + { + "path": "../tracking" + } + ] } diff --git a/packages/unpublished-test-infra/vite.config.mjs b/packages/unpublished-test-infra/vite.config.mjs new file mode 100644 index 00000000000..7a2bfa665b2 --- /dev/null +++ b/packages/unpublished-test-infra/vite.config.mjs @@ -0,0 +1,18 @@ +import { createConfig } from '@warp-drive/internal-config/vite/config.js'; + +export const externals = [ + 'semver', + '@ember/test-helpers', + '@ember/version', + '@ember/debug', + 'ember-data-qunit-asserts', +]; +export const entryPoints = ['./src/test-support/**/*.ts', './src/test-support/**/*.js']; + +export default createConfig( + { + entryPoints, + externals, + }, + import.meta.resolve +); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba6d722310e..cdfb39b900f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,15 +11,18 @@ overrides: broccoli-merge-trees: ^4.2.0 '@glimmer/validator': ^0.89.0 '@glint/template': ^1.4.0 + '@ember/test-helpers': 3.3.0 + ember-source: ~5.7.0 ember-cli-babel: ^8.2.0 ember-cli-htmlbars: ^6.3.0 ember-cli-typescript: ^5.2.1 + webpack: 5.91.0 '@ember/string': 3.1.1 qunit: 2.19.4 ember-compatibility-helpers: ^1.2.7 testem: ~3.11.0 -packageExtensionsChecksum: ac8b19f4ca6ecfbe7962863e7b49cda1 +packageExtensionsChecksum: 1a6cb317b4c079e99528cb898b9480a9 patchedDependencies: '@ember/test-helpers@3.3.0': @@ -38,14 +41,14 @@ importers: dependencies: turbo: specifier: ^1.13.2 - version: 1.13.2 + version: 1.13.3 devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glint/core': specifier: ^1.4.0 version: 1.4.0(typescript@5.4.5) @@ -73,6 +76,9 @@ importers: command-line-args: specifier: ^5.2.1 version: 5.2.1 + comment-json: + specifier: ^4.2.3 + version: 4.2.3 common-tags: specifier: ^1.8.2 version: 1.8.2 @@ -91,9 +97,6 @@ importers: lerna-changelog: specifier: ^2.2.0 version: 2.2.0 - pnpm-sync-dependencies-meta-injected: - specifier: 0.0.10 - version: 0.0.10 prettier: specifier: ^3.2.5 version: 3.2.5 @@ -124,21 +127,30 @@ importers: config: dependencies: + '@babel/cli': + specifier: ^7.24.5 + version: 7.24.5(@babel/core@7.24.5) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/eslint-parser': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) + '@embroider/addon-dev': + specifier: ^4.3.1 + version: 4.3.1(@glint/template@1.4.0)(rollup@4.17.2) + '@eslint/js': + specifier: ^8.57.0 + version: 8.57.0 + '@rollup/plugin-babel': + specifier: ^6.0.4 + version: 6.0.4(@babel/core@7.24.5)(rollup@4.17.2) '@typescript-eslint/eslint-plugin': - specifier: ^7.6.0 - version: 7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.7.0 + version: 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.6.0 - version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.7.0 + version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) + ember-eslint-parser: + specifier: ^0.4.2 + version: 0.4.2(@babel/core@7.24.5)(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -147,10 +159,10 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) eslint-plugin-mocha: specifier: ^10.4.2 - version: 10.4.2(eslint@8.57.0) + version: 10.4.3(eslint@8.57.0) eslint-plugin-n: specifier: ^16.6.2 version: 16.6.2(eslint@8.57.0) @@ -159,101 +171,137 @@ importers: version: 8.1.1(eslint@8.57.0) eslint-plugin-simple-import-sort: specifier: ^12.0.0 - version: 12.0.0(eslint@8.57.0) + version: 12.1.0(eslint@8.57.0) + globals: + specifier: ^15.0.0 + version: 15.1.0 + minimatch: + specifier: ^9.0.4 + version: 9.0.4 + rollup: + specifier: ^4.17.2 + version: 4.17.2 typescript: specifier: ^5.4.5 version: 5.4.5 + typescript-eslint: + specifier: ^7.7.0 + version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) + vite-plugin-dts: + specifier: ^3.9.0 + version: 3.9.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11) + walk-sync: + specifier: ^3.0.0 + version: 3.0.0 packages/-ember-data: dependencies: '@ember-data/adapter': specifier: workspace:5.4.0-alpha.64 - version: file:packages/adapter(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/serializer': specifier: workspace:5.4.0-alpha.64 - version: file:packages/serializer(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - broccoli-merge-trees: - specifier: ^4.2.0 - version: 4.2.0 - ember-auto-import: - specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) - typescript: - specifier: ^5.4.5 - version: 5.4.5 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + version: 4.0.2(@babel/core@7.24.5) devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) + '@babel/plugin-transform-typescript': + specifier: ^7.24.4 + version: 7.24.5(@babel/core@7.24.5) + '@babel/preset-env': + specifier: ^7.24.4 + version: 7.24.5(@babel/core@7.24.5) + '@babel/preset-typescript': + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.5) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-helpers': + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@types/qunit': + specifier: ^2.19.10 + version: 2.19.10 '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) eslint: specifier: ^8.57.0 version: 8.57.0 pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 + qunit: + specifier: 2.19.4 + version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) + typescript: + specifier: ^5.4.5 + version: 5.4.5 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/adapter': injected: true @@ -267,8 +315,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -281,6 +327,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: @@ -288,88 +336,64 @@ importers: packages/active-record: dependencies: + '@embroider/macros': + specifier: ^1.13.4 + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) - '@babel/preset-env': - specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/request': injected: true @@ -381,6 +405,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: @@ -388,115 +414,94 @@ importers: packages/adapter: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + '@ember/edition-utils': + specifier: 1.2.0 + version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) + ember-cli-path-utils: + specifier: ^1.0.0 + version: 1.0.0 + ember-cli-string-utils: + specifier: ^1.1.0 + version: 1.1.0 ember-cli-test-info: specifier: ^1.0.0 version: 1.0.0 devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) - '@babel/preset-env': - specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@types/jquery': specifier: ^3.5.29 version: 3.5.29 '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config + decorator-transforms: + specifier: ^1.1.0 + version: 1.2.1(@babel/core@7.24.5) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/graph': injected: true @@ -504,8 +509,6 @@ importers: injected: true '@ember-data/legacy-compat': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -516,11 +519,62 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: injected: true + packages/build-config: + dependencies: + '@embroider/addon-shim': + specifier: ^1.8.8 + version: 1.8.8 + '@embroider/macros': + specifier: ^1.13.4 + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + babel-import-util: + specifier: ^2.0.2 + version: 2.1.1 + broccoli-funnel: + specifier: ^3.0.8 + version: 3.0.8 + semver: + specifier: ^7.6.0 + version: 7.6.0 + devDependencies: + '@babel/core': + specifier: ^7.24.4 + version: 7.24.5(supports-color@8.1.1) + '@babel/plugin-transform-typescript': + specifier: ^7.24.4 + version: 7.24.5(@babel/core@7.24.5) + '@babel/preset-typescript': + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.5) + '@types/babel__core': + specifier: ^7.20.5 + version: 7.20.5 + '@types/node': + specifier: ^20.12.7 + version: 20.12.7 + '@warp-drive/internal-config': + specifier: workspace:5.4.0-alpha.64 + version: link:../../config + bun-types: + specifier: ^1.1.3 + version: 1.1.3 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) + packages/codemods: dependencies: chalk: @@ -547,7 +601,7 @@ importers: devDependencies: '@types/bun': specifier: ^1.1.0 - version: 1.1.0 + version: 1.1.1 '@types/jscodeshift': specifier: 0.11.11 version: 0.11.11 @@ -566,133 +620,120 @@ importers: packages/core-types: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + '@embroider/macros': + specifier: ^1.13.4 + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) - '@babel/preset-env': - specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) - '@glimmer/component': - specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 7.24.1(@babel/core@7.24.5) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config - ember-source: - specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': + '@warp-drive/build-config': injected: true packages/debug: dependencies: - '@babel/core': - specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) - ember-auto-import: - specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) - webpack: - specifier: ^5.91.0 - version: 5.91.0 + version: 8.2.0(@babel/core@7.24.5) devDependencies: + '@babel/core': + specifier: ^7.24.4 + version: 7.24.5(supports-color@8.1.1) + '@babel/plugin-transform-typescript': + specifier: ^7.24.4 + version: 7.24.5(@babel/core@7.24.5) + '@babel/preset-env': + specifier: ^7.24.4 + version: 7.24.5(@babel/core@7.24.5) + '@babel/preset-typescript': + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.5) + '@ember-data/legacy-compat': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/model': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config + decorator-transforms: + specifier: ^1.1.0 + version: 1.2.1(@babel/core@7.24.5) + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': + '@ember-data/legacy-compat': + injected: true + '@ember-data/model': injected: true '@ember-data/request': injected: true @@ -702,11 +743,16 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true packages/diagnostic: dependencies: + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: link:../build-config chalk: specifier: ^5.3.0 version: 5.3.0 @@ -720,42 +766,27 @@ importers: specifier: ^0.2.3 version: 0.2.3 devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.24.1(@babel/core@7.24.5) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(ember-source@5.7.0) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) - '@embroider/addon-shim': - specifier: ^1.8.7 - version: 1.8.7 + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config @@ -764,83 +795,68 @@ importers: version: 1.1.3 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) packages/ember: dependencies: '@ember/test-waiters': specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) - '@embroider/addon-shim': - specifier: ^1.8.7 - version: 1.8.7 + version: 3.1.0(@babel/core@7.24.5) '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.24.1(@babel/core@7.24.5) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-helpers': + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) '@embroider/addon-dev': specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 4.3.1(@glint/template@1.4.0)(rollup@4.17.2) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 @@ -859,27 +875,24 @@ importers: '@glint/template': specifier: ^1.4.0 version: 1.4.0 - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config babel-plugin-ember-template-compilation: specifier: ^2.2.1 - version: 2.2.1 + version: 2.2.2 decorator-transforms: - specifier: 1.1.0 - version: 1.1.0(@babel/core@7.24.4) + specifier: ^1.1.0 + version: 1.2.1(@babel/core@7.24.5) + ember-provide-consume-context: + specifier: ^0.3.1 + version: 0.3.1(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-template-imports: specifier: ^4.1.0 version: 4.1.0 @@ -887,14 +900,14 @@ importers: specifier: 0.0.10 version: 0.0.10 rollup: - specifier: ^4.14.3 - version: 4.14.3 + specifier: ^4.17.2 + version: 4.17.2 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/request': injected: true @@ -902,111 +915,78 @@ importers: injected: true '@ember-data/tracking': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true packages/eslint-plugin-ember-data: devDependencies: - pnpm-sync-dependencies-meta-injected: - specifier: 0.0.10 - version: 0.0.10 + '@warp-drive/internal-config': + specifier: workspace:5.4.0-alpha.64 + version: link:../../config packages/graph: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/store': @@ -1015,69 +995,56 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true packages/holodeck: dependencies: '@hono/node-server': - specifier: ^1.10.0 - version: 1.11.0 + specifier: ^1.11.0 + version: 1.11.1 chalk: specifier: ^5.3.0 version: 5.3.0 hono: - specifier: ^4.2.4 - version: 4.2.5 + specifier: ^4.2.5 + version: 4.2.9 devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.24.1(@babel/core@7.24.5) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/request': injected: true @@ -1086,114 +1053,79 @@ importers: packages/json-api: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) expect-type: specifier: ^0.19.0 version: 0.19.0 pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/graph': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -1204,6 +1136,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: @@ -1211,110 +1145,81 @@ importers: packages/legacy-compat: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/graph': injected: true '@ember-data/json-api': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -1325,6 +1230,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: @@ -1332,18 +1239,18 @@ importers: packages/model: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-string-utils: specifier: ^1.1.0 version: 1.1.0 @@ -1354,116 +1261,82 @@ importers: specifier: ~3.0.0 version: 3.0.0 devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 - '@ember-data/debug': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: 7.24.1(@babel/core@7.24.5) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config + decorator-transforms: + specifier: ^1.1.0 + version: 1.2.1(@babel/core@7.24.5) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) expect-type: specifier: ^0.19.0 version: 0.19.0 pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/debug': - 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': @@ -1474,6 +1347,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: @@ -1483,25 +1358,25 @@ importers: dependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-block-scoping': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) babel-import-util: specifier: ^2.0.2 - version: 2.0.2 + version: 2.1.1 babel-plugin-debug-macros: specifier: ^0.3.4 - version: 0.3.4(@babel/core@7.24.4) + version: 0.3.4(@babel/core@7.24.5) babel-plugin-filter-imports: specifier: ^4.0.0 version: 4.0.0 @@ -1525,7 +1400,7 @@ importers: version: 4.1.2 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-path-utils: specifier: ^1.0.0 version: 1.0.0 @@ -1554,242 +1429,172 @@ importers: packages/request: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@ember/test-waiters': specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 7.24.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': + '@warp-drive/build-config': injected: true '@warp-drive/core-types': injected: true packages/request-utils: dependencies: + '@embroider/macros': + specifier: ^1.13.4 + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 7.24.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true packages/rest: dependencies: + '@embroider/macros': + specifier: ^1.13.4 + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/request': injected: true @@ -1801,6 +1606,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: @@ -1808,124 +1615,71 @@ importers: packages/schema: devDependencies: - '@babel/parser': - specifier: ^7.24.4 - version: 7.24.4 - '@babel/traverse': - specifier: ^7.24.1 - version: 7.24.1(supports-color@8.1.1) - '@types/babel__parser': - specifier: ^7.1.1 - version: 7.1.1 - '@types/babel__traverse': - specifier: ^7.20.5 - version: 7.20.5 bun-types: specifier: 1.1.3 version: 1.1.3 - chalk: - specifier: ^5.3.0 - version: 5.3.0 - typescript: - specifier: ^5.4.5 - version: 5.4.5 packages/schema-record: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/store': @@ -1934,113 +1688,95 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true packages/serializer: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + '@ember/edition-utils': + specifier: 1.2.0 + version: 1.2.0 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) + ember-cli-path-utils: + specifier: ^1.0.0 + version: 1.0.0 + ember-cli-string-utils: + specifier: ^1.1.0 + version: 1.1.0 ember-cli-test-info: specifier: ^1.0.0 version: 1.0.0 devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config + decorator-transforms: + specifier: ^1.1.0 + version: 1.2.1(@babel/core@7.24.5) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: '@ember-data/legacy-compat': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/store': @@ -2049,6 +1785,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: @@ -2056,241 +1794,143 @@ importers: packages/store: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.1(@babel/core@7.24.5) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 3.1.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + version: 1.1.2(@babel/core@7.24.5) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config + decorator-transforms: + specifier: ^1.1.0 + version: 1.2.1(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) expect-type: specifier: ^0.19.0 version: 0.19.0 pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 - webpack: - specifier: ^5.91.0 - version: 5.91.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/tracking': injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true packages/tracking: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) devDependencies: - '@babel/cli': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-decorators': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': - specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': - specifier: ^7.24.3 - version: 7.24.3(@babel/core@7.24.4) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) - '@babel/runtime': - specifier: ^7.24.4 - version: 7.24.4 - '@embroider/addon-dev': - specifier: ^4.3.1 - version: 4.3.1(@glint/template@1.4.0)(rollup@4.14.3) + version: 7.24.1(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/validator': specifier: ^0.89.0 version: 0.89.0 - '@rollup/plugin-babel': - specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.4)(rollup@4.14.3) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.14.3) + '@warp-drive/core-types': + specifier: 0.0.0-alpha.50 + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 - rollup: - specifier: ^4.14.3 - version: 4.14.3 typescript: specifier: ^5.4.5 version: 5.4.5 - walk-sync: - specifier: ^3.0.0 - version: 3.0.0 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': + '@warp-drive/build-config': + injected: true + '@warp-drive/core-types': injected: true - packages/unpublished-eslint-rules: - devDependencies: - pnpm-sync-dependencies-meta-injected: - specifier: 0.0.10 - version: 0.0.10 + packages/unpublished-eslint-rules: {} packages/unpublished-test-infra: dependencies: - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) - '@ember/edition-utils': - specifier: ^1.2.0 - version: 1.2.0 - '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) - '@types/qunit': - specifier: ^2.19.10 - version: 2.19.10 - '@warp-drive/core-types': - specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - '@warp-drive/diagnostic': - specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) - broccoli-merge-trees: - specifier: ^4.2.0 - version: 4.2.0 + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) chalk: specifier: ^4.1.2 version: 4.1.2 - ember-auto-import: - specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: - specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) - ember-cli-blueprint-test-helpers: - specifier: ^0.19.2 - version: 0.19.2(ember-cli@5.7.0) - ember-get-config: - specifier: ^2.1.1 - version: 2.1.1(@babel/core@7.24.4)(@glint/template@1.4.0) qunit: specifier: 2.19.4 version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) @@ -2300,75 +1940,66 @@ importers: testem: specifier: ~3.11.0 version: 3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq) - typescript: - specifier: ^5.4.5 - version: 5.4.5 - webpack: - specifier: ^5.91.0 - version: 5.91.0 devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) - '@babel/runtime': + version: 7.24.5(supports-color@8.1.1) + '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4 - '@ember/optional-features': - specifier: ^2.1.0 - version: 2.1.0 + version: 7.24.5(@babel/core@7.24.5) + '@babel/preset-env': + specifier: ^7.24.4 + version: 7.24.5(@babel/core@7.24.5) + '@babel/preset-typescript': + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.5) + '@ember-data/request': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-helpers': + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) - '@glimmer/tracking': - specifier: ^1.1.2 - version: 1.1.2 + version: 1.1.2(@babel/core@7.24.5) + '@types/qunit': + specifier: ^2.19.10 + version: 2.19.10 '@types/semver': specifier: ^7.5.8 version: 7.5.8 - ember-cli: - specifier: ~5.7.0 - version: 5.7.0 - ember-cli-dependency-checker: - specifier: ^3.3.2 - version: 3.3.2(ember-cli@5.7.0) - ember-cli-htmlbars: - specifier: ^6.3.0 - version: 6.3.0 - ember-cli-inject-live-reload: - specifier: ^2.1.0 - version: 2.1.0 - ember-cli-test-loader: - specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) - ember-disable-prototype-extensions: - specifier: ^1.1.3 - version: 1.1.3 - ember-load-initializers: - specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) - ember-maybe-import-regenerator: - specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) - ember-qunit: - specifier: ^8.0.2 - version: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) - ember-resolver: - specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + '@warp-drive/core-types': + specifier: workspace:0.0.0-alpha.50 + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/diagnostic': + specifier: workspace:0.0.0-alpha.50 + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) + '@warp-drive/internal-config': + specifier: workspace:5.4.0-alpha.64 + version: link:../../config ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) - loader.js: - specifier: ^4.7.0 - version: 4.7.0 + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + vite: + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.7) dependenciesMeta: - '@ember-data/private-build-infra': + '@ember-data/build-config': injected: true '@ember-data/request': injected: true @@ -2376,7 +2007,7 @@ importers: injected: true '@ember-data/tracking': injected: true - '@ember/string': + '@warp-drive/build-config': injected: true '@warp-drive/core-types': injected: true @@ -2387,58 +2018,64 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@ember-data/adapter': specifier: workspace:5.4.0-alpha.64 - version: file:packages/adapter(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/serializer': specifier: workspace:5.4.0-alpha.64 - version: file:packages/serializer(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) + '@ember/edition-utils': + specifier: ^1.2.0 + version: 1.2.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-helpers': + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config @@ -2450,10 +2087,10 @@ importers: version: 0.19.2(ember-cli@5.7.0) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -2476,8 +2113,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -2505,49 +2140,46 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/active-record': specifier: workspace:5.4.0-alpha.64 - version: file:packages/active-record(@babel/core@7.24.4)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/active-record(@babel/core@7.24.5)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/rest': specifier: workspace:5.4.0-alpha.64 - version: file:packages/rest(@babel/core@7.24.4)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/rest(@babel/core@7.24.5)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -2556,37 +2188,43 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/addon-shim': specifier: ^1.8.7 version: 1.8.7 '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/diagnostic': specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -2598,25 +2236,25 @@ importers: version: 2.1.0 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -2633,7 +2271,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/active-record': @@ -2648,8 +2286,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -2664,6 +2300,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': @@ -2685,10 +2323,10 @@ importers: devDependencies: '@ember-data/codemods': specifier: workspace:5.4.0-alpha.64 - version: link:../../packages/codemods + version: file:packages/codemods '@types/bun': specifier: ^1.1.0 - version: 1.1.0 + version: 1.1.1 '@types/jscodeshift': specifier: 0.11.11 version: 0.11.11 @@ -2706,7 +2344,10 @@ importers: version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) tsx: specifier: ^4.7.2 - version: 4.7.2 + version: 4.9.3 + dependenciesMeta: + '@ember-data/codemods': + injected: true tests/docs: devDependencies: @@ -2724,79 +2365,85 @@ importers: dependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/serializer': specifier: workspace:5.4.0-alpha.64 - version: file:packages/serializer(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/optional-features': specifier: ^2.1.0 version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/addon-shim': specifier: ^1.8.7 version: 1.8.7 '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/diagnostic': specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -2808,22 +2455,22 @@ importers: version: 2.1.0 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -2834,7 +2481,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/debug': @@ -2861,10 +2508,14 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': injected: true + '@warp-rive/build-config': + injected: true ember-inflector: injected: true @@ -2876,43 +2527,40 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -2921,40 +2569,46 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/addon-shim': specifier: ^1.8.7 version: 1.8.7 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/diagnostic': specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -2966,25 +2620,25 @@ importers: version: 2.1.0 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -3001,7 +2655,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/debug': @@ -3014,8 +2668,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -3028,6 +2680,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': @@ -3043,43 +2697,40 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -3088,28 +2739,34 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/addon-shim': specifier: ^1.8.7 version: 1.8.7 '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/diagnostic': specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) '@warp-drive/holodeck': specifier: workspace:0.0.0-alpha.50 version: file:packages/holodeck(@ember-data/request@5.4.0-alpha.64)(@warp-drive/core-types@0.0.0-alpha.50) @@ -3118,13 +2775,13 @@ importers: version: link:../../config ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -3136,25 +2793,25 @@ importers: version: 2.1.0 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -3171,7 +2828,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/debug': @@ -3184,8 +2841,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -3198,6 +2853,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': @@ -3215,76 +2872,79 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/adapter': specifier: workspace:5.4.0-alpha.64 - version: file:packages/adapter(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/serializer': specifier: workspace:5.4.0-alpha.64 - version: file:packages/serializer(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/optional-features': specifier: ^2.1.0 version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/addon-shim': specifier: ^1.8.7 version: 1.8.7 '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/diagnostic': specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -3296,22 +2956,22 @@ importers: version: 2.1.0 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -3319,7 +2979,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/adapter': @@ -3330,8 +2990,6 @@ importers: injected: true '@ember-data/legacy-compat': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -3344,6 +3002,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': @@ -3359,19 +3019,16 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: 7.24.5 '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -3380,25 +3037,31 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/addon-shim': specifier: ^1.8.7 version: 1.8.7 '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/diagnostic': specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) '@warp-drive/holodeck': specifier: workspace:0.0.0-alpha.50 version: file:packages/holodeck(@ember-data/request@5.4.0-alpha.64)(@warp-drive/core-types@0.0.0-alpha.50) @@ -3410,13 +3073,13 @@ importers: version: 1.1.3 ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -3434,25 +3097,25 @@ importers: version: 4.0.2 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -3469,17 +3132,17 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': @@ -3497,73 +3160,79 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/adapter': specifier: workspace:5.4.0-alpha.64 - version: file:packages/adapter(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/optional-features': specifier: ^2.1.0 version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -3575,22 +3244,22 @@ importers: version: 2.1.0 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-qunit: specifier: ^8.0.2 - version: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) + version: 8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -3599,12 +3268,12 @@ importers: version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) qunit-dom: specifier: ^3.1.1 - version: 3.1.1 + version: 3.1.2 typescript: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/adapter': @@ -3631,121 +3300,190 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true ember-inflector: injected: true tests/embroider-basic-compat: - dependencies: - '@ember/string': - specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) - ember-auto-import: - specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-data: - specifier: workspace:5.4.0-alpha.64 - version: file:packages/-ember-data(@babel/core@7.24.4)(@ember/string@3.1.1) - ember-inflector: - specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) - pnpm-sync-dependencies-meta-injected: - specifier: 0.0.10 - version: 0.0.10 - webpack: - specifier: ^5.91.0 - version: 5.91.0 devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 + '@ember-data/adapter': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/debug': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/graph': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/json-api': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/model': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/request': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/request-utils': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/serializer': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/optional-features': specifier: ^2.1.0 version: 2.1.0 + '@ember/string': + specifier: 3.1.1 + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/compat': specifier: ^3.4.7 - version: 3.4.7(@embroider/core@3.4.7) + version: 3.4.9(@embroider/core@3.4.9) '@embroider/core': specifier: ^3.4.7 - version: 3.4.7(@glint/template@1.4.0) + version: 3.4.9(@glint/template@1.4.0) '@embroider/webpack': specifier: ^3.2.3 - version: 3.2.3(@embroider/core@3.4.7)(webpack@5.91.0) + version: 3.2.3(@embroider/core@3.4.9)(webpack@5.91.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': + specifier: workspace:0.0.0-alpha.50 + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config + ember-auto-import: + specifier: ^2.7.0 + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) ember-cli-fastboot: specifier: ^4.1.2 - version: 4.1.2(@babel/core@7.24.4)(ember-cli@5.7.0)(ember-source@5.7.0) + version: 4.1.2(@babel/core@7.24.5)(ember-cli@5.7.0)(ember-source@5.7.0) ember-cli-fastboot-testing: specifier: ^0.6.1 - version: 0.6.1(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0)(webpack@5.91.0) + version: 0.6.1(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0) ember-cli-htmlbars: specifier: ^6.3.0 version: 6.3.0 ember-cli-inject-live-reload: specifier: ^2.1.0 version: 2.1.0 + ember-data: + specifier: workspace:5.4.0-alpha.64 + version: file:packages/-ember-data(@babel/core@7.24.5)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@ember/test-waiters@3.1.0)(ember-source@5.7.0)(qunit@2.19.4) + ember-inflector: + specifier: ^4.0.2 + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-qunit: specifier: ^8.0.2 - version: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) + version: 8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-simple-tree: specifier: ^0.8.4 - version: 0.8.4(@babel/core@7.24.4) + version: 0.8.4(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) loader.js: specifier: ^4.7.0 version: 4.7.0 + pnpm-sync-dependencies-meta-injected: + specifier: 0.0.10 + version: 0.0.10 qunit: specifier: 2.19.4 version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) qunit-dom: specifier: ^3.1.1 - version: 3.1.1 + version: 3.1.2 typescript: specifier: ^5.4.5 version: 5.4.5 + webpack: + specifier: 5.91.0 + version: 5.91.0 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/request': + injected: true + '@ember-data/request-utils': + injected: true + '@ember-data/serializer': + injected: true + '@ember-data/store': + injected: true + '@ember-data/tracking': + injected: true '@ember-data/unpublished-test-infra': injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true + '@warp-drive/core-types': + injected: true ember-data: injected: true ember-inflector: @@ -3759,43 +3497,40 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -3804,46 +3539,49 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/compat': specifier: ^3.4.7 - version: 3.4.7(@embroider/core@3.4.7) + version: 3.4.9(@embroider/core@3.4.9) '@embroider/core': specifier: ^3.4.7 - version: 3.4.7(@glint/template@1.4.0) + version: 3.4.9(@glint/template@1.4.0) '@embroider/webpack': specifier: ^3.2.3 - version: 3.2.3(@embroider/core@3.4.7)(webpack@5.91.0) + version: 3.2.3(@embroider/core@3.4.9)(webpack@5.91.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 '@html-next/vertical-collection': specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) '@types/morgan': specifier: ^1.9.9 version: 1.9.9 '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -3861,34 +3599,34 @@ importers: version: 4.0.2 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-data: specifier: workspace:5.4.0-alpha.64 - version: file:packages/-ember-data(@babel/core@7.24.4)(@ember/string@3.1.1) + version: file:packages/-ember-data(@babel/core@7.24.5)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@ember/test-waiters@3.1.0)(ember-source@5.7.0)(qunit@2.19.4) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-page-title: specifier: ^8.2.3 version: 8.2.3(ember-source@5.7.0) ember-qunit: specifier: ^8.0.2 - version: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) + version: 8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -3915,7 +3653,7 @@ importers: version: 0.3.0 qunit-dom: specifier: ^3.1.1 - version: 3.1.1 + version: 3.1.2 silent-error: specifier: ^1.1.1 version: 1.1.1 @@ -3923,7 +3661,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/debug': @@ -3936,8 +3674,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -3961,44 +3697,68 @@ importers: dependencies: '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-data: specifier: workspace:5.4.0-alpha.64 - version: file:packages/-ember-data(@babel/core@7.24.4)(@ember/string@3.1.1) + version: file:packages/-ember-data(@babel/core@7.24.5)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@ember/test-waiters@3.1.0)(ember-source@5.7.0)(qunit@2.19.4) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 + '@ember-data/legacy-compat': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/model': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/request': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': + specifier: workspace:5.4.0-alpha.64 + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/optional-features': specifier: ^2.1.0 version: 2.1.0 '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': + specifier: workspace:0.0.0-alpha.50 + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config @@ -4007,16 +3767,16 @@ importers: version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) ember-cli-fastboot: specifier: ^4.1.2 - version: 4.1.2(@babel/core@7.24.4)(ember-cli@5.7.0)(ember-source@5.7.0) + version: 4.1.2(@babel/core@7.24.5)(ember-cli@5.7.0)(ember-source@5.7.0) ember-cli-fastboot-testing: specifier: ^0.6.1 - version: 0.6.1(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0)(webpack@5.91.0) + version: 0.6.1(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0) ember-cli-htmlbars: specifier: ^6.3.0 version: 6.3.0 @@ -4028,22 +3788,22 @@ importers: version: 5.1.2 ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-qunit: specifier: ^8.0.2 - version: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) + version: 8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-simple-tree: specifier: ^0.8.4 - version: 0.8.4(@babel/core@7.24.4) + version: 0.8.4(@babel/core@7.24.5) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -4052,15 +3812,29 @@ importers: version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) qunit-dom: specifier: ^3.1.1 - version: 3.1.1 + version: 3.1.2 typescript: specifier: ^5.4.5 version: 5.4.5 dependenciesMeta: + '@ember-data/legacy-compat': + injected: true + '@ember-data/model': + injected: true + '@ember-data/request': + injected: true + '@ember-data/store': + injected: true + '@ember-data/tracking': + injected: true '@ember-data/unpublished-test-infra': injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true + '@warp-drive/core-types': + injected: true ember-data: injected: true ember-inflector: @@ -4074,34 +3848,34 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: 7.24.5 '@ember/optional-features': specifier: ^2.1.0 version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -4113,31 +3887,29 @@ importers: version: 4.0.2 ember-data: specifier: workspace:5.4.0-alpha.64 - version: file:packages/-ember-data(@babel/core@7.24.4)(@ember/string@3.1.1) + version: file:packages/-ember-data(@babel/core@7.24.5)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@ember/test-waiters@3.1.0)(ember-source@5.7.0)(qunit@2.19.4) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) loader.js: specifier: ^4.7.0 version: 4.7.0 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 zlib: specifier: 1.0.5 version: 1.0.5 dependenciesMeta: - '@ember-data/private-build-infra': - injected: true '@ember/string': injected: true ember-data: @@ -4151,52 +3923,49 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/plugin-transform-typescript': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.24.5(@babel/core@7.24.5) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/adapter': specifier: workspace:5.4.0-alpha.64 - version: file:packages/adapter(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/serializer': specifier: workspace:5.4.0-alpha.64 - version: file:packages/serializer(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -4205,25 +3974,31 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/macros': specifier: ^1.13.4 - version: 1.15.0(@glint/template@1.4.0) + version: 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 '@types/qunit': specifier: ^2.19.10 version: 2.19.10 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/holodeck': specifier: workspace:0.0.0-alpha.50 version: file:packages/holodeck(@ember-data/request@5.4.0-alpha.64)(@warp-drive/core-types@0.0.0-alpha.50) @@ -4250,16 +4025,16 @@ importers: version: 4.0.0 ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cached-decorator-polyfill: specifier: ^1.0.2 - version: 1.0.2(@babel/core@7.24.4)(ember-source@5.7.0) + version: 1.0.2(@babel/core@7.24.5)(ember-source@5.7.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -4274,43 +4049,43 @@ importers: version: 4.0.2 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-data: specifier: workspace:5.4.0-alpha.64 - version: file:packages/-ember-data(@babel/core@7.24.4)(@ember/string@3.1.1) + version: file:packages/-ember-data(@babel/core@7.24.5)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@ember/test-waiters@3.1.0)(ember-source@5.7.0)(qunit@2.19.4) ember-decorators-polyfill: specifier: ^1.1.5 - version: 1.1.5(@babel/core@7.24.4) + version: 1.1.5(@babel/core@7.24.5) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-exam: specifier: ^9.0.0 - version: 9.0.0(ember-qunit@8.0.2)(ember-source@5.7.0)(qunit@2.19.4)(webpack@5.91.0) + version: 9.0.0(ember-qunit@8.0.2)(ember-source@5.7.0)(qunit@2.19.4) ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-qunit: specifier: ^8.0.2 - version: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) + version: 8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 ember-strict-resolver: specifier: ^1.3.0 - version: 1.3.0(@babel/core@7.24.4) + version: 1.3.0(@babel/core@7.24.5) ember-try: specifier: ^3.0.0 version: 3.0.0 @@ -4328,12 +4103,12 @@ importers: version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) qunit-dom: specifier: ^3.1.1 - version: 3.1.1 + version: 3.1.2 typescript: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/adapter': @@ -4348,8 +4123,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -4364,6 +4137,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/holodeck': @@ -4377,44 +4152,47 @@ importers: dependencies: '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-data: specifier: workspace:5.4.0-alpha.64 - version: file:packages/-ember-data(@babel/core@7.24.4)(@ember/string@3.1.1) + version: file:packages/-ember-data(@babel/core@7.24.5)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@ember/test-waiters@3.1.0)(ember-source@5.7.0)(qunit@2.19.4) pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember/optional-features': specifier: ^2.1.0 version: 2.1.0 '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@embroider/compat': specifier: ^3.4.7 - version: 3.4.7(@embroider/core@3.4.7) + version: 3.4.9(@embroider/core@3.4.9) '@embroider/core': specifier: ^3.4.7 - version: 3.4.7(@glint/template@1.4.0) + version: 3.4.9(@glint/template@1.4.0) '@embroider/webpack': specifier: ^3.2.3 - version: 3.2.3(@embroider/core@3.4.7)(webpack@5.91.0) + version: 3.2.3(@embroider/core@3.4.9)(webpack@5.91.0) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 @@ -4426,7 +4204,7 @@ importers: version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -4435,16 +4213,16 @@ importers: version: 6.3.0 ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -4468,43 +4246,40 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@glint/template@1.4.0)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -4513,13 +4288,16 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 @@ -4532,15 +4310,18 @@ importers: '@glint/template': specifier: ^1.4.0 version: 1.4.0 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/diagnostic': specifier: workspace:0.0.0-alpha.50 - version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) + version: file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) '@warp-drive/ember': specifier: workspace:0.0.0-alpha.26 - version: file:packages/ember(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/ember(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@warp-drive/holodeck': specifier: workspace:0.0.0-alpha.50 version: file:packages/holodeck(@ember-data/request@5.4.0-alpha.64)(@warp-drive/core-types@0.0.0-alpha.50) @@ -4549,16 +4330,16 @@ importers: version: link:../../config '@warp-drive/schema-record': specifier: workspace:0.0.0-alpha.50 - version: file:packages/schema-record(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/schema-record(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -4570,25 +4351,25 @@ importers: version: 2.1.0 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -4605,7 +4386,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/debug': @@ -4618,8 +4399,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -4632,6 +4411,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/diagnostic': @@ -4646,7 +4427,7 @@ importers: injected: true tests/warp-drive__schema: - dependencies: + devDependencies: pnpm-sync-dependencies-meta-injected: specifier: 0.0.10 version: 0.0.10 @@ -4659,43 +4440,40 @@ importers: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4(supports-color@8.1.1) + version: 7.24.5(supports-color@8.1.1) '@babel/runtime': specifier: ^7.24.4 - version: 7.24.4 + version: 7.24.5 '@ember-data/debug': specifier: workspace:5.4.0-alpha.64 - version: file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/graph': specifier: workspace:5.4.0-alpha.64 - version: file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/json-api': specifier: workspace:5.4.0-alpha.64 - version: file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/legacy-compat': specifier: workspace:5.4.0-alpha.64 - version: file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + version: file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/model': specifier: workspace:5.4.0-alpha.64 - version: file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': - specifier: workspace:5.4.0-alpha.64 - version: file:packages/private-build-infra(@glint/template@1.4.0) + version: file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) '@ember-data/request': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/request-utils': specifier: workspace:5.4.0-alpha.64 - version: file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/store': specifier: workspace:5.4.0-alpha.64 - version: file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember-data/tracking': specifier: workspace:5.4.0-alpha.64 - version: file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember-data/unpublished-test-infra': specifier: workspace:5.4.0-alpha.64 - version: file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0) + version: file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50) '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -4704,37 +4482,43 @@ importers: version: 2.1.0 '@ember/string': specifier: 3.1.1 - version: 3.1.1(@babel/core@7.24.4) + version: 3.1.1(@babel/core@7.24.5) '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + specifier: 3.3.0 + version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': + specifier: ^3.1.0 + version: 3.1.0(@babel/core@7.24.5) '@glimmer/component': specifier: ^1.1.2 - version: 1.1.2(@babel/core@7.24.4) + version: 1.1.2(@babel/core@7.24.5) '@glimmer/tracking': specifier: ^1.1.2 version: 1.1.2 '@types/qunit': specifier: ^2.19.10 version: 2.19.10 + '@warp-drive/build-config': + specifier: workspace:0.0.0-alpha.1 + version: file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/core-types': specifier: workspace:0.0.0-alpha.50 - version: file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + version: file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) '@warp-drive/internal-config': specifier: workspace:5.4.0-alpha.64 version: link:../../config '@warp-drive/schema-record': specifier: workspace:0.0.0-alpha.50 - version: file:packages/schema-record(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + version: file:packages/schema-record(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) ember-auto-import: specifier: ^2.7.0 - version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + version: 2.7.2(@glint/template@1.4.0) ember-cli: specifier: ~5.7.0 version: 5.7.0 ember-cli-babel: specifier: ^8.2.0 - version: 8.2.0(@babel/core@7.24.4) + version: 8.2.0(@babel/core@7.24.5) ember-cli-dependency-checker: specifier: ^3.3.2 version: 3.3.2(ember-cli@5.7.0) @@ -4746,28 +4530,28 @@ importers: version: 2.1.0 ember-cli-test-loader: specifier: ^3.1.0 - version: 3.1.0(@babel/core@7.24.4) + version: 3.1.0(@babel/core@7.24.5) ember-disable-prototype-extensions: specifier: ^1.1.3 version: 1.1.3 ember-inflector: specifier: ^4.0.2 - version: 4.0.2(@babel/core@7.24.4) + version: 4.0.2(@babel/core@7.24.5) ember-load-initializers: specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.24.4) + version: 2.1.2(@babel/core@7.24.5) ember-maybe-import-regenerator: specifier: ^1.0.0 - version: 1.0.0(@babel/core@7.24.4) + version: 1.0.0(@babel/core@7.24.5) ember-qunit: specifier: ^8.0.2 - version: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) + version: 8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) ember-resolver: specifier: ^11.0.1 - version: 11.0.1(@babel/core@7.24.4)(ember-source@5.7.0) + version: 11.0.1(@babel/core@7.24.5)(ember-source@5.7.0) ember-source: specifier: ~5.7.0 - version: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + version: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) ember-source-channel-url: specifier: ^3.0.0 version: 3.0.0 @@ -4782,7 +4566,7 @@ importers: version: 0.3.0 qunit-dom: specifier: ^3.1.1 - version: 3.1.1 + version: 3.1.2 silent-error: specifier: ^1.1.1 version: 1.1.1 @@ -4790,7 +4574,7 @@ importers: specifier: ^5.4.5 version: 5.4.5 webpack: - specifier: ^5.91.0 + specifier: 5.91.0 version: 5.91.0 dependenciesMeta: '@ember-data/debug': @@ -4803,8 +4587,6 @@ importers: injected: true '@ember-data/model': injected: true - '@ember-data/private-build-infra': - injected: true '@ember-data/request': injected: true '@ember-data/request-utils': @@ -4817,6 +4599,8 @@ importers: injected: true '@ember/string': injected: true + '@warp-drive/build-config': + injected: true '@warp-drive/core-types': injected: true '@warp-drive/schema-record': @@ -4826,10 +4610,6 @@ importers: packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - /@ampproject/remapping@2.3.0: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -4837,14 +4617,14 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@babel/cli@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-HbmrtxyFUr34LwAlV9jS+sSIjUp4FpdtIMGwgufY3AsxrIfsh/HxlMTywsONAZsU0RMYbZtbZFpUCrSGs7o0EA==} + /@babel/cli@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-2qg1mYtJRsOOWF6IUwLP5jI42P8Cc0hQ5TmnjLrik/4DKouO8dFJN80HEz81VmVeUs97yuuf3vQ/9j7Elrcjlg==} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@jridgewell/trace-mapping': 0.3.25 commander: 4.1.1 convert-source-map: 2.0.0 @@ -4855,37 +4635,33 @@ packages: optionalDependencies: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.6.0 - dev: true + dev: false /@babel/code-frame@7.24.2: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.2 + '@babel/highlight': 7.24.5 picocolors: 1.0.0 - /@babel/compat-data@7.24.1: - resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} - engines: {node: '>=6.9.0'} - /@babel/compat-data@7.24.4: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.24.4(supports-color@8.1.1): - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + /@babel/core@7.24.5(supports-color@8.1.1): + resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helpers': 7.24.4(supports-color@8.1.1) - '@babel/parser': 7.24.4 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helpers': 7.24.5(supports-color@8.1.1) + '@babel/parser': 7.24.5 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1(supports-color@8.1.1) - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5(supports-color@8.1.1) + '@babel/types': 7.24.5 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -4894,14 +4670,14 @@ packages: transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.24.1(@babel/core@7.24.4)(eslint@8.57.0): - resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} + /@babel/eslint-parser@7.23.10(@babel/core@7.24.5)(eslint@8.57.0): + resolution: {integrity: sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.57.0 eslint-visitor-keys: 2.1.0 @@ -4912,16 +4688,16 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/generator@7.24.4: - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + /@babel/generator@7.24.5: + resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -4930,77 +4706,60 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.24.1 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@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.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - - /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + /@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@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.23.0 + '@babel/helper-member-expression-to-functions': 7.24.5 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.24.5 semver: 6.3.1 - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.5): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 - /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4): - resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -5016,1089 +4775,1074 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + /@babel/helper-member-expression-to-functions@7.24.5: + resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-module-imports@7.24.3: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-simple-access': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/helper-plugin-utils@7.24.0: - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + /@babel/helper-plugin-utils@7.24.5: + resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(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.20 + '@babel/helper-wrap-function': 7.24.5 - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): + /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.24.5 '@babel/helper-optimise-call-expression': 7.22.5 - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + /@babel/helper-simple-access@7.24.5: + resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-split-export-declaration@7.24.5: + resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-string-parser@7.24.1: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.5: + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + /@babel/helper-wrap-function@7.24.5: + resolution: {integrity: sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/helpers@7.24.4(supports-color@8.1.1): - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + /@babel/helpers@7.24.5(supports-color@8.1.1): + resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1(supports-color@8.1.1) - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5(supports-color@8.1.1) + '@babel/types': 7.24.5 transitivePeerDependencies: - supports-color - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + /@babel/highlight@7.24.5: + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - /@babel/parser@7.24.4: - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + /@babel/parser@7.24.5: + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.4): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.5): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.4): + /@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.5) - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.4): + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.24.5): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.4): + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.5): resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - dev: false + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): + /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5): resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} + /@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-class-static-block@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - - /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5): resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) - /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} + /@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/helper-split-export-declaration': 7.24.5 globals: 11.12.0 - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 '@babel/template': 7.24.0 - /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} + /@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) - /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.4) - dev: false + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.5) - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-simple-access': 7.22.5 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-simple-access': 7.24.5 - /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 - /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} + /@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} + /@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + /@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} + /@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 regenerator-transform: 0.15.2 - /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.4): + /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.5): resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} + /@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} + /@babel/plugin-transform-typescript@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) - /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 - /@babel/preset-env@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} + /@babel/preset-env@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.36.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.5) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) + '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.5) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) + core-js-compat: 3.37.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/preset-flow@7.24.1(@babel/core@7.24.4): + /@babel/preset-flow@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.4) - dev: false + '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.5) - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/types': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/types': 7.24.5 esutils: 2.0.3 - /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): + /@babel/preset-typescript@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5) - /@babel/register@7.23.7(@babel/core@7.24.4): + /@babel/register@7.23.7(@babel/core@7.24.5): resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 pirates: 4.0.6 source-map-support: 0.5.21 - dev: false /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} @@ -6108,8 +5852,8 @@ packages: dependencies: regenerator-runtime: 0.13.11 - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + /@babel/runtime@7.24.5: + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -6119,38 +5863,38 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 /@babel/traverse@7.23.9: resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@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.24.4 - '@babel/types': 7.24.0 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/traverse@7.24.1(supports-color@8.1.1): - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + /@babel/traverse@7.24.5(supports-color@8.1.1): + resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@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.24.4 - '@babel/types': 7.24.0 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: @@ -6161,15 +5905,15 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + /@babel/types@7.24.5: + resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 /@cnakazawa/watch@1.0.4: @@ -6190,7 +5934,6 @@ packages: /@colors/colors@1.6.0: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} - dev: false /@dabh/diagnostics@2.0.3: resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} @@ -6198,7 +5941,6 @@ packages: colorspace: 1.1.4 enabled: 2.0.0 kuler: 2.0.0 - dev: false /@ember-data/rfc395-data@0.0.4: resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==} @@ -6219,85 +5961,65 @@ packages: transitivePeerDependencies: - supports-color - /@ember/string@3.1.1(@babel/core@7.24.4): + /@ember/string@3.1.1(@babel/core@7.24.5): resolution: {integrity: sha512-UbXJ+k3QOrYN4SRPHgXCqYIJ+yWWUg1+vr0H4DhdQPTy8LJfyqwZ2tc5uqpSSnEXE+/1KopHBE5J8GDagAg5cg==} engines: {node: 12.* || 14.* || >= 16} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - transitivePeerDependencies: - - '@babel/core' - - supports-color - - /@ember/test-helpers@3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0): - resolution: {integrity: sha512-HEI28wtjnQuEj9+DstHUEEKPtqPAEVN9AAVr4EifVCd3DyEDy0m6hFT4qbap1WxAIktLja2QXGJg50lVWzZc5g==} - engines: {node: 16.* || >= 18} - peerDependencies: - ember-source: '*' - dependencies: - '@ember/test-waiters': 3.1.0(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@simple-dom/interface': 1.4.0 - broccoli-debug: 0.6.5 - broccoli-funnel: 3.0.8 - dom-element-descriptors: 0.5.0 - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-cli-htmlbars: 6.3.0 - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - - '@glint/template' - supports-color - - webpack - patched: true - /@ember/test-helpers@3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(ember-source@5.7.0): + /@ember/test-helpers@3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0): resolution: {integrity: sha512-HEI28wtjnQuEj9+DstHUEEKPtqPAEVN9AAVr4EifVCd3DyEDy0m6hFT4qbap1WxAIktLja2QXGJg50lVWzZc5g==} engines: {node: 16.* || >= 18} peerDependencies: ember-source: '*' dependencies: - '@ember/test-waiters': 3.1.0(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) + '@ember/test-waiters': 3.1.0(@babel/core@7.24.5) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) '@simple-dom/interface': 1.4.0 broccoli-debug: 0.6.5 broccoli-funnel: 3.0.8 dom-element-descriptors: 0.5.0 ember-auto-import: 2.7.2(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-htmlbars: 6.3.0 - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + webpack: 5.91.0 transitivePeerDependencies: - '@babel/core' - '@glint/template' + - '@swc/core' + - esbuild - supports-color - - webpack - dev: true + - uglify-js + - webpack-cli patched: true - /@ember/test-waiters@3.1.0(@babel/core@7.24.4): + /@ember/test-waiters@3.1.0(@babel/core@7.24.5): resolution: {integrity: sha512-bb9h95ktG2wKY9+ja1sdsFBdOms2lB19VWs8wmNpzgHv1NCetonBoV5jHBV4DHt0uS1tg9z66cZqhUVlYs96KQ==} engines: {node: 10.* || 12.* || >= 14.*} dependencies: calculate-cache-key-for-tree: 2.0.0 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-version-checker: 5.1.2 semver: 7.6.0 transitivePeerDependencies: - '@babel/core' - supports-color - /@embroider/addon-dev@4.3.1(@glint/template@1.4.0)(rollup@4.14.3): + /@embroider/addon-dev@4.3.1(@glint/template@1.4.0)(rollup@4.17.2): resolution: {integrity: sha512-CNZ4Y69PPIZAAGGoERjvDcrwOwWTuUmnRYu+XnmqKk0opdlu/PTssO9YWyxp8AnvGd2l7iLCjEn5mpLFvifstA==} engines: {node: 12.* || 14.* || >= 16} hasBin: true dependencies: - '@embroider/core': 3.4.7(@glint/template@1.4.0) + '@embroider/core': 3.4.9(@glint/template@1.4.0) '@rollup/pluginutils': 4.2.1 content-tag: 2.0.1 fs-extra: 10.1.0 minimatch: 3.1.2 - rollup-plugin-copy-assets: 2.0.3(rollup@4.14.3) + rollup-plugin-copy-assets: 2.0.3(rollup@4.17.2) rollup-plugin-delete: 2.0.0 walk-sync: 3.0.0 yargs: 17.7.2 @@ -6308,53 +6030,63 @@ packages: - rollup - supports-color - utf-8-validate - dev: true /@embroider/addon-shim@1.8.7: resolution: {integrity: sha512-JGOQNRj3UR0NdWEg8MsM2eqPLncEwSB1IX+rwntIj22TEKj8biqx7GDgSbeH+ZedijmCh354Hf2c5rthrdzUAw==} engines: {node: 12.* || 14.* || >= 16} dependencies: - '@embroider/shared-internals': 2.5.2 + '@embroider/shared-internals': 2.6.0(supports-color@8.1.1) + broccoli-funnel: 3.0.8 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + + /@embroider/addon-shim@1.8.8: + resolution: {integrity: sha512-+SkD/JJqnmCBJpsjPu419iNA9kQdqojNBrldE7f5H80A4FWUGRO9s622+SwdzKiXCaMWcNeww7Ah7CL/YZPoHg==} + engines: {node: 12.* || 14.* || >= 16} + dependencies: + '@embroider/shared-internals': 2.6.0(supports-color@8.1.1) broccoli-funnel: 3.0.8 + common-ancestor-path: 1.0.1 semver: 7.6.0 transitivePeerDependencies: - supports-color - /@embroider/babel-loader-9@3.1.1(@embroider/core@3.4.7)(supports-color@8.1.1)(webpack@5.91.0): + /@embroider/babel-loader-9@3.1.1(@embroider/core@3.4.9)(supports-color@8.1.1)(webpack@5.91.0): resolution: {integrity: sha512-8mIDRXvwntYIQc2JFVvGXEppHUJRhw+6aEzHtbCZDr4oOKw55IyY+RHzas3JILRq64owLA+Ox0yu6nkwL1ApRQ==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@embroider/core': ^3.4.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@embroider/core': 3.4.7(@glint/template@1.4.0) - babel-loader: 9.1.3(@babel/core@7.24.4)(webpack@5.91.0) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@embroider/core': 3.4.9(@glint/template@1.4.0) + babel-loader: 9.1.3(@babel/core@7.24.5)(webpack@5.91.0) transitivePeerDependencies: - supports-color - webpack dev: true - /@embroider/compat@3.4.7(@embroider/core@3.4.7): - resolution: {integrity: sha512-dCx0+S+cd2L60GFpo5RBT+xug/mtwpDUGsXmmnyKj43oiaZjaG05n/sSWm+52Oxwt1bsPRe6aJrPqL5rPmsWMQ==} + /@embroider/compat@3.4.9(@embroider/core@3.4.9): + resolution: {integrity: sha512-1KuKlCx4wGxxo+GsTeS8AX6S4Ka2Ht6EKYlFsm0Ln38mQyPolIefVUeEURe9FKKaQsOdj8bdPdjJlGU1ZVF8Aw==} engines: {node: 12.* || 14.* || >= 16} hasBin: true peerDependencies: - '@embroider/core': ^3.4.7 + '@embroider/core': ^3.4.9 dependencies: '@babel/code-frame': 7.24.2 - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@babel/runtime': 7.24.4 - '@babel/traverse': 7.24.1(supports-color@8.1.1) - '@embroider/core': 3.4.7(@glint/template@1.4.0) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.5) + '@babel/preset-env': 7.24.5(@babel/core@7.24.5) + '@babel/runtime': 7.24.5 + '@babel/traverse': 7.24.5(supports-color@8.1.1) + '@embroider/core': 3.4.9(@glint/template@1.4.0) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) '@types/babel__code-frame': 7.0.6 '@types/yargs': 17.0.32 assert-never: 1.2.1 - babel-import-util: 2.0.2 - babel-plugin-ember-template-compilation: 2.2.1 + babel-import-util: 2.1.1 + babel-plugin-ember-template-compilation: 2.2.2 babel-plugin-syntax-dynamic-import: 6.18.0 babylon: 6.18.0 bind-decorator: 1.0.11 @@ -6391,17 +6123,17 @@ packages: - utf-8-validate dev: true - /@embroider/core@3.4.7(@glint/template@1.4.0): - resolution: {integrity: sha512-JTXpPBzsIrTdQdv/UdUQVinCxCtcLjHb0CgCksifFyut/JZC+6Dh65eP8KuPuF9eUX0ptxEhr7DQiMNeAD/p7w==} + /@embroider/core@3.4.9(@glint/template@1.4.0): + resolution: {integrity: sha512-+Q1ekptUgUAGYZoDHJ6Ts+KNPXeLbEpQziCutj3NxqT94SuBiL5h6KWDWj86KmrL0gJ4NnRfNrAZt5iV2p1i5A==} engines: {node: 12.* || 14.* || >= 16} dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/parser': 7.24.4 - '@babel/traverse': 7.24.1(supports-color@8.1.1) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/parser': 7.24.5 + '@babel/traverse': 7.24.5(supports-color@8.1.1) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) '@embroider/shared-internals': 2.6.0(supports-color@8.1.1) assert-never: 1.2.1 - babel-plugin-ember-template-compilation: 2.2.1 + babel-plugin-ember-template-compilation: 2.2.2 broccoli-node-api: 1.7.0 broccoli-persistent-filter: 3.1.3 broccoli-plugin: 4.0.7 @@ -6425,24 +6157,20 @@ packages: - canvas - supports-color - utf-8-validate - dev: true - /@embroider/hbs-loader@3.0.3(@embroider/core@3.4.7)(webpack@5.91.0): + /@embroider/hbs-loader@3.0.3(@embroider/core@3.4.9)(webpack@5.91.0): resolution: {integrity: sha512-sI2K3/III1WGGxS+aIf8uW5tgcNiE7APNhThn2ZTwqU47fK20Uz8TJZhst0GfNZFsCsmuQMRUikRJvQU8naSWA==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@embroider/core': ^3.4.0 - webpack: ^5 - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: - '@embroider/core': 3.4.7(@glint/template@1.4.0) + '@embroider/core': 3.4.9(@glint/template@1.4.0) webpack: 5.91.0 dev: true - /@embroider/macros@1.15.0(@glint/template@1.4.0): - resolution: {integrity: sha512-gXh46ZafqYb6AJVoCCaQwYRsqFIwAat/PVCaJgEDKnOgOP/BTyIXwAld0gLZlIgSKkqOccBih83bXMShflKkLg==} + /@embroider/macros@1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0): + resolution: {integrity: sha512-yBavtQBbiCjIW4tTNdoS+5/eu3mckZImrcVFkloRvZ5ZWvs2zqnLJVtfNsPMxhWu6dknFlmLqfuT30+kqnsQbg==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@glint/template': ^1.4.0 @@ -6450,40 +6178,24 @@ packages: '@glint/template': optional: true dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@embroider/shared-internals': 2.5.2 + '@embroider/shared-internals': 2.6.0(supports-color@8.1.1) '@glint/template': 1.4.0 assert-never: 1.2.1 - babel-import-util: 2.0.1 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + babel-import-util: 2.1.1 + ember-cli-babel: 8.2.0(@babel/core@7.24.5) find-up: 5.0.0 lodash: 4.17.21 resolve: 1.22.8 semver: 7.6.0 transitivePeerDependencies: - - supports-color - - /@embroider/shared-internals@2.5.2: - resolution: {integrity: sha512-jNDJ9YlV6Qp9Na9v17qirUewVuq6T0t32nn+bbnFlCRTvmllKluZdYPSC5RuRnEZKTloVYRSF0+f1rgkTIEvxQ==} - engines: {node: 12.* || 14.* || >= 16} - dependencies: - babel-import-util: 2.0.2 - 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.6.0 - typescript-memoize: 1.1.1 - transitivePeerDependencies: + - '@babel/core' - supports-color /@embroider/shared-internals@2.6.0(supports-color@8.1.1): resolution: {integrity: sha512-A2BYQkhotdKOXuTaxvo9dqOIMbk+2LqFyqvfaaePkZcFJvtCkvTaD31/sSzqvRF6rdeBHjdMwU9Z2baPZ55fEQ==} engines: {node: 12.* || 14.* || >= 16} dependencies: - babel-import-util: 2.0.2 + babel-import-util: 2.1.1 debug: 4.3.4(supports-color@8.1.1) ember-rfc176-data: 0.3.18 fs-extra: 9.1.0 @@ -6495,26 +6207,22 @@ packages: typescript-memoize: 1.1.1 transitivePeerDependencies: - supports-color - dev: true - /@embroider/webpack@3.2.3(@embroider/core@3.4.7)(webpack@5.91.0): + /@embroider/webpack@3.2.3(@embroider/core@3.4.9)(webpack@5.91.0): resolution: {integrity: sha512-WXV5nLH4qzykla9ADxqAyP28dJoBihnbByJRN/QRgj0kmNvU2CPqNVhpsVJpgOjSf8bFBVyQwq5bUjj/Kswwew==} engines: {node: 12.* || 14.* || >= 16} peerDependencies: '@embroider/core': ^3.4.7 - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@embroider/babel-loader-9': 3.1.1(@embroider/core@3.4.7)(supports-color@8.1.1)(webpack@5.91.0) - '@embroider/core': 3.4.7(@glint/template@1.4.0) - '@embroider/hbs-loader': 3.0.3(@embroider/core@3.4.7)(webpack@5.91.0) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@embroider/babel-loader-9': 3.1.1(@embroider/core@3.4.9)(supports-color@8.1.1)(webpack@5.91.0) + '@embroider/core': 3.4.9(@glint/template@1.4.0) + '@embroider/hbs-loader': 3.0.3(@embroider/core@3.4.9)(webpack@5.91.0) '@embroider/shared-internals': 2.6.0(supports-color@8.1.1) '@types/supports-color': 8.1.3 assert-never: 1.2.1 - babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0) + babel-loader: 8.3.0(@babel/core@7.24.5)(webpack@5.91.0) babel-preset-env: 1.7.0(supports-color@8.1.1) css-loader: 5.2.7(webpack@5.91.0) csso: 4.2.0 @@ -6523,12 +6231,12 @@ packages: fs-extra: 9.1.0 jsdom: 16.7.0(supports-color@8.1.1) lodash: 4.17.21 - mini-css-extract-plugin: 2.8.1(webpack@5.91.0) + mini-css-extract-plugin: 2.9.0(webpack@5.91.0) semver: 7.6.0 source-map-url: 0.4.1 style-loader: 2.0.0(webpack@5.91.0) supports-color: 8.1.1 - terser: 5.29.2 + terser: 5.31.0 thread-loader: 3.0.4(webpack@5.91.0) webpack: 5.91.0 transitivePeerDependencies: @@ -6537,211 +6245,188 @@ packages: - utf-8-validate dev: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] requiresBuild: true - dev: true optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): @@ -6791,7 +6476,7 @@ packages: '@glimmer/vm': 0.87.1 '@glimmer/wire-format': 0.87.1 - /@glimmer/component@1.1.2(@babel/core@7.24.4): + /@glimmer/component@1.1.2(@babel/core@7.24.5): resolution: {integrity: sha512-XyAsEEa4kWOPy+gIdMjJ8XlzA3qrGH55ZDv6nA16ibalCR17k74BI0CztxuRds+Rm6CtbUVgheCVlcCULuqD7A==} engines: {node: 6.* || 8.* || >= 10.*} dependencies: @@ -6800,7 +6485,7 @@ packages: '@glimmer/util': 0.44.0 broccoli-file-creator: 2.1.1 broccoli-merge-trees: 4.2.0 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) 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 @@ -6808,7 +6493,7 @@ packages: ember-cli-string-utils: 1.1.0 ember-cli-typescript: 5.3.0 ember-cli-version-checker: 3.1.3 - ember-compatibility-helpers: 1.2.7(@babel/core@7.24.4) + ember-compatibility-helpers: 1.2.7(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - supports-color @@ -6866,6 +6551,12 @@ packages: dependencies: '@simple-dom/interface': 1.4.0 + /@glimmer/interfaces@0.92.0: + resolution: {integrity: sha512-SKZvIs+ZPN8F3EH8kEzs7rGIUa+wuV+/3oWYyEiBrqd+VrZlmAxIELM6qZ6oxXT2tx6q1rh2EmA5rWezi6bmYQ==} + dependencies: + '@simple-dom/interface': 1.4.0 + dev: false + /@glimmer/manager@0.87.1: resolution: {integrity: sha512-jEUZZQWcuxKg+Ri/A1HGURm9pBrx13JDHx1djYCnPo96yjtQFYxEG0VcwLq2EtAEpFrekwfO1b6m3JZiFqmtGg==} dependencies: @@ -6972,6 +6663,17 @@ packages: '@handlebars/parser': 2.0.0 simple-html-tokenizer: 0.5.11 + /@glimmer/syntax@0.92.0: + resolution: {integrity: sha512-h8pYBC2cCnEyjbZBip2Yw4qi8S8sjNCYAb57iHek3AIhyFKMM13aTN+/aajFOM4FUTMCVE2B/iAAmO41WRCX4A==} + dependencies: + '@glimmer/env': 0.1.7 + '@glimmer/interfaces': 0.92.0 + '@glimmer/util': 0.92.0 + '@glimmer/wire-format': 0.92.0 + '@handlebars/parser': 2.0.0 + simple-html-tokenizer: 0.5.11 + dev: false + /@glimmer/tracking@1.1.2: resolution: {integrity: sha512-cyV32zsHh+CnftuRX84ALZpd2rpbDrhLhJnTXn9W//QpqdRZ5rdMsxSY9fOsj0CKEc706tmEU299oNnDc0d7tA==} dependencies: @@ -7006,6 +6708,13 @@ packages: '@glimmer/env': 0.1.7 '@glimmer/interfaces': 0.89.0 + /@glimmer/util@0.92.0: + resolution: {integrity: sha512-Fap52smLp8RkCgvozrZG7RysNJ2T6mk1SPoknMzmukbabFVBAzxl5iyY4OXUbmR09j6t2pupjF6sPabnLtL4vw==} + dependencies: + '@glimmer/env': 0.1.7 + '@glimmer/interfaces': 0.92.0 + dev: false + /@glimmer/validator@0.89.0: resolution: {integrity: sha512-yTUp7k5iaWaUcpINri9bTlXP83n85JF+Z5yzsC1KE6F0KJQh8VN7NlUNMx09fM0EAA/SqaKH3xqEfD7AEFB3Lg==} dependencies: @@ -7014,11 +6723,11 @@ packages: '@glimmer/interfaces': 0.89.0 '@glimmer/util': 0.89.0 - /@glimmer/vm-babel-plugins@0.87.1(@babel/core@7.24.4): + /@glimmer/vm-babel-plugins@0.87.1(@babel/core@7.24.5): resolution: {integrity: sha512-VbhYHa+HfGFiTIOOkvFuYPwBTaDvWTAR1Q55RI25JI6Nno0duBLB3UVRTDgHM+iOfbgRN7OSR5XCe/C5X5C5LA==} engines: {node: '>=16'} dependencies: - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.4) + babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' @@ -7040,6 +6749,13 @@ packages: '@glimmer/interfaces': 0.88.1 '@glimmer/util': 0.88.1 + /@glimmer/wire-format@0.92.0: + resolution: {integrity: sha512-yKhfU7b3PN86iqbfKksB+F9PB/RqbVkZlcRpZWRpEL3HnZ0bJUKC9bsOJynOg77PDXuYQXkbDMfL8ngTuxk+rg==} + dependencies: + '@glimmer/interfaces': 0.92.0 + '@glimmer/util': 0.92.0 + dev: false + /@glint/core@1.4.0(typescript@5.4.5): resolution: {integrity: sha512-nq27a/1R6kc3lsuciz8z9IZO1NQCbNkEBxf5KJI7AUrnps6RzQzmq3pmwO24zQYmFcH4sqpod8fleNIpg8YEqg==} hasBin: true @@ -7088,7 +6804,7 @@ packages: ember-modifier: optional: true dependencies: - '@glimmer/component': 1.1.2(@babel/core@7.24.4) + '@glimmer/component': 1.1.2(@babel/core@7.24.5) '@glint/template': 1.4.0 ember-cli-htmlbars: 6.3.0 dev: true @@ -7127,11 +6843,11 @@ packages: /@handlebars/parser@2.0.0: resolution: {integrity: sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==} - /@hono/node-server@1.11.0: - resolution: {integrity: sha512-TLIJq9TMtD1NEG1mVoqNUn1Ita0qSaB5XboZErjFBcO/GJYXwWY4dVdTi9G0lbxtu0x+hJXDItcLaFHb7rlFTw==} + /@hono/node-server@1.11.1: + resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==} engines: {node: '>=18.14.1'} - /@html-next/vertical-collection@4.0.2(@babel/core@7.24.4): + /@html-next/vertical-collection@4.0.2(@babel/core@7.24.5): resolution: {integrity: sha512-S8cgntEDdXrOwdylVGDh1BFe+nX5uuUzzb3teh1FE++/kbqsOfUpXOYRUsEzsqb0fRqcm6eLxvtNb282Zr67rQ==} engines: {node: '>= 14.*'} dependencies: @@ -7139,10 +6855,10 @@ packages: broccoli-funnel: 3.0.8 broccoli-merge-trees: 4.2.0 broccoli-rollup: 5.0.0 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-htmlbars: 6.3.0 ember-cli-version-checker: 5.1.2 - ember-raf-scheduler: 0.3.0(@babel/core@7.24.4) + ember-raf-scheduler: 0.3.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - supports-color @@ -7165,6 +6881,10 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + /@inquirer/figures@1.0.1: + resolution: {integrity: sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw==} + engines: {node: '>=18'} + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -7214,10 +6934,54 @@ packages: dependencies: call-bind: 1.0.7 + /@microsoft/api-extractor-model@7.28.13: + resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 4.0.2 + transitivePeerDependencies: + - '@types/node' + dev: false + + /@microsoft/api-extractor@7.43.0: + resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==} + hasBin: true + dependencies: + '@microsoft/api-extractor-model': 7.28.13 + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 4.0.2 + '@rushstack/rig-package': 0.5.2 + '@rushstack/terminal': 0.10.0 + '@rushstack/ts-command-line': 4.19.1 + lodash: 4.17.21 + minimatch: 3.0.8 + resolve: 1.22.8 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.4.2 + transitivePeerDependencies: + - '@types/node' + dev: false + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: false + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: false + /@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3: resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} requiresBuild: true - dev: true + dev: false optional: true /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: @@ -7568,7 +7332,7 @@ packages: resolution: {integrity: sha512-YfcB2QrX+Wx1o6LD1G2Y2fhDhOix/bAY/oAnMpHoNLsKkWIRbt1oKLkIFvxBMzLwAEPqnYWguJrYC+J6i4ywbw==} engines: {node: '>=12.17'} dependencies: - bole: 5.0.11 + bole: 5.0.12 ndjson: 2.0.0 /@pnpm/manifest-utils@5.0.1(@pnpm/logger@5.0.0): @@ -7733,7 +7497,7 @@ packages: write-file-atomic: 5.0.1 write-yaml-file: 5.0.0 - /@rollup/plugin-babel@6.0.4(@babel/core@7.24.4)(rollup@4.14.3): + /@rollup/plugin-babel@6.0.4(@babel/core@7.24.5)(rollup@4.17.2): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -7746,29 +7510,11 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-module-imports': 7.24.3 - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) - rollup: 4.14.3 - dev: true - - /@rollup/plugin-node-resolve@15.2.3(rollup@4.14.3): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.14.3) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 4.14.3 - dev: true + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + rollup: 4.17.2 + dev: false /@rollup/pluginutils@4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} @@ -7776,9 +7522,8 @@ packages: dependencies: estree-walker: 2.0.2 picomatch: 2.3.1 - dev: true - /@rollup/pluginutils@5.1.0(rollup@4.14.3): + /@rollup/pluginutils@5.1.0(rollup@4.17.2): resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -7790,137 +7535,167 @@ packages: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 4.14.3 - dev: true + rollup: 4.17.2 + dev: false - /@rollup/rollup-android-arm-eabi@4.14.3: - resolution: {integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==} + /@rollup/rollup-android-arm-eabi@4.17.2: + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true - /@rollup/rollup-android-arm64@4.14.3: - resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==} + /@rollup/rollup-android-arm64@4.17.2: + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true - /@rollup/rollup-darwin-arm64@4.14.3: - resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==} + /@rollup/rollup-darwin-arm64@4.17.2: + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true - /@rollup/rollup-darwin-x64@4.14.3: - resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==} + /@rollup/rollup-darwin-x64@4.17.2: + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.14.3: - resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==} + /@rollup/rollup-linux-arm-gnueabihf@4.17.2: + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.14.3: - resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==} + /@rollup/rollup-linux-arm-musleabihf@4.17.2: + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.14.3: - resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==} + /@rollup/rollup-linux-arm64-gnu@4.17.2: + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.14.3: - resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==} + /@rollup/rollup-linux-arm64-musl@4.17.2: + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.14.3: - resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==} + /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.14.3: - resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==} + /@rollup/rollup-linux-riscv64-gnu@4.17.2: + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.14.3: - resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==} + /@rollup/rollup-linux-s390x-gnu@4.17.2: + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.14.3: - resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==} + /@rollup/rollup-linux-x64-gnu@4.17.2: + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.14.3: - resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==} + /@rollup/rollup-linux-x64-musl@4.17.2: + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.14.3: - resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==} + /@rollup/rollup-win32-arm64-msvc@4.17.2: + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.14.3: - resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==} + /@rollup/rollup-win32-ia32-msvc@4.17.2: + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.14.3: - resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==} + /@rollup/rollup-win32-x64-msvc@4.17.2: + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true + /@rushstack/node-core-library@4.0.2: + resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + z-schema: 5.0.5 + dev: false + + /@rushstack/rig-package@0.5.2: + resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} + dependencies: + resolve: 1.22.8 + strip-json-comments: 3.1.1 + dev: false + + /@rushstack/terminal@0.10.0: + resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@rushstack/node-core-library': 4.0.2 + supports-color: 8.1.1 + dev: false + + /@rushstack/ts-command-line@4.19.1: + resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} + dependencies: + '@rushstack/terminal': 0.10.0 + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' + dev: false + /@simple-dom/document@1.4.0: resolution: {integrity: sha512-/RUeVH4kuD3rzo5/91+h4Z1meLSLP66eXqpVAw/4aZmYozkeqUkMprq0znL4psX/adEed5cBgiNJcfMz/eKZLg==} dependencies: @@ -7955,8 +7730,8 @@ packages: engines: {node: '>=18'} dev: true - /@socket.io/component-emitter@3.1.0: - resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + /@socket.io/component-emitter@3.1.2: + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} /@szmarczak/http-timer@1.1.2: resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} @@ -7968,7 +7743,6 @@ packages: /@tootallnate/once@1.1.2: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} - dev: true /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} @@ -7979,21 +7753,41 @@ packages: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} dev: true + /@types/argparse@1.0.38: + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + dev: false + /@types/babel__code-frame@7.0.6: resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} dev: true - /@types/babel__parser@7.1.1: - resolution: {integrity: sha512-baSzIb0QQOUQSglfR9gwXVSbHH91YvY00C9Zjq6E7sPdnp8oyPyUsonIj3SF4wUl0s96vR/kyWeVv30gmM/xZw==} - deprecated: Deprecated + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.5 + dev: true + + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/parser': 7.24.4 + '@babel/types': 7.24.5 + dev: true + + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 dev: true /@types/babel__traverse@7.20.5: resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@types/body-parser@1.19.5: @@ -8011,10 +7805,10 @@ packages: - supports-color dev: true - /@types/bun@1.1.0: - resolution: {integrity: sha512-QGK0yU4jh0OK1A7DyhPkQuKjHQCC5jSJa3dpWIEhHv/rPfb6zLfdArc4/uUUZBMTcjilsafRXnPWO+1owb572Q==} + /@types/bun@1.1.1: + resolution: {integrity: sha512-lUe9rLMhgDCViciZtgDj5CMl2u7uTq/IP149kSZH/Si6FWkCioximABFf+baRQgbm8QlH4bzT0qJRteQFNqeGA==} dependencies: - bun-types: 1.1.0 + bun-types: 1.1.6 dev: true /@types/chai-as-promised@7.1.8: @@ -8041,11 +7835,11 @@ packages: /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.6 + '@types/eslint': 8.56.10 '@types/estree': 1.0.5 - /@types/eslint@8.56.6: - resolution: {integrity: sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==} + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -8053,11 +7847,11 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core@4.17.43: - resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + /@types/express-serve-static-core@4.19.0: + resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: '@types/node': 20.12.7 - '@types/qs': 6.9.14 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -8065,9 +7859,9 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.43 - '@types/qs': 6.9.14 - '@types/serve-static': 1.15.5 + '@types/express-serve-static-core': 4.19.0 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 /@types/fs-extra@8.1.5: resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} @@ -8118,9 +7912,6 @@ packages: /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} @@ -8144,19 +7935,16 @@ packages: dependencies: undici-types: 5.26.5 - /@types/qs@6.9.14: - resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} /@types/qunit@2.19.10: resolution: {integrity: sha512-gVB+rxvxmbyPFWa6yjjKgcumWal3hyqoTXI0Oil161uWfo1OCzWZ/rnEumsx+6uVgrwPrCrhpQbLkzfildkSbg==} + dev: true /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true - /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: @@ -8178,12 +7966,12 @@ packages: '@types/mime': 1.3.5 '@types/node': 20.12.7 - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 '@types/node': 20.12.7 + '@types/send': 0.17.4 /@types/sizzle@2.3.8: resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} @@ -8207,7 +7995,6 @@ packages: /@types/triple-beam@1.3.5: resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - dev: false /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} @@ -8225,8 +8012,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + /@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -8237,11 +8024,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 graphemer: 1.4.0 @@ -8254,8 +8041,8 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + /@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -8264,10 +8051,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 typescript: 5.4.5 @@ -8275,16 +8062,16 @@ packages: - supports-color dev: false - /@typescript-eslint/scope-manager@7.7.0: - resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + /@typescript-eslint/scope-manager@7.8.0: + resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 dev: false - /@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + /@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -8293,8 +8080,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -8303,13 +8090,13 @@ packages: - supports-color dev: false - /@typescript-eslint/types@7.7.0: - resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + /@typescript-eslint/types@7.8.0: + resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} engines: {node: ^18.18.0 || >=20.0.0} dev: false - /@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5): - resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + /@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5): + resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -8317,8 +8104,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -8330,8 +8117,8 @@ packages: - supports-color dev: false - /@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + /@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -8339,9 +8126,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -8349,17 +8136,77 @@ packages: - typescript dev: false - /@typescript-eslint/visitor-keys@7.7.0: - resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + /@typescript-eslint/visitor-keys@7.8.0: + resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/types': 7.8.0 eslint-visitor-keys: 3.4.3 dev: false /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@volar/language-core@1.11.1: + resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + dependencies: + '@volar/source-map': 1.11.1 + dev: false + + /@volar/source-map@1.11.1: + resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + dependencies: + muggle-string: 0.3.1 + dev: false + + /@volar/typescript@1.11.1: + resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + dependencies: + '@volar/language-core': 1.11.1 + path-browserify: 1.0.1 + dev: false + + /@vue/compiler-core@3.4.26: + resolution: {integrity: sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==} + dependencies: + '@babel/parser': 7.24.5 + '@vue/shared': 3.4.26 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: false + + /@vue/compiler-dom@3.4.26: + resolution: {integrity: sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==} + dependencies: + '@vue/compiler-core': 3.4.26 + '@vue/shared': 3.4.26 + dev: false + + /@vue/language-core@1.8.27(typescript@5.4.5): + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.4.26 + '@vue/shared': 3.4.26 + computeds: 0.0.1 + minimatch: 9.0.4 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + typescript: 5.4.5 + vue-template-compiler: 2.7.16 + dev: false + + /@vue/shared@3.4.26: + resolution: {integrity: sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==} + dev: false + /@webassemblyjs/ast@1.12.1: resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: @@ -8471,7 +8318,6 @@ packages: /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead - dev: true /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -8488,7 +8334,6 @@ packages: dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 - dev: true /acorn-import-assertions@1.9.0(acorn@8.11.3): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} @@ -8507,13 +8352,11 @@ packages: /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} - dev: true /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} @@ -8527,10 +8370,9 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -8551,12 +8393,11 @@ packages: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true /ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} dependencies: - ajv: 8.12.0 + ajv: 8.13.0 /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -8565,12 +8406,12 @@ packages: dependencies: ajv: 6.12.6 - /ajv-keywords@5.1.0(ajv@8.12.0): + /ajv-keywords@5.1.0(ajv@8.13.0): resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 dependencies: - ajv: 8.12.0 + ajv: 8.13.0 fast-deep-equal: 3.1.3 /ajv@6.12.6: @@ -8581,8 +8422,8 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + /ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -8648,6 +8489,7 @@ packages: /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} + dev: true /ansi-regex@3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} @@ -8673,6 +8515,7 @@ packages: /ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} + dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -8782,12 +8625,16 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 dev: false + /array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + dev: true + /array-to-error@1.1.1: resolution: {integrity: sha512-kqcQ8s7uQfg3UViYON3kCMcck3A9exxgq+riVuKy08Mx00VN4EJhK30L2VpjE58LQHKhcE/GRpvbVUhqTvqzGQ==} dependencies: @@ -8812,7 +8659,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 @@ -8824,7 +8671,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: false @@ -8834,7 +8681,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: false @@ -8845,7 +8692,7 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -8875,6 +8722,7 @@ packages: /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true /assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} @@ -8903,7 +8751,6 @@ packages: engines: {node: '>=4'} dependencies: tslib: 2.6.2 - dev: false /async-disk-cache@1.3.5: resolution: {integrity: sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ==} @@ -8967,7 +8814,6 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} @@ -8998,13 +8844,12 @@ packages: js-tokens: 3.0.2 dev: true - /babel-core@7.0.0-bridge.0(@babel/core@7.24.4): + /babel-core@7.0.0-bridge.0(@babel/core@7.24.5): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - dev: false + '@babel/core': 7.24.5(supports-color@8.1.1) /babel-helper-builder-binary-assignment-operator-visitor@6.24.1(supports-color@8.1.1): resolution: {integrity: sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==} @@ -9119,42 +8964,32 @@ packages: engines: {node: '>= 12.*'} dev: true - /babel-import-util@2.0.1: - resolution: {integrity: sha512-N1ZfNprtf/37x0R05J0QCW/9pCAcuI+bjZIK9tlu0JEkwEST7ssdD++gxHRbD58AiG5QE5OuNYhRoEFsc1wESw==} + /babel-import-util@2.1.1: + resolution: {integrity: sha512-3qBQWRjzP9NreSH/YrOEU1Lj5F60+pWSLP0kIdCWxjFHH7pX2YPHIxQ67el4gnMNfYoDxSDGcT0zpVlZ+gVtQA==} engines: {node: '>= 12.*'} - /babel-import-util@2.0.2: - resolution: {integrity: sha512-pR4vWlVujmYENFbceYcLPYCD+ulYGfmNmbTVd6Xp49d0uk+K3sWy6+O+5RLEa0OonXw9rf3hc9xFmglFnS0MWg==} - engines: {node: '>= 12.*'} - - /babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0): + /babel-loader@8.3.0(@babel/core@7.24.5)(webpack@5.91.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: '@babel/core': ^7.0.0 - webpack: '>=2' - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 webpack: 5.91.0 - /babel-loader@9.1.3(@babel/core@7.24.4)(webpack@5.91.0): + /babel-loader@9.1.3(@babel/core@7.24.5)(webpack@5.91.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 - webpack: '>=5' - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) find-cache-dir: 4.0.0 schema-utils: 4.2.0 webpack: 5.91.0 @@ -9172,22 +9007,22 @@ packages: babel-runtime: 6.26.0 dev: true - /babel-plugin-debug-macros@0.2.0(@babel/core@7.24.4): + /babel-plugin-debug-macros@0.2.0(@babel/core@7.24.5): resolution: {integrity: sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-beta.42 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) semver: 5.7.2 - /babel-plugin-debug-macros@0.3.4(@babel/core@7.24.4): + /babel-plugin-debug-macros@0.3.4(@babel/core@7.24.5): resolution: {integrity: sha512-wfel/vb3pXfwIDZUrkoDrn5FHmlWI96PCJ3UCDv2a86poJ3EQrnArNW5KfHSVJ9IOgxHbo748cQt7sDU+0KCEw==} engines: {node: '>=6'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) semver: 5.7.2 /babel-plugin-ember-data-packages-polyfill@0.1.2: @@ -9202,18 +9037,18 @@ packages: dependencies: ember-rfc176-data: 0.3.18 - /babel-plugin-ember-template-compilation@2.2.1: - resolution: {integrity: sha512-alinprIQcLficqkuIyeKKfD4HQOpMOiHK6pt6Skj/yjoPoQYBuwAJ2BoPAlRe9k/URPeVkpMefbN3m6jEp7RsA==} + /babel-plugin-ember-template-compilation@2.2.2: + resolution: {integrity: sha512-wdT2F9/n6uC1rLvAjXCx5+fXbwkl8MIcwt0rg5csWedPbERdzQqhRlDqj0kIwNfUJ9gaXAcKrgSOUXbJcByGOQ==} engines: {node: '>= 12.*'} dependencies: '@glimmer/syntax': 0.84.3 - babel-import-util: 2.0.2 + babel-import-util: 2.1.1 /babel-plugin-filter-imports@4.0.0: resolution: {integrity: sha512-jDLlxI8QnfKd7PtieH6pl4tZJzymzfCDCPGdTq/grgbiYAikwDPp/oL0IlFJn0HQjLpcLkyYhPKkUVneRESw5w==} engines: {node: '>=8'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 lodash: 4.17.21 /babel-plugin-htmlbars-inline-precompile@5.3.1: @@ -9226,46 +9061,45 @@ packages: parse-static-imports: 1.1.0 string.prototype.matchall: 4.0.11 - /babel-plugin-module-resolver@5.0.0: - resolution: {integrity: sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==} - engines: {node: '>= 16'} + /babel-plugin-module-resolver@5.0.2: + resolution: {integrity: sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==} dependencies: - find-babel-config: 2.0.0 - glob: 8.1.0 + find-babel-config: 2.1.1 + glob: 9.3.5 pkg-up: 3.1.0 reselect: 4.1.8 resolve: 1.22.8 - /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4): - resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.24.1 - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) semver: 6.3.1 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.36.1 + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + core-js-compat: 3.37.0 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4): - resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) transitivePeerDependencies: - supports-color @@ -9648,7 +9482,6 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} requiresBuild: true - dev: true /binaryextensions@2.3.0: resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==} @@ -9709,8 +9542,8 @@ packages: raw-body: 1.1.7 safe-json-parse: 1.0.1 - /bole@5.0.11: - resolution: {integrity: sha512-KB0Ye0iMAW5BnNbnLfMSQcnI186hKUzE2fpkZWqcxsoTR7eqzlTidSOMYPHJOn/yR7VGH7uSZp37qH9q2Et0zQ==} + /bole@5.0.12: + resolution: {integrity: sha512-G5H5siOlUrcyvYr7kVlQyYMWip0dZ8qa+Uiy+d9QxOvBY2eaP/g8YsJVwvf3VIMbXmYxZIAOmmsuN3rL5r6gwQ==} dependencies: fast-safe-stringify: 2.1.1 individual: 3.0.0 @@ -9772,13 +9605,13 @@ packages: dependencies: fill-range: 7.0.1 - /broccoli-babel-transpiler@8.0.0(@babel/core@7.24.4): + /broccoli-babel-transpiler@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-3HEp3flvasUKJGWERcrPgM1SWvHJ0O/fmbEtY9L4kDyMSnqjY6hTYvNvgWCIgbwXAYAUlZP0vjAQsmyLNGLwFw==} engines: {node: 16.* || >= 18} peerDependencies: '@babel/core': ^7.17.9 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) broccoli-persistent-filter: 3.1.3 clone: 2.1.2 hash-for-dep: 1.5.1 @@ -10169,7 +10002,7 @@ packages: lodash.defaultsdeep: 4.6.1 matcher-collection: 2.0.1 symlink-or-copy: 1.3.1 - terser: 5.29.2 + terser: 5.31.0 walk-sync: 2.2.0 workerpool: 6.5.1 transitivePeerDependencies: @@ -10201,7 +10034,7 @@ packages: matcher-collection: 2.0.1 source-map-url: 0.4.1 symlink-or-copy: 1.3.1 - terser: 5.29.2 + terser: 5.31.0 walk-sync: 2.2.0 workerpool: 6.5.1 transitivePeerDependencies: @@ -10268,7 +10101,6 @@ packages: /browser-process-hrtime@1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} @@ -10278,8 +10110,8 @@ packages: resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} hasBin: true dependencies: - caniuse-lite: 1.0.30001600 - electron-to-chromium: 1.4.715 + caniuse-lite: 1.0.30001614 + electron-to-chromium: 1.4.752 dev: true /browserslist@4.23.0: @@ -10287,8 +10119,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001600 - electron-to-chromium: 1.4.715 + caniuse-lite: 1.0.30001614 + electron-to-chromium: 1.4.752 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -10309,21 +10141,22 @@ packages: /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} + dev: false - /builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + /builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} dependencies: semver: 7.6.0 - /bun-types@1.1.0: - resolution: {integrity: sha512-GhMDD7TosdJzQPGUOcQD5PZshvXVxDfwGAZs2dq+eSaPsRn3iUCzvpFlsg7Q51bXVzLAUs+FWHlnmpgZ5UggIg==} + /bun-types@1.1.3: + resolution: {integrity: sha512-UB6AlrfSzOmSV3gCTrm2d2e+p/ZeHXrNdrEbFYFL3uy9pIJ02pEYCbtj/HHrDyxKt9YBRH13PDH6Avmt3rKYRA==} dependencies: '@types/node': 20.11.30 '@types/ws': 8.5.10 dev: true - /bun-types@1.1.3: - resolution: {integrity: sha512-UB6AlrfSzOmSV3gCTrm2d2e+p/ZeHXrNdrEbFYFL3uy9pIJ02pEYCbtj/HHrDyxKt9YBRH13PDH6Avmt3rKYRA==} + /bun-types@1.1.6: + resolution: {integrity: sha512-LK2aaJdBBTUkDyN+kRiJHLF3VGrAcdkEHrbBvbmTkccShPw6ZalxxKjWSBJwn4UkikhZdrdA87bZWmfUgkRUYg==} dependencies: '@types/node': 20.11.30 '@types/ws': 8.5.10 @@ -10441,8 +10274,8 @@ packages: dependencies: path-temp: 2.1.0 - /caniuse-lite@1.0.30001600: - resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} + /caniuse-lite@1.0.30001614: + resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==} /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -10464,6 +10297,7 @@ packages: dependencies: chai: 3.5.0 check-error: 1.0.3 + dev: true /chai-as-promised@7.1.1(chai@4.4.1): resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} @@ -10472,11 +10306,13 @@ packages: dependencies: chai: 4.4.1 check-error: 1.0.3 + dev: true /chai-files@1.4.0: resolution: {integrity: sha512-tPTx7H2kpR+wILWHRx8RxpXcRUdc2uH8su505C9R3p5GA+eYbZBXuxWC0RZbyElYi7X7Fp/V/S2PQjkakrT1mQ==} dependencies: assertion-error: 1.1.0 + dev: true /chai@3.5.0: resolution: {integrity: sha512-eRYY0vPS2a9zt5w5Z0aCeWbrXTEyvk7u/Xf71EzNObrjSCPgMm1Nku/D/u2tiqHBX5j40wWhj54YJLtgn8g55A==} @@ -10485,6 +10321,7 @@ packages: assertion-error: 1.1.0 deep-eql: 0.1.3 type-detect: 1.0.0 + dev: true /chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} @@ -10497,6 +10334,7 @@ packages: loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 + dev: true /chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} @@ -10507,6 +10345,7 @@ packages: has-ansi: 2.0.0 strip-ansi: 3.0.1 supports-color: 2.0.0 + dev: true /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -10555,6 +10394,7 @@ packages: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: get-func-name: 2.0.2 + dev: true /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -10584,7 +10424,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -10731,7 +10570,6 @@ packages: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: false /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} @@ -10781,7 +10619,6 @@ packages: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: false /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} @@ -10792,7 +10629,6 @@ packages: dependencies: color-convert: 1.9.3 color-string: 1.9.1 - dev: false /colors@1.0.3: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} @@ -10803,7 +10639,6 @@ packages: dependencies: color: 3.2.1 text-hex: 1.0.0 - dev: false /combined-stream@0.0.7: resolution: {integrity: sha512-qfexlmLp9MyrkajQVyjEDb0Vj+KhRgR/rxLiVhaihlT+ZkX0lReqtH6Ack40CvMDERR4b5eFp3CreskpBs1Pig==} @@ -10819,7 +10654,6 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 - dev: true /command-line-args@5.2.1: resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} @@ -10856,7 +10690,21 @@ packages: /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} - dev: false + requiresBuild: true + + /comment-json@4.2.3: + resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==} + engines: {node: '>= 6'} + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + dev: true + + /common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} /common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} @@ -10893,8 +10741,12 @@ packages: transitivePeerDependencies: - supports-color + /computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + dev: false + /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -11114,11 +10966,9 @@ packages: /content-tag@1.2.2: resolution: {integrity: sha512-9guqKIx2H+78N17otBpl8yLZbQGL5q1vBO/jDb3gF2JjixtcVpC62jDUNxjVMNoaZ09oxRX84ZOD6VX02qkVvg==} - dev: true /content-tag@2.0.1: resolution: {integrity: sha512-jxsETSDs5NbNwyiDuIp672fUMhUyu8Qxc5MOBOJOcgW/fQESI6o5K1LBDrnEE7Bh810a685lWEZHTF4jQYGEEw==} - dev: true /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} @@ -11156,8 +11006,8 @@ packages: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} - /core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + /core-js-compat@3.37.0: + resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} dependencies: browserslist: 4.23.0 @@ -11223,17 +11073,14 @@ packages: resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} engines: {node: '>= 10.13.0'} peerDependencies: - webpack: ^4.27.0 || ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: icss-utils: 5.1.0(postcss@8.4.38) loader-utils: 2.0.4 postcss: 8.4.38 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.38) - postcss-modules-scope: 3.1.1(postcss@8.4.38) + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 @@ -11262,11 +11109,9 @@ packages: /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true /cssom@0.4.4: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true /cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} @@ -11277,7 +11122,6 @@ packages: engines: {node: '>=8'} dependencies: cssom: 0.3.8 - dev: true /ctype@0.5.3: resolution: {integrity: sha512-T6CEkoSV4q50zW3TlTHMbzy1E5+zlnNcY+yb7tWVYlTwPhx9LpnfAkd4wecpWknDyptp4k97LUZeInlf6jdzBg==} @@ -11308,7 +11152,6 @@ packages: abab: 2.0.6 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - dev: true /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} @@ -11343,14 +11186,18 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + /dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} dev: true /dayjs@1.8.36: resolution: {integrity: sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==} dev: true + /de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dev: false + /debug@2.6.9(supports-color@8.1.1): resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -11403,7 +11250,6 @@ packages: /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} @@ -11416,11 +11262,11 @@ packages: mimic-response: 1.0.1 dev: true - /decorator-transforms@1.1.0(@babel/core@7.24.4): - resolution: {integrity: sha512-n3WCgc3PB2t9mLV4SJd87IjTbKeFUGw2sU5eEBYczSmcvj3guX4eMW4XOowlQqGk7I/da6+bwv1ydw1ZtNqWaw==} + /decorator-transforms@1.2.1(@babel/core@7.24.5): + resolution: {integrity: sha512-UUtmyfdlHvYoX3VSG1w5rbvBQ2r5TX1JsE4hmKU9snleFymadA3VACjl6SRfi9YgBCSjBbfQvR1bs9PRW9yBKw==} dependencies: - '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.4) - babel-import-util: 2.0.2 + '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.5) + babel-import-util: 2.1.1 transitivePeerDependencies: - '@babel/core' dev: true @@ -11429,12 +11275,14 @@ packages: resolution: {integrity: sha512-6sEotTRGBFiNcqVoeHwnfopbSpi5NbH1VWJmYCVkmxMmaVTT0bUTrNaGyBwhgP4MZL012W/mkzIn3Da+iDYweg==} dependencies: type-detect: 0.1.1 + dev: true /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} dependencies: type-detect: 4.0.8 + dev: true /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} @@ -11444,11 +11292,6 @@ packages: /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true - /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: @@ -11514,7 +11357,6 @@ packages: p-map: 3.0.0 rimraf: 3.0.2 slash: 3.0.0 - dev: true /delayed-stream@0.0.5: resolution: {integrity: sha512-v+7uBd1pqe5YtgPacIIbZ8HuHeLFVNe4mUEyFDXL6KiqzEykjbw+5mXZXpGFgNVasdL4jWKgaKIXrEHiynN1LA==} @@ -11526,7 +11368,6 @@ packages: /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: true /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -11559,8 +11400,8 @@ packages: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - /dettle@1.0.1: - resolution: {integrity: sha512-/oD3At60ZfhgzpofJtyClNTrIACyMdRe+ih0YiHzAniN0IZnLdLpEzgR6RtGs3kowxUkTnvV/4t1FBxXMUdusQ==} + /dettle@1.0.2: + resolution: {integrity: sha512-pIVcNUx2/R7P45l3wEUsyrZcfbVUCKBmctUN41syh2asCXmrRndJEiNng9+8socNOAEBiBRqsQCh3HhCkOFwwg==} /diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} @@ -11599,7 +11440,6 @@ packages: deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 5.0.0 - dev: true /domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} @@ -11637,68 +11477,24 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.715: - resolution: {integrity: sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==} + /electron-to-chromium@1.4.752: + resolution: {integrity: sha512-P3QJreYI/AUTcfBVrC4zy9KvnZWekViThgQMX/VpJ+IsOBbcX5JFpORM4qWapwWQ+agb2nYAOyn/4PMXOk0m2Q==} /ember-auto-import@2.7.2(@glint/template@1.4.0): resolution: {integrity: sha512-pkWIljmJClYL17YBk8FjO7NrZPQoY9v0b+FooJvaHf/xlDQIBYVP7OaDHbNuNbpj7+wAwSDAnnwxjCoLsmm4cw==} engines: {node: 12.* || 14.* || >= 16} dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.1(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@embroider/shared-internals': 2.5.2 - babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0) - babel-plugin-ember-modules-api-polyfill: 3.5.0 - babel-plugin-ember-template-compilation: 2.2.1 - babel-plugin-htmlbars-inline-precompile: 5.3.1 - babel-plugin-syntax-dynamic-import: 6.18.0 - broccoli-debug: 0.6.5 - broccoli-funnel: 3.0.8 - broccoli-merge-trees: 4.2.0 - broccoli-plugin: 4.0.7 - broccoli-source: 3.0.1 - css-loader: 5.2.7(webpack@5.91.0) - debug: 4.3.4(supports-color@8.1.1) - fs-extra: 10.1.0 - fs-tree-diff: 2.0.1 - handlebars: 4.7.8 - js-string-escape: 1.0.1 - lodash: 4.17.21 - mini-css-extract-plugin: 2.8.1(webpack@5.91.0) - minimatch: 3.1.2 - parse5: 6.0.1 - resolve: 1.22.8 - resolve-package-path: 4.0.3 - semver: 7.6.0 - style-loader: 2.0.0(webpack@5.91.0) - typescript-memoize: 1.1.1 - walk-sync: 3.0.0 - transitivePeerDependencies: - - '@glint/template' - - supports-color - - webpack - dev: true - - /ember-auto-import@2.7.2(@glint/template@1.4.0)(webpack@5.91.0): - resolution: {integrity: sha512-pkWIljmJClYL17YBk8FjO7NrZPQoY9v0b+FooJvaHf/xlDQIBYVP7OaDHbNuNbpj7+wAwSDAnnwxjCoLsmm4cw==} - engines: {node: 12.* || 14.* || >= 16} - dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.1(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@embroider/shared-internals': 2.5.2 - babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) + '@babel/preset-env': 7.24.5(@babel/core@7.24.5) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@embroider/shared-internals': 2.6.0(supports-color@8.1.1) + babel-loader: 8.3.0(@babel/core@7.24.5)(webpack@5.91.0) babel-plugin-ember-modules-api-polyfill: 3.5.0 - babel-plugin-ember-template-compilation: 2.2.1 + babel-plugin-ember-template-compilation: 2.2.2 babel-plugin-htmlbars-inline-precompile: 5.3.1 babel-plugin-syntax-dynamic-import: 6.18.0 broccoli-debug: 0.6.5 @@ -11713,7 +11509,7 @@ packages: handlebars: 4.7.8 js-string-escape: 1.0.1 lodash: 4.17.21 - mini-css-extract-plugin: 2.8.1(webpack@5.91.0) + mini-css-extract-plugin: 2.9.0(webpack@5.91.0) minimatch: 3.1.2 parse5: 6.0.1 resolve: 1.22.8 @@ -11722,37 +11518,41 @@ packages: style-loader: 2.0.0(webpack@5.91.0) typescript-memoize: 1.1.1 walk-sync: 3.0.0 + webpack: 5.91.0 transitivePeerDependencies: - '@glint/template' + - '@swc/core' + - esbuild - supports-color - - webpack + - uglify-js + - webpack-cli - /ember-cache-primitive-polyfill@1.0.1(@babel/core@7.24.4): + /ember-cache-primitive-polyfill@1.0.1(@babel/core@7.24.5): resolution: {integrity: sha512-hSPcvIKarA8wad2/b6jDd/eU+OtKmi6uP+iYQbzi5TQpjsqV6b4QdRqrLk7ClSRRKBAtdTuutx+m+X+WlEd2lw==} engines: {node: 10.* || >= 12} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-version-checker: 5.1.2 - ember-compatibility-helpers: 1.2.7(@babel/core@7.24.4) + ember-compatibility-helpers: 1.2.7(@babel/core@7.24.5) silent-error: 1.1.1 transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /ember-cached-decorator-polyfill@1.0.2(@babel/core@7.24.4)(ember-source@5.7.0): + /ember-cached-decorator-polyfill@1.0.2(@babel/core@7.24.5)(ember-source@5.7.0): resolution: {integrity: sha512-hUX6OYTKltAPAu8vsVZK02BfMTV0OUXrPqvRahYPhgS7D0I6joLjlskd7mhqJMcaXLywqceIy8/s+x8bxF8bpQ==} engines: {node: 14.* || >= 16} peerDependencies: ember-source: '*' dependencies: - '@embroider/macros': 1.15.0(@glint/template@1.4.0) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) '@glimmer/tracking': 1.1.2 babel-import-util: 1.4.1 - ember-cache-primitive-polyfill: 1.0.1(@babel/core@7.24.4) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cache-primitive-polyfill: 1.0.1(@babel/core@7.24.5) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-babel-plugin-helpers: 1.1.1 - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) transitivePeerDependencies: - '@babel/core' - '@glint/template' @@ -11763,30 +11563,30 @@ packages: resolution: {integrity: sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==} engines: {node: 6.* || 8.* || >= 10.*} - /ember-cli-babel@8.2.0(@babel/core@7.24.4): + /ember-cli-babel@8.2.0(@babel/core@7.24.5): resolution: {integrity: sha512-8H4+jQElCDo6tA7CamksE66NqBXWs7VNpS3a738L9pZCjg2kXIX4zoyHzkORUqCtr0Au7YsCnrlAMi1v2ALo7A==} engines: {node: 16.* || 18.* || >= 20} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.23.6 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.4) - '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.5) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.5) + '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5) + '@babel/preset-env': 7.24.5(@babel/core@7.24.5) '@babel/runtime': 7.12.18 amd-name-resolver: 1.3.1 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.4) + babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.5) babel-plugin-ember-data-packages-polyfill: 0.1.2 babel-plugin-ember-modules-api-polyfill: 3.5.0 - babel-plugin-module-resolver: 5.0.0 - broccoli-babel-transpiler: 8.0.0(@babel/core@7.24.4) + babel-plugin-module-resolver: 5.0.2 + broccoli-babel-transpiler: 8.0.0(@babel/core@7.24.5) broccoli-debug: 0.6.5 broccoli-funnel: 3.0.8 broccoli-source: 3.0.1 @@ -11817,6 +11617,7 @@ packages: tmp-sync: 1.1.2 transitivePeerDependencies: - supports-color + dev: true /ember-cli-dependency-checker@3.3.2(ember-cli@5.7.0): resolution: {integrity: sha512-PwkrW5oYsdPWwt+0Tojufmv/hxVETTjkrEdK7ANQB2VSnqpA5UcYubwpQM9ONuR2J8wyNDMwEHlqIrk/FYtBsQ==} @@ -11833,22 +11634,22 @@ packages: transitivePeerDependencies: - supports-color - /ember-cli-fastboot-testing@0.6.1(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0)(webpack@5.91.0): + /ember-cli-fastboot-testing@0.6.1(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0): resolution: {integrity: sha512-nevPv77Wjk0Mslb0AF0wgHfbjki6Fi3/dapTrFz17WLX6n5maLr/MTL1hZcZdbT+69DHdgckCza8Z1WyxiUbBA==} engines: {node: 12.* || 14.* || 16.* || >= 18} peerDependencies: - '@ember/test-helpers': '*' + '@ember/test-helpers': 3.3.0 ember-cli: '*' ember-cli-fastboot: '*' ember-source: '*' dependencies: - '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) + '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) body-parser: 1.20.2 - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) ember-cli: 5.7.0 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-cli-fastboot: 4.1.2(@babel/core@7.24.4)(ember-cli@5.7.0)(ember-source@5.7.0) - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-cli-fastboot: 4.1.2(@babel/core@7.24.5)(ember-cli@5.7.0)(ember-source@5.7.0) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) fastboot: 4.1.2 json-fn: 1.1.1 minimist: 1.2.8 @@ -11858,14 +11659,17 @@ packages: transitivePeerDependencies: - '@babel/core' - '@glint/template' + - '@swc/core' - bufferutil - canvas + - esbuild - supports-color + - uglify-js - utf-8-validate - - webpack + - webpack-cli dev: true - /ember-cli-fastboot@4.1.2(@babel/core@7.24.4)(ember-cli@5.7.0)(ember-source@5.7.0): + /ember-cli-fastboot@4.1.2(@babel/core@7.24.5)(ember-cli@5.7.0)(ember-source@5.7.0): resolution: {integrity: sha512-cC2ET8AbRTssA4sg9qF9KLX9N/Xnwa7kS0PKZADMMOUXtuBF4jmgnXsjzlvIE+lgWcwK4tc6udgwpMeNMkOg7w==} engines: {node: 14.* || 16.* || >=18} peerDependencies: @@ -11879,11 +11683,11 @@ packages: broccoli-plugin: 4.0.7 chalk: 4.1.2 ember-cli: 5.7.0 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-lodash-subset: 2.0.1 ember-cli-preprocess-registry: 3.3.0 ember-cli-version-checker: 5.1.2 - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) fastboot: 4.1.2 fastboot-express-middleware: 4.1.2 fastboot-transform: 0.1.3 @@ -11908,7 +11712,7 @@ packages: engines: {node: 12.* || 14.* || >= 16} dependencies: '@ember/edition-utils': 1.2.0 - babel-plugin-ember-template-compilation: 2.2.1 + babel-plugin-ember-template-compilation: 2.2.2 babel-plugin-htmlbars-inline-precompile: 5.3.1 broccoli-debug: 0.6.5 broccoli-persistent-filter: 3.1.3 @@ -11948,6 +11752,7 @@ packages: walk-sync: 0.3.4 transitivePeerDependencies: - supports-color + dev: true /ember-cli-is-package-missing@1.0.0: resolution: {integrity: sha512-9hEoZj6Au5onlSDdcoBqYEPT8ehlYntZPxH8pBKV0GO7LNel88otSAQsCfXvbi2eKE+MaSeLG/gNaCI5UdWm9g==} @@ -12012,11 +11817,11 @@ packages: dependencies: ember-cli-string-utils: 1.1.0 - /ember-cli-test-loader@3.1.0(@babel/core@7.24.4): + /ember-cli-test-loader@3.1.0(@babel/core@7.24.5): resolution: {integrity: sha512-0aocZV9SIoOHiU3hrH3IuLR6busWhTX6UVXgd490hmJkIymmOXNH2+jJoC7Ebkeo3PiOfAdjqhb765QDlHSJOw==} engines: {node: 10.* || >= 12} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - supports-color @@ -12102,7 +11907,7 @@ packages: ensure-posix-path: 1.1.1 execa: 5.1.1 exit: 0.1.2 - express: 4.19.1 + express: 4.19.2 filesize: 10.1.1 find-up: 5.0.0 find-yarn-workspace-root: 2.0.0 @@ -12118,7 +11923,7 @@ packages: heimdalljs-logger: 0.1.10 http-proxy: 1.18.1 inflection: 2.0.1 - inquirer: 9.2.16 + inquirer: 9.2.20 is-git-url: 1.0.0 is-language-code: 3.1.0 isbinaryfile: 5.0.2 @@ -12210,11 +12015,11 @@ packages: - walrus - whiskers - /ember-compatibility-helpers@1.2.7(@babel/core@7.24.4): + /ember-compatibility-helpers@1.2.7(@babel/core@7.24.5): resolution: {integrity: sha512-BtkjulweiXo9c3yVWrtexw2dTmBrvavD/xixNC6TKOBdrixUwU+6nuOO9dufDWsMxoid7MvtmDpzc9+mE8PdaA==} engines: {node: 10.* || >= 12.*} dependencies: - babel-plugin-debug-macros: 0.2.0(@babel/core@7.24.4) + babel-plugin-debug-macros: 0.2.0(@babel/core@7.24.5) ember-cli-version-checker: 5.1.2 find-up: 5.0.0 fs-extra: 9.1.0 @@ -12223,13 +12028,13 @@ packages: - '@babel/core' - supports-color - /ember-decorators-polyfill@1.1.5(@babel/core@7.24.4): + /ember-decorators-polyfill@1.1.5(@babel/core@7.24.5): resolution: {integrity: sha512-O154i8sLoVjsiKzSqxGRfHGr+N+drT6mRrLDbNgJCnW/V5uLg/ppZFpUsrdxuXnp5Q9us3OfXV1nX2CH+7bUpA==} engines: {node: 8.* || >= 10.*} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-version-checker: 3.1.3 - ember-compatibility-helpers: 1.2.7(@babel/core@7.24.4) + ember-compatibility-helpers: 1.2.7(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - supports-color @@ -12240,7 +12045,28 @@ packages: engines: {node: '>= 0.10.0'} dev: true - /ember-exam@9.0.0(ember-qunit@8.0.2)(ember-source@5.7.0)(qunit@2.19.4)(webpack@5.91.0): + /ember-eslint-parser@0.4.2(@babel/core@7.24.5)(@typescript-eslint/parser@7.8.0)(eslint@8.57.0): + resolution: {integrity: sha512-DcKLI+2RgznicKOnxFAW/5ABGEk8JMCADw56wy1hvD/r1vNIIZZnoJC7rowx9XenPBhB75kt3/4ApaHxeYr2sA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@babel/core': ^7.23.6 + '@typescript-eslint/parser': '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/eslint-parser': 7.23.10(@babel/core@7.24.5)(eslint@8.57.0) + '@glimmer/syntax': 0.92.0 + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + content-tag: 1.2.2 + eslint-scope: 7.2.2 + html-tags: 3.3.1 + transitivePeerDependencies: + - eslint + dev: false + + /ember-exam@9.0.0(ember-qunit@8.0.2)(ember-source@5.7.0)(qunit@2.19.4): resolution: {integrity: sha512-zQBZFlig9SMtCgsU4+0jjtyVdF7RnR539ySxnyesO0mmvhArQOPB576XH598FWawUqkMPbEu7rR/X/NDiozK1g==} engines: {node: '>= 18'} peerDependencies: @@ -12248,14 +12074,14 @@ packages: ember-source: '*' qunit: 2.19.4 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) chalk: 5.3.0 cli-table3: 0.6.4 debug: 4.3.4(supports-color@8.1.1) - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-qunit: 8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-qunit: 8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) execa: 8.0.1 fs-extra: 11.2.0 js-yaml: 4.1.0 @@ -12266,47 +12092,39 @@ packages: silent-error: 1.1.1 transitivePeerDependencies: - '@glint/template' + - '@swc/core' + - esbuild - supports-color - - webpack + - uglify-js + - webpack-cli dev: true - /ember-get-config@2.1.1(@babel/core@7.24.4)(@glint/template@1.4.0): - resolution: {integrity: sha512-uNmv1cPG/4qsac8oIf5txJ2FZ8p88LEpG4P3dNcjsJS98Y8hd0GPMFwVqpnzI78Lz7VYRGQWY4jnE4qm5R3j4g==} - engines: {node: 12.* || 14.* || >= 16} - dependencies: - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - /ember-inflector@4.0.2(@babel/core@7.24.4): + /ember-inflector@4.0.2(@babel/core@7.24.5): resolution: {integrity: sha512-+oRstEa52mm0jAFzhr51/xtEWpCEykB3SEBr7vUg8YnXUZJ5hKNBppP938q8Zzr9XfJEbzrtDSGjhKwJCJv6FQ==} engines: {node: 10.* || 12.* || >= 14} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - supports-color - /ember-load-initializers@2.1.2(@babel/core@7.24.4): + /ember-load-initializers@2.1.2(@babel/core@7.24.5): resolution: {integrity: sha512-CYR+U/wRxLbrfYN3dh+0Tb6mFaxJKfdyz+wNql6cqTrA0BBi9k6J3AaKXj273TqvEpyyXegQFFkZEiuZdYtgJw==} engines: {node: 6.* || 8.* || >= 10.*} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-typescript: 5.3.0 transitivePeerDependencies: - '@babel/core' - supports-color - /ember-maybe-import-regenerator@1.0.0(@babel/core@7.24.4): + /ember-maybe-import-regenerator@1.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-wtjgjEV0Hk4fgiAwFjOfPrGWfmFrbRW3zgNZO4oA3H5FlbMssMvWuR8blQ3QSWYHODVK9r+ThsRAs8lG4kbxqA==} engines: {node: '>= 12.*'} dependencies: broccoli-funnel: 3.0.8 broccoli-merge-trees: 4.2.0 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) regenerator-runtime: 0.13.11 transitivePeerDependencies: - '@babel/core' @@ -12318,154 +12136,108 @@ packages: peerDependencies: ember-source: '*' dependencies: - '@embroider/addon-shim': 1.8.7 + '@embroider/addon-shim': 1.8.8 '@simple-dom/document': 1.4.0 - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) transitivePeerDependencies: - supports-color dev: true - /ember-qunit@8.0.2(@babel/core@7.24.4)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4): - resolution: {integrity: sha512-Rf60jeUTWNsF3Imf/FLujW/B/DFmKVXKmXO1lirTXjpertKfwRhp/3MnN8a/U/WyodTIsERkInGT1IqTtphCdQ==} + /ember-provide-consume-context@0.3.1(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0): + resolution: {integrity: sha512-bit/W23qNto4uO2H+O9NPK1klO1FwLhzwN9Goo/5cdKHKM4u0G6QFfY/vEHMaHIu97Exh1MMFtLBx5y9iZTPmw==} peerDependencies: - '@ember/test-helpers': '>=3.0.3' + '@ember/test-helpers': 3.3.0 ember-source: '*' - qunit: 2.19.4 - dependencies: - '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) - '@embroider/addon-shim': 1.8.7 - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - ember-cli-test-loader: 3.1.0(@babel/core@7.24.4) - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) - qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - dev: true - - /ember-raf-scheduler@0.3.0(@babel/core@7.24.4): - resolution: {integrity: sha512-i8JWQidNCX7n5TOTIKRDR0bnsQN9aJh/GtOJKINz2Wr+I7L7sYVhli6MFqMYNGKC9j9e6iWsznfAIxddheyEow==} - engines: {node: 12.* || 14.* || >= 16} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@embroider/addon-shim': 1.8.8 + '@glimmer/component': 1.1.2(@babel/core@7.24.5) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) transitivePeerDependencies: - '@babel/core' - supports-color dev: true - /ember-resolver@11.0.1(@babel/core@7.24.4)(ember-source@5.7.0): - resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==} - engines: {node: 14.* || 16.* || >= 18} + /ember-qunit@8.0.2(@babel/core@7.24.5)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4): + resolution: {integrity: sha512-Rf60jeUTWNsF3Imf/FLujW/B/DFmKVXKmXO1lirTXjpertKfwRhp/3MnN8a/U/WyodTIsERkInGT1IqTtphCdQ==} peerDependencies: + '@ember/test-helpers': 3.3.0 ember-source: '*' - peerDependenciesMeta: - ember-source: - optional: true - dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-source: 5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0) - transitivePeerDependencies: - - '@babel/core' - - supports-color - - /ember-rfc176-data@0.3.18: - resolution: {integrity: sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q==} - - /ember-router-generator@2.0.0: - resolution: {integrity: sha512-89oVHVJwmLDvGvAUWgS87KpBoRhy3aZ6U0Ql6HOmU4TrPkyaa8pM0W81wj9cIwjYprcQtN9EwzZMHnq46+oUyw==} - engines: {node: 8.* || 10.* || >= 12} - dependencies: - '@babel/parser': 7.24.4 - '@babel/traverse': 7.24.1(supports-color@8.1.1) - recast: 0.18.10 - transitivePeerDependencies: - - supports-color - - /ember-simple-tree@0.8.4(@babel/core@7.24.4): - resolution: {integrity: sha512-cE3hC5YE+fIkLby3QbMphjdkBikj5j2107Rh39ZDajxmIOGf/DW7t0L5CqArkRy8Wn4HDl4wJSwmrmV/GYapfg==} - engines: {node: 12.* || 14.* || >= 16} + qunit: 2.19.4 dependencies: - '@glimmer/component': 1.1.2(@babel/core@7.24.4) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-cli-htmlbars: 6.3.0 + '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@embroider/addon-shim': 1.8.8 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-cli-test-loader: 3.1.0(@babel/core@7.24.5) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) transitivePeerDependencies: - '@babel/core' + - '@glint/template' - supports-color dev: true - - /ember-source-channel-url@3.0.0: - resolution: {integrity: sha512-vF/8BraOc66ZxIDo3VuNP7iiDrnXEINclJgSJmqwAAEpg84Zb1DHPI22XTXSDA+E8fW5btPUxu65c3ZXi8AQFA==} - engines: {node: 10.* || 12.* || >= 14} - hasBin: true - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - - /ember-source@5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0): - resolution: {integrity: sha512-iOZVyxLBzGewEThDDsNRZ9y02SNH42PWSPC9U4O94pew7ktld3IpIODCDjLCtKWn2zAGM9DhWTMrXz27HI1UKw==} - engines: {node: '>= 16.*'} - peerDependencies: - '@glimmer/component': ^1.1.2 - dependencies: - '@babel/helper-module-imports': 7.24.3 - '@ember/edition-utils': 1.2.0 - '@glimmer/compiler': 0.87.1 - '@glimmer/component': 1.1.2(@babel/core@7.24.4) - '@glimmer/destroyable': 0.87.1 - '@glimmer/env': 0.1.7 - '@glimmer/global-context': 0.87.1 - '@glimmer/interfaces': 0.87.1 - '@glimmer/manager': 0.87.1 - '@glimmer/node': 0.87.1 - '@glimmer/opcode-compiler': 0.87.1 - '@glimmer/owner': 0.87.1 - '@glimmer/program': 0.87.1 - '@glimmer/reference': 0.87.1 - '@glimmer/runtime': 0.87.1 - '@glimmer/syntax': 0.87.1 - '@glimmer/util': 0.87.1 - '@glimmer/validator': 0.89.0 - '@glimmer/vm': 0.87.1 - '@glimmer/vm-babel-plugins': 0.87.1(@babel/core@7.24.4) - '@simple-dom/interface': 1.4.0 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.4) - babel-plugin-ember-template-compilation: 2.2.1 - babel-plugin-filter-imports: 4.0.0 - backburner.js: 2.8.0 - broccoli-concat: 4.2.5 - broccoli-debug: 0.6.5 - broccoli-file-creator: 2.1.1 - broccoli-funnel: 3.0.8 - broccoli-merge-trees: 4.2.0 - chalk: 4.1.2 - ember-auto-import: 2.7.2(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - 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 - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-typescript-blueprint-polyfill: 0.1.0 - ember-cli-version-checker: 5.1.2 - ember-router-generator: 2.0.0 - inflection: 2.0.1 - route-recognizer: 0.3.4 - router_js: 8.0.5(route-recognizer@0.3.4) - semver: 7.6.0 - silent-error: 1.1.1 - simple-html-tokenizer: 0.5.11 + + /ember-raf-scheduler@0.3.0(@babel/core@7.24.5): + resolution: {integrity: sha512-i8JWQidNCX7n5TOTIKRDR0bnsQN9aJh/GtOJKINz2Wr+I7L7sYVhli6MFqMYNGKC9j9e6iWsznfAIxddheyEow==} + engines: {node: 12.* || 14.* || >= 16} + dependencies: + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - - '@glint/template' - - rsvp - supports-color - - webpack dev: true - /ember-source@5.7.0(@babel/core@7.24.4)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0): + /ember-resolver@11.0.1(@babel/core@7.24.5)(ember-source@5.7.0): + resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==} + engines: {node: 14.* || 16.* || >= 18} + peerDependencies: + ember-source: '*' + peerDependenciesMeta: + ember-source: + optional: true + dependencies: + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + /ember-rfc176-data@0.3.18: + resolution: {integrity: sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q==} + + /ember-router-generator@2.0.0: + resolution: {integrity: sha512-89oVHVJwmLDvGvAUWgS87KpBoRhy3aZ6U0Ql6HOmU4TrPkyaa8pM0W81wj9cIwjYprcQtN9EwzZMHnq46+oUyw==} + engines: {node: 8.* || 10.* || >= 12} + dependencies: + '@babel/parser': 7.24.5 + '@babel/traverse': 7.24.5(supports-color@8.1.1) + recast: 0.18.10 + transitivePeerDependencies: + - supports-color + + /ember-simple-tree@0.8.4(@babel/core@7.24.5): + resolution: {integrity: sha512-cE3hC5YE+fIkLby3QbMphjdkBikj5j2107Rh39ZDajxmIOGf/DW7t0L5CqArkRy8Wn4HDl4wJSwmrmV/GYapfg==} + engines: {node: 12.* || 14.* || >= 16} + dependencies: + '@glimmer/component': 1.1.2(@babel/core@7.24.5) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-cli-htmlbars: 6.3.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /ember-source-channel-url@3.0.0: + resolution: {integrity: sha512-vF/8BraOc66ZxIDo3VuNP7iiDrnXEINclJgSJmqwAAEpg84Zb1DHPI22XTXSDA+E8fW5btPUxu65c3ZXi8AQFA==} + engines: {node: 10.* || 12.* || >= 14} + hasBin: true + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /ember-source@5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0): resolution: {integrity: sha512-iOZVyxLBzGewEThDDsNRZ9y02SNH42PWSPC9U4O94pew7ktld3IpIODCDjLCtKWn2zAGM9DhWTMrXz27HI1UKw==} engines: {node: '>= 16.*'} peerDependencies: @@ -12474,7 +12246,7 @@ packages: '@babel/helper-module-imports': 7.24.3 '@ember/edition-utils': 1.2.0 '@glimmer/compiler': 0.87.1 - '@glimmer/component': 1.1.2(@babel/core@7.24.4) + '@glimmer/component': 1.1.2(@babel/core@7.24.5) '@glimmer/destroyable': 0.87.1 '@glimmer/env': 0.1.7 '@glimmer/global-context': 0.87.1 @@ -12490,10 +12262,10 @@ packages: '@glimmer/util': 0.87.1 '@glimmer/validator': 0.89.0 '@glimmer/vm': 0.87.1 - '@glimmer/vm-babel-plugins': 0.87.1(@babel/core@7.24.4) + '@glimmer/vm-babel-plugins': 0.87.1(@babel/core@7.24.5) '@simple-dom/interface': 1.4.0 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.4) - babel-plugin-ember-template-compilation: 2.2.1 + babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.5) + babel-plugin-ember-template-compilation: 2.2.2 babel-plugin-filter-imports: 4.0.0 backburner.js: 2.8.0 broccoli-concat: 4.2.5 @@ -12502,8 +12274,8 @@ packages: broccoli-funnel: 3.0.8 broccoli-merge-trees: 4.2.0 chalk: 4.1.2 - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) 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 @@ -12518,18 +12290,22 @@ packages: semver: 7.6.0 silent-error: 1.1.1 simple-html-tokenizer: 0.5.11 + webpack: 5.91.0 transitivePeerDependencies: - '@babel/core' - '@glint/template' + - '@swc/core' + - esbuild - rsvp - supports-color - - webpack + - uglify-js + - webpack-cli - /ember-strict-resolver@1.3.0(@babel/core@7.24.4): + /ember-strict-resolver@1.3.0(@babel/core@7.24.5): resolution: {integrity: sha512-GeI1LLLt470sjaq/huKGQTDJPDOH0FlrX8FFVcSZPXO2U9FQH7Kc8BaXb4GpViJbfLLC4d7tIUZI4NBnuXSmKg==} engines: {node: 10.* || >= 12} dependencies: - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - supports-color @@ -12608,7 +12384,6 @@ packages: /enabled@2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - dev: false /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} @@ -12678,6 +12453,11 @@ packages: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + /err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} dev: true @@ -12696,8 +12476,8 @@ packages: dependencies: string-template: 0.2.1 - /es-abstract@1.23.2: - resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 @@ -12715,7 +12495,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -12757,8 +12537,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - /es-module-lexer@1.4.2: - resolution: {integrity: sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==} + /es-module-lexer@1.5.2: + resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -12788,36 +12568,35 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - dev: true + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} @@ -12844,7 +12623,6 @@ packages: esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 - dev: true /eslint-compat-utils@0.5.0(eslint@8.57.0): resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} @@ -12875,7 +12653,7 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -12896,7 +12674,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -12916,7 +12694,7 @@ packages: eslint-compat-utils: 0.5.0(eslint@8.57.0) dev: false - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -12926,7 +12704,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -12935,7 +12713,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -12951,8 +12729,8 @@ packages: - supports-color dev: false - /eslint-plugin-mocha@10.4.2(eslint@8.57.0): - resolution: {integrity: sha512-cur4dVYnSEWTBwdqIBQFxa/9siAhesu0TX+lbJ4ClE9j0eNMNe6BSx3vkFFNz6tGoveyMyELFXa30f3fvuAVDg==} + /eslint-plugin-mocha@10.4.3(eslint@8.57.0): + resolution: {integrity: sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==} engines: {node: '>=14.0.0'} peerDependencies: eslint: '>=7.0.0' @@ -12970,7 +12748,7 @@ packages: eslint: '>=7.0.0' dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - builtins: 5.0.1 + builtins: 5.1.0 eslint: 8.57.0 eslint-plugin-es-x: 7.6.0(eslint@8.57.0) get-tsconfig: 4.7.3 @@ -12993,8 +12771,8 @@ packages: - eslint dev: false - /eslint-plugin-simple-import-sort@12.0.0(eslint@8.57.0): - resolution: {integrity: sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==} + /eslint-plugin-simple-import-sort@12.1.0(eslint@8.57.0): + resolution: {integrity: sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==} peerDependencies: eslint: '>=5.0.0' dependencies: @@ -13074,7 +12852,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -13128,7 +12906,6 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -13143,7 +12920,7 @@ packages: dev: true /eventemitter2@5.0.1: - resolution: {integrity: sha1-YZegldX7a1folC9v1+qtY6CclFI=} + resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==} dev: true /eventemitter2@6.4.9: @@ -13219,8 +12996,9 @@ packages: dev: true /exists-sync@0.0.3: - resolution: {integrity: sha1-uRAAC+27ETs3i4L19adjgQdiLc8=} + resolution: {integrity: sha512-/qPB5E0cRuA/Cs5vHrmKYSfhIBCPJs9Vm3e9aIejMwwbe6idMeNbGu1g5stvr/bXT6HywHckLPEkmY7HK6FlwA==} deprecated: Please replace with usage of fs.existsSync + dev: true /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} @@ -13251,44 +13029,6 @@ packages: engines: {node: '>=12.0.0'} dev: true - /express@4.19.1: - resolution: {integrity: sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.2 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.6.0 - cookie-signature: 1.0.6 - debug: 2.6.9(supports-color@8.1.1) - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - /express@4.19.2: resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} @@ -13326,7 +13066,6 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} @@ -13420,7 +13159,6 @@ packages: sourcemap-validator: 1.1.1 transitivePeerDependencies: - supports-color - dev: true /fast-sourcemap-concat@2.1.1: resolution: {integrity: sha512-7h9/x25c6AQwdU3mA8MZDUMR3UCy50f237egBrBkuwjnUZSmfu4ptCf91PZSKzON2Uh5VvIHozYKWcPPgcjxIw==} @@ -13498,7 +13236,6 @@ packages: /fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - dev: false /figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} @@ -13566,9 +13303,8 @@ packages: transitivePeerDependencies: - supports-color - /find-babel-config@2.0.0: - resolution: {integrity: sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==} - engines: {node: '>=16.0.0'} + /find-babel-config@2.1.1: + resolution: {integrity: sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA==} dependencies: json5: 2.2.3 path-exists: 4.0.0 @@ -13580,7 +13316,6 @@ packages: commondir: 1.0.1 make-dir: 2.1.0 pkg-dir: 3.0.0 - dev: false /find-cache-dir@3.3.2: resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} @@ -13721,14 +13456,12 @@ packages: /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /flow-parser@0.233.0: - resolution: {integrity: sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ==} + /flow-parser@0.235.1: + resolution: {integrity: sha512-s04193L4JE+ntEcQXbD6jxRRlyj9QXcgEl2W6xSjH4l9x4b0eHoCHfbYHjqf9LdZFUiM5LhgpiqsvLj/AyOyYQ==} engines: {node: '>=0.4.0'} - dev: false /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - dev: false /follow-redirects@1.15.6(debug@4.3.4): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} @@ -13780,7 +13513,6 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} @@ -13821,6 +13553,7 @@ packages: klaw: 1.3.1 path-is-absolute: 1.0.1 rimraf: 2.7.1 + dev: true /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} @@ -13905,7 +13638,7 @@ packages: /fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} - dev: true + dev: false /fs-sync@1.0.6: resolution: {integrity: sha512-OgbfyvmGVryknZfDXVVhua6OW8946R+AF3O2xxrCW/XFxCYZ4CO2Jrl7kYhrpjZLYvB9gxvWpLikEc9YL9HzCA==} @@ -13915,6 +13648,7 @@ packages: lodash: 4.17.21 mkdirp: 0.5.6 rimraf: 2.7.1 + dev: true /fs-tree-diff@0.5.9: resolution: {integrity: sha512-872G8ax0kHh01m9n/2KDzgYwouKza0Ad9iFltBpNykvROvf2AGtoOzPJgGx125aolGPER3JuC7uZFrQ7bG1AZw==} @@ -13958,7 +13692,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.2: @@ -13970,7 +13703,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 functions-have-names: 1.2.3 /functions-have-names@1.2.3: @@ -14013,6 +13746,7 @@ packages: /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} @@ -14140,7 +13874,7 @@ packages: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.4 minipass: 7.0.4 path-scurry: 1.10.2 dev: true @@ -14174,6 +13908,15 @@ packages: minimatch: 5.1.6 once: 1.4.0 + /glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.10.2 + /global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} @@ -14202,16 +13945,22 @@ packages: dependencies: type-fest: 0.20.2 + /globals@15.1.0: + resolution: {integrity: sha512-926gJqg+4mkxwYKiFvoomM4J0kWESfk3qfTvRL2/oc/tK/eTDBbrfcKnSa2KtfdxB5onoL7D3A3qIHQFpd4+UA==} + engines: {node: '>=18'} + dev: false + /globals@9.18.0: resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} engines: {node: '>=0.10.0'} dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} @@ -14241,7 +13990,6 @@ packages: ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 - dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -14327,6 +14075,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 + dev: true /has-ansi@3.0.0: resolution: {integrity: sha512-5JRDTvNq6mVkaMHQVXrGnaCXHD6JfqxwCy8LA/DQSqLLqePR9uaJVm2u3Ek/UziJFQz+d1ul99RtfIhE2aorkQ==} @@ -14345,6 +14094,11 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + /has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + dev: true + /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: @@ -14428,7 +14182,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - dev: true /heimdalljs-fs-monitor@1.1.1: resolution: {integrity: sha512-BHB8oOXLRlrIaON0MqJSEjGVPDyqt2Y6gu+w2PaEZjrCxeVtZG7etEZp7M4ZQ80HNvnr66KIQ2lot2qdeG8HgQ==} @@ -14476,8 +14229,8 @@ packages: dependencies: parse-passwd: 1.0.0 - /hono@4.2.5: - resolution: {integrity: sha512-uonJD3i/yy005kQ7bPZRVfG3rejYJwyPqBmPoUGijS4UB/qM+YlrZ7xzSWy+ByDu9buGHUG+f+SKzz03Y6V1Kw==} + /hono@4.2.9: + resolution: {integrity: sha512-59FAv52UxDWUt/NlC0NzrRCjeVCThUnVlqlrKYm+k80XujBu6uJwBIa5gACKKZWobjA0MJ6Vds0I3URKf383Cw==} engines: {node: '>=16.0.0'} /hosted-git-info@4.1.0: @@ -14498,7 +14251,6 @@ packages: engines: {node: '>=10'} dependencies: whatwg-encoding: 1.0.5 - dev: true /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} @@ -14507,6 +14259,11 @@ packages: whatwg-encoding: 2.0.0 dev: true + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + dev: false + /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true @@ -14542,7 +14299,6 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} @@ -14559,7 +14315,7 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -14594,13 +14350,12 @@ packages: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true /https-proxy-agent@7.0.4: resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -14663,6 +14418,11 @@ packages: parent-module: 1.0.1 resolve-from: 4.0.0 + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: false + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -14670,7 +14430,6 @@ packages: /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - dev: true /individual@3.0.0: resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} @@ -14753,17 +14512,17 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 - /inquirer@9.2.16: - resolution: {integrity: sha512-qzgbB+yNjgSzk2omeqMDtO9IgJet/UL67luT1MaaggRpGK73DBQct5Q4pipwFQcIKK1GbMODYd4UfsRCkSP1DA==} + /inquirer@9.2.20: + resolution: {integrity: sha512-SFwJJPS+Ms75NV+wzFBHjirG4z3tzvis31h+9NyH1tqjIu2c7vCavlXILZ73q/nPYy8/aw4W+DNzLH5MjfYXiA==} engines: {node: '>=18'} dependencies: + '@inquirer/figures': 1.0.1 '@ljharb/through': 2.3.13 ansi-escapes: 4.3.2 chalk: 5.3.0 cli-cursor: 3.1.0 cli-width: 4.1.0 external-editor: 3.1.0 - figures: 3.2.0 lodash: 4.17.21 mute-stream: 1.0.0 ora: 5.4.1 @@ -14821,7 +14580,6 @@ packages: /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -14833,7 +14591,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.3.0 - dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -14850,6 +14607,7 @@ packages: engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 + dev: false /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -14947,11 +14705,7 @@ packages: /is-language-code@3.1.0: resolution: {integrity: sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==} dependencies: - '@babel/runtime': 7.24.4 - - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true + '@babel/runtime': 7.24.5 /is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} @@ -14981,7 +14735,6 @@ packages: /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} - dev: true /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -14990,6 +14743,7 @@ packages: /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + dev: true /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} @@ -15003,7 +14757,6 @@ packages: /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} @@ -15015,6 +14768,7 @@ packages: /is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} + dev: true /is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} @@ -15054,7 +14808,7 @@ packages: has-symbols: 1.0.3 /is-type@0.0.1: - resolution: {integrity: sha1-9lHYXDZdRJVdFKUdjXBh8/a0d5w=} + resolution: {integrity: sha512-YwJh/zBVrcJ90aAnPBM0CbHvm7lG9ao7lIFeqTZ1UQj4iFLpM5CikdaU+dGGesrMJwxLqPGmjjrUrQ6Kn3Zh+w==} dependencies: core-util-is: 1.0.3 @@ -15145,6 +14899,10 @@ packages: merge-stream: 2.0.0 supports-color: 8.1.1 + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: false + /js-git@0.7.8: resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==} dependencies: @@ -15191,19 +14949,19 @@ packages: '@babel/preset-env': optional: true dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/parser': 7.24.4 - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) - '@babel/preset-flow': 7.24.1(@babel/core@7.24.4) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) - '@babel/register': 7.23.7(@babel/core@7.24.4) - babel-core: 7.0.0-bridge.0(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/parser': 7.24.5 + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) + '@babel/preset-flow': 7.24.1(@babel/core@7.24.5) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.5) + '@babel/register': 7.23.7(@babel/core@7.24.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.24.5) chalk: 4.1.2 - flow-parser: 0.233.0 + flow-parser: 0.235.1 graceful-fs: 4.2.11 micromatch: 4.0.5 neo-async: 2.6.2 @@ -15213,7 +14971,6 @@ packages: write-file-atomic: 2.4.3 transitivePeerDependencies: - supports-color - dev: false /jsdom@16.7.0(supports-color@8.1.1): resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} @@ -15238,11 +14995,11 @@ packages: http-proxy-agent: 4.0.1(supports-color@8.1.1) https-proxy-agent: 5.0.1(supports-color@8.1.1) is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.9 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + tough-cookie: 4.1.4 w3c-hr-time: 1.0.2 w3c-xmlserializer: 2.0.0 webidl-conversions: 6.1.0 @@ -15255,7 +15012,6 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true /jsdom@19.0.0: resolution: {integrity: sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==} @@ -15280,18 +15036,18 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1(supports-color@8.1.1) is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.9 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + tough-cookie: 4.1.4 w3c-hr-time: 1.0.2 w3c-xmlserializer: 3.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 10.0.0 - ws: 8.16.0 + ws: 8.17.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -15302,7 +15058,6 @@ packages: /jsesc@0.3.0: resolution: {integrity: sha512-UHQmAeTXV+iwEk0aHheJRqo6Or90eDxI6KIYpHSjKLXKuKlPt1CQ7tGBerFcFA8uKU5mYxiPMlckmFptd5XZzA==} hasBin: true - dev: true /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} @@ -15415,10 +15170,14 @@ packages: resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} optionalDependencies: graceful-fs: 4.2.11 + dev: true + + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + dev: false /kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - dev: false /lazy@1.0.11: resolution: {integrity: sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==} @@ -15580,7 +15339,10 @@ packages: /lodash.foreach@4.5.0: resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} - dev: true + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: false /lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} @@ -15588,6 +15350,10 @@ packages: /lodash.isarray@3.0.4: resolution: {integrity: sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==} + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: false + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -15642,7 +15408,6 @@ packages: ms: 2.1.3 safe-stable-stringify: 2.4.3 triple-beam: 1.4.1 - dev: false /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} @@ -15655,6 +15420,7 @@ packages: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: get-func-name: 2.0.2 + dev: true /lowercase-keys@1.0.1: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} @@ -15666,10 +15432,9 @@ packages: engines: {node: '>=8'} dev: true - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} - dev: true /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -15691,6 +15456,12 @@ packages: dependencies: sourcemap-codec: 1.4.8 + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -15937,19 +15708,22 @@ packages: engines: {node: '>=4'} dev: true - /mini-css-extract-plugin@2.8.1(webpack@5.91.0): - resolution: {integrity: sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==} + /mini-css-extract-plugin@2.9.0(webpack@5.91.0): + resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} engines: {node: '>= 12.13.0'} peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: schema-utils: 4.2.0 tapable: 2.2.1 webpack: 5.91.0 + /minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + dependencies: + brace-expansion: 1.1.11 + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -15974,19 +15748,17 @@ packages: dependencies: brace-expansion: 2.0.1 - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 - dev: true /minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 - dev: false /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -16043,6 +15815,10 @@ packages: yallist: 4.0.0 dev: true + /minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} @@ -16051,7 +15827,6 @@ packages: /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} - dev: true /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -16140,6 +15915,10 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: false + /mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true @@ -16242,7 +16021,6 @@ packages: engines: {node: '>= 0.10.5'} dependencies: minimatch: 3.1.2 - dev: false /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} @@ -16312,6 +16090,7 @@ packages: /npm-git-info@1.0.3: resolution: {integrity: sha512-i5WBdj4F/ULl16z9ZhsJDMl1EQCMQhHZzBwNnKL2LOA+T8IHNeRkLCVz9uVV9SzUdGTbDq+1oXhIYMe+8148vw==} + dev: false /npm-package-arg@10.1.0: resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} @@ -16368,9 +16147,8 @@ packages: lazy: 1.0.11 dev: true - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - dev: true + /nwsapi@2.2.9: + resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} /oauth-sign@0.3.0: resolution: {integrity: sha512-Tr31Sh5FnK9YKm7xTUPyDMsNOvMqkVDND0zvK/Wgj7/H9q8mpye0qG2nVzrnsvLhcsX5DtqXD0la0ks6rkPCGQ==} @@ -16422,7 +16200,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 dev: false @@ -16432,7 +16210,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 dev: false /object.pick@1.3.0: @@ -16475,7 +16253,6 @@ packages: resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} dependencies: fn.name: 1.1.0 - dev: false /onetime@2.0.1: resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} @@ -16496,16 +16273,16 @@ packages: mimic-fn: 4.0.0 dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 /ora@3.4.0: resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} @@ -16535,6 +16312,7 @@ packages: /os-homedir@1.0.2: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} + dev: true /os-locale@5.0.0: resolution: {integrity: sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==} @@ -16553,6 +16331,7 @@ packages: dependencies: os-homedir: 1.0.2 os-tmpdir: 1.0.2 + dev: true /p-cancelable@1.1.0: resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} @@ -16634,7 +16413,6 @@ packages: engines: {node: '>=8'} dependencies: aggregate-error: 3.1.0 - dev: true /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} @@ -16652,13 +16430,13 @@ packages: engines: {node: '>= 14'} dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4(supports-color@8.1.1) get-uri: 6.0.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.2 + socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color dev: true @@ -16736,6 +16514,10 @@ packages: resolution: {integrity: sha512-gds5iRhSeOcDtj8gfWkRHLtZKTPsFVuh7utbjYtvnclw4XM+ffRzJrwqMhOD1PVqef7nBLmgsu1vIujjvAJrAw==} engines: {node: '>=4'} + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: false + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -16789,9 +16571,8 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.2 minipass: 7.0.4 - dev: true /path-temp@2.1.0: resolution: {integrity: sha512-cMMJTAZlion/RWRRC48UbrDymEIt+/YSD/l8NqjneyDw2rDOBQcP5yRkMB4CYGn47KMhZvbblBP7Z79OsMw72w==} @@ -16813,6 +16594,7 @@ packages: /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -16856,14 +16638,12 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: false /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} dependencies: find-up: 3.0.0 - dev: false /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -16926,7 +16706,7 @@ packages: async: 3.2.5 debug: 4.3.4(supports-color@8.1.1) pidusage: 2.0.21 - systeminformation: 5.22.6 + systeminformation: 5.22.7 tx2: 1.0.5 transitivePeerDependencies: - supports-color @@ -16949,7 +16729,7 @@ packages: cli-tableau: 2.0.1 commander: 2.15.1 croner: 4.1.97 - dayjs: 1.11.10 + dayjs: 1.11.11 debug: 4.3.4(supports-color@8.1.1) enquirer: 2.3.6 eventemitter2: 5.0.1 @@ -16990,7 +16770,7 @@ packages: proper-lockfile: 4.1.2 resolve-package-path: 4.0.3 supports-color: 9.4.0 - watcher: 2.3.0 + watcher: 2.3.1 yargs: 17.7.2 /portfinder@1.0.32: @@ -17011,16 +16791,16 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - /postcss-modules-extract-imports@3.0.0(postcss@8.4.38): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: postcss: 8.4.38 - /postcss-modules-local-by-default@4.0.4(postcss@8.4.38): - resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -17030,8 +16810,8 @@ packages: postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.1.1(postcss@8.4.38): - resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} + /postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -17088,7 +16868,7 @@ packages: peerDependencies: prettier: '>= 3.0.0' dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) + '@babel/core': 7.24.5(supports-color@8.1.1) content-tag: 1.2.2 prettier: 3.2.5 transitivePeerDependencies: @@ -17150,8 +16930,8 @@ packages: optional: true dev: true - /promise-make-naked@2.1.1: - resolution: {integrity: sha512-BLvgZSNRkQNM5RGL4Cz8wK76WSb+t3VeMJL+/kxRBHI5+nliqZezranGGtiu/ePeFo5+CaLRvvGMzXrBuu2tAA==} + /promise-make-naked@2.1.2: + resolution: {integrity: sha512-y7s8ZuHIG56JYspB24be9GFkXA1zXL85Ur9u1DKrW/tvyUoPxWgBjnalK6Nc6l7wHBcAW0c3PO07+XOsWTRuhg==} /promise-map-series@0.2.3: resolution: {integrity: sha512-wx9Chrutvqu1N/NHzTayZjE1BgIwt6SJykQoCOic4IZ9yUDjKyVYrpLa/4YCNsV61eRENfs29hrEquVuB13Zlw==} @@ -17180,7 +16960,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-errors: 1.3.0 set-function-name: 2.0.2 dev: true @@ -17217,14 +16997,14 @@ packages: resolution: {integrity: sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 lru-cache: 7.18.3 pac-proxy-agent: 7.0.1 proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.2 + socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color dev: true @@ -17235,8 +17015,6 @@ packages: /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - requiresBuild: true - dev: true /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} @@ -17262,16 +17040,14 @@ packages: dependencies: side-channel: 1.0.6 - /qs@6.12.0: - resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==} + /qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - requiresBuild: true - dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -17282,6 +17058,7 @@ packages: dependencies: lodash: 4.17.21 resolve: 1.22.8 + dev: true /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} @@ -17303,8 +17080,8 @@ packages: - supports-color dev: true - /qunit-dom@3.1.1: - resolution: {integrity: sha512-Ja2NK+LsQM4iDU5QFtkwbLEbETgr6+7wTf7t6DXW3hWhB6GmAtKA2r3eLnmXpSdncMnoBsedXSKfjM0iMTOUGQ==} + /qunit-dom@3.1.2: + resolution: {integrity: sha512-urHvzhDxihYrMBpsT/Fk7So79CPfvS0ZwZw2VPA+0JV1Q1XP2IhDg/PLHTt+r2j7787iQAOpILx2GjwAa6CpnA==} dev: true /qunit@2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy): @@ -17398,7 +17175,6 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: true /realpath-missing@1.1.0: resolution: {integrity: sha512-wnWtnywepjg/eHIgWR97R7UuM5i+qHLA195qdN9UPKvcMqfn60+67S8sPPW3vDlSEfYHoFkKU8IvpCNty3zQvQ==} @@ -17442,7 +17218,6 @@ packages: source-map: 0.6.1 tiny-invariant: 1.3.3 tslib: 2.6.2 - dev: false /redeyed@1.0.1: resolution: {integrity: sha512-8eEWsNCkV2rvwKLS1Cvp5agNjMhwRe2um+y32B2+3LqOzg4C9BBPs6vzAfV16Ivb8B9HPNKIqd8OrdBws8kNlQ==} @@ -17479,7 +17254,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} @@ -17558,9 +17333,9 @@ packages: /remove-types@1.0.0: resolution: {integrity: sha512-G7Hk1Q+UJ5DvlNAoJZObxANkBZGiGdp589rVcTW/tYqJWJ5rwfraSnKSQaETN8Epaytw8J40nS/zC7bcHGv36w==} dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) + '@babel/core': 7.24.5(supports-color@8.1.1) + '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5) prettier: 2.8.8 transitivePeerDependencies: - supports-color @@ -17590,7 +17365,7 @@ packages: http-signature: 0.10.1 oauth-sign: 0.3.0 stringstream: 0.0.6 - tough-cookie: 4.1.3 + tough-cookie: 4.1.4 tunnel-agent: 0.4.3 dev: true @@ -17668,6 +17443,13 @@ packages: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} deprecated: https://github.com/lydell/resolve-url#deprecated + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + dev: false + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -17739,21 +17521,19 @@ packages: glob: 10.3.12 dev: true - /rollup-plugin-copy-assets@2.0.3(rollup@4.14.3): + /rollup-plugin-copy-assets@2.0.3(rollup@4.17.2): resolution: {integrity: sha512-ETShhQGb9SoiwcNrvb3BhUNSGR89Jao0+XxxfzzLW1YsUzx8+rMO4z9oqWWmo6OHUmfNQRvqRj0cAyPkS9lN9w==} peerDependencies: rollup: '>=1.1.2' dependencies: fs-extra: 7.0.1 - rollup: 4.14.3 - dev: true + rollup: 4.17.2 /rollup-plugin-delete@2.0.0: resolution: {integrity: sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA==} engines: {node: '>=10'} dependencies: del: 5.1.0 - dev: true /rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} @@ -17769,31 +17549,30 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.14.3: - resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} + /rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.14.3 - '@rollup/rollup-android-arm64': 4.14.3 - '@rollup/rollup-darwin-arm64': 4.14.3 - '@rollup/rollup-darwin-x64': 4.14.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.14.3 - '@rollup/rollup-linux-arm-musleabihf': 4.14.3 - '@rollup/rollup-linux-arm64-gnu': 4.14.3 - '@rollup/rollup-linux-arm64-musl': 4.14.3 - '@rollup/rollup-linux-powerpc64le-gnu': 4.14.3 - '@rollup/rollup-linux-riscv64-gnu': 4.14.3 - '@rollup/rollup-linux-s390x-gnu': 4.14.3 - '@rollup/rollup-linux-x64-gnu': 4.14.3 - '@rollup/rollup-linux-x64-musl': 4.14.3 - '@rollup/rollup-win32-arm64-msvc': 4.14.3 - '@rollup/rollup-win32-ia32-msvc': 4.14.3 - '@rollup/rollup-win32-x64-msvc': 4.14.3 + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 fsevents: 2.3.3 - dev: true /route-recognizer@0.3.4: resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==} @@ -17938,7 +17717,6 @@ packages: engines: {node: '>=10'} dependencies: xmlchars: 2.2.0 - dev: true /schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -17961,9 +17739,9 @@ packages: engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 8.12.0 + ajv: 8.13.0 ajv-formats: 2.1.1 - ajv-keywords: 5.1.0(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.13.0) /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} @@ -17979,7 +17757,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} @@ -18073,7 +17850,6 @@ packages: engines: {node: '>=8'} dependencies: kind-of: 6.0.3 - dev: false /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} @@ -18142,12 +17918,11 @@ packages: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: is-arrayish: 0.3.2 - dev: false /slash@2.0.0: resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} engines: {node: '>=6'} - dev: true + dev: false /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -18216,7 +17991,7 @@ packages: resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} dependencies: - '@socket.io/component-emitter': 3.1.0 + '@socket.io/component-emitter': 3.1.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -18243,24 +18018,24 @@ packages: dependencies: agent-base: 6.0.2(supports-color@8.1.1) debug: 4.3.4(supports-color@8.1.1) - socks: 2.8.1 + socks: 2.8.3 transitivePeerDependencies: - supports-color dev: true - /socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + /socks-proxy-agent@8.0.3: + resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.4(supports-color@8.1.1) - socks: 2.8.1 + socks: 2.8.3 transitivePeerDependencies: - supports-color dev: true - /socks@2.8.1: - resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==} + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} dependencies: ip-address: 9.0.5 @@ -18320,7 +18095,6 @@ packages: engines: {node: '>=0.8.0'} dependencies: amdefine: 1.0.1 - dev: true /source-map@0.4.4: resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==} @@ -18348,7 +18122,6 @@ packages: lodash.foreach: 4.5.0 lodash.template: 4.5.0 source-map: 0.1.43 - dev: true /spawn-args@0.2.0: resolution: {integrity: sha512-73BoniQDcRWgnLAf/suKH6V5H54gd1KLzwYN9FB6J/evqTV33htH9xwV/4BHek+++jzxpVlZQKKZkqstPQPmQg==} @@ -18388,7 +18161,6 @@ packages: /stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - dev: false /stacktracey@2.1.8: resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} @@ -18419,6 +18191,11 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: false + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -18459,7 +18236,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-errors: 1.3.0 es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 @@ -18476,7 +18253,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.3 es-object-atoms: 1.0.0 /string.prototype.trimend@1.0.8: @@ -18508,6 +18285,7 @@ packages: dependencies: is-plain-obj: 1.1.0 is-regexp: 1.0.0 + dev: true /stringstream@0.0.6: resolution: {integrity: sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==} @@ -18520,6 +18298,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 + dev: true /strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} @@ -18586,17 +18365,14 @@ packages: resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} engines: {node: '>= 10.13.0'} peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 webpack: 5.91.0 /styled_string@0.0.1: - resolution: {integrity: sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=} + resolution: {integrity: sha512-DU2KZiB6VbPkO2tGSqQ9n96ZstUPjW7X4sGO6V2m1myIQluX0p1Ol8BrA/l6/EesqhMqXOIXs3cJNOy1UuU2BA==} /sum-up@1.0.3: resolution: {integrity: sha512-zw5P8gnhiqokJUWRdR6F4kIIIke0+ubQSGyYUY506GCbJWtV7F6Xuy0j6S125eSX2oF+a8KdivsZ8PlVEH0Mcw==} @@ -18607,6 +18383,7 @@ packages: /supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} + dev: true /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -18636,7 +18413,6 @@ packages: /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true /symlink-or-copy@1.3.1: resolution: {integrity: sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==} @@ -18664,8 +18440,8 @@ packages: transitivePeerDependencies: - supports-color - /systeminformation@5.22.6: - resolution: {integrity: sha512-hUTQX+bRgIFbv1T/z251NtwGwNIeSyWURnT2BGnsYu6dQNbkiBl4oAwk50acVfITFq1Zvb8KDNgibQK9uGlUGg==} + /systeminformation@5.22.7: + resolution: {integrity: sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==} engines: {node: '>=8.0.0'} os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true @@ -18702,7 +18478,6 @@ packages: engines: {node: '>=6.0.0'} dependencies: rimraf: 2.6.3 - dev: false /temp@0.9.4: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} @@ -18718,7 +18493,7 @@ packages: '@swc/core': '*' esbuild: '*' uglify-js: '*' - webpack: ^5.1.0 + webpack: 5.91.0 peerDependenciesMeta: '@swc/core': optional: true @@ -18726,18 +18501,16 @@ packages: optional: true uglify-js: optional: true - webpack: - optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.29.2 + terser: 5.31.0 webpack: 5.91.0 - /terser@5.29.2: - resolution: {integrity: sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==} + /terser@5.31.0: + resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -18754,6 +18527,7 @@ packages: quibble: 0.9.2 stringify-object-es5: 2.5.0 theredoc: 1.0.0 + dev: true /testem@3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq): resolution: {integrity: sha512-q0U126/nnRH54ZDrr6j1Ai5zK6vOm2rdY/5VJrbqcEPQgOWoLB6zrymWUs7BqN2/yRsdorocl9E9ZEwm7LLIZQ==} @@ -18768,7 +18542,7 @@ packages: compression: 1.7.4 consolidate: 0.16.0(mustache@4.2.0) execa: 1.0.0 - express: 4.19.1 + express: 4.19.2 fireworm: 0.7.2 glob: 7.2.3 http-proxy: 1.18.1 @@ -18850,7 +18624,6 @@ packages: /text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - dev: false /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -18874,15 +18647,13 @@ packages: /theredoc@1.0.0: resolution: {integrity: sha512-KU3SA3TjRRM932jpNfD3u4Ec3bSvedyo5ITPI7zgWYnKep7BwQQaxlhI9qbO+lKJoRnoAbEVfMcAHRuKVYikDA==} + dev: true /thread-loader@3.0.4(webpack@5.91.0): resolution: {integrity: sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==} engines: {node: '>= 10.13.0'} peerDependencies: - webpack: ^4.27.0 || ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true + webpack: 5.91.0 dependencies: json-parse-better-errors: 1.0.2 loader-runner: 4.3.0 @@ -18914,7 +18685,6 @@ packages: /tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - dev: false /tiny-lr@2.0.0: resolution: {integrity: sha512-f6nh0VMRvhGx4KCeK1lQ/jaL0Zdb5WdR+Jk8q9OSUQnaSDxAEGH1fgqLZ+cMl5EW3F2MGnCsalBO1IsnnogW1Q==} @@ -18924,14 +18694,14 @@ packages: faye-websocket: 0.11.4 livereload-js: 3.4.1 object-assign: 4.1.1 - qs: 6.12.0 + qs: 6.12.1 transitivePeerDependencies: - supports-color - /tiny-readdir@2.7.0: - resolution: {integrity: sha512-xPeRQEgt+gHp3rLqunojyx0qrJ4XzCScfNiWiYKJWM8w4ehfOfqDyKuDvsJkFaPFg9y3uKVEVRZPGoavl9ypjw==} + /tiny-readdir@2.7.2: + resolution: {integrity: sha512-211Pbj4W3EVVIrIkABDPlEyLNzAz1Zb921qwmkKQvx7YR90ma3wuzojFx62nptlrAlI/ict1f++r9E/+9DcWnQ==} dependencies: - promise-make-naked: 2.1.1 + promise-make-naked: 2.1.2 /tmp-sync@1.1.2: resolution: {integrity: sha512-npRDYJiMaPWhcLf6q06v/vA3o/ZG4hfHDiBuj1N3Yeh3GTkFQb1YLFs6inDGMWIHjGidl4Oc1+oXHNKKj5vkDQ==} @@ -18939,6 +18709,7 @@ packages: dependencies: fs-sync: 1.0.6 osenv: 0.1.5 + dev: true /tmp@0.0.28: resolution: {integrity: sha512-c2mmfiBmND6SOVxzogm1oda0OJ1HZVIk/5n26N59dDTh80MUeavpiCls4PGAdkX1PFkKokLpcf7prSjCeXLsJg==} @@ -19012,15 +18783,14 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} dependencies: psl: 1.9.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 - dev: true /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -19031,7 +18801,6 @@ packages: engines: {node: '>=8'} dependencies: punycode: 2.3.1 - dev: true /tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} @@ -19066,7 +18835,6 @@ packages: /triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} - dev: false /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} @@ -19096,12 +18864,12 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsx@4.7.2: - resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} + /tsx@4.9.3: + resolution: {integrity: sha512-czVbetlILiyJZI5zGlj2kw9vFiSeyra9liPD4nG+Thh4pKTi0AmMEQ8zdV/L2xbIVKrIqif4sUNrsMAOksx9Zg==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - esbuild: 0.19.12 + esbuild: 0.20.2 get-tsconfig: 4.7.3 optionalDependencies: fsevents: 2.3.3 @@ -19113,64 +18881,64 @@ packages: dev: true optional: true - /turbo-darwin-64@1.13.2: - resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==} + /turbo-darwin-64@1.13.3: + resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} cpu: [x64] os: [darwin] requiresBuild: true dev: false optional: true - /turbo-darwin-arm64@1.13.2: - resolution: {integrity: sha512-0HySm06/D2N91rJJ89FbiI/AodmY8B3WDSFTVEpu2+8spUw7hOJ8okWOT0e5iGlyayUP9gr31eOeL3VFZkpfCw==} + /turbo-darwin-arm64@1.13.3: + resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: false optional: true - /turbo-linux-64@1.13.2: - resolution: {integrity: sha512-7HnibgbqZrjn4lcfIouzlPu8ZHSBtURG4c7Bedu7WJUDeZo+RE1crlrQm8wuwO54S0siYqUqo7GNHxu4IXbioQ==} + /turbo-linux-64@1.13.3: + resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} cpu: [x64] os: [linux] requiresBuild: true dev: false optional: true - /turbo-linux-arm64@1.13.2: - resolution: {integrity: sha512-sUq4dbpk6SNKg/Hkwn256Vj2AEYSQdG96repio894h5/LEfauIK2QYiC/xxAeW3WBMc6BngmvNyURIg7ltrePg==} + /turbo-linux-arm64@1.13.3: + resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: false optional: true - /turbo-windows-64@1.13.2: - resolution: {integrity: sha512-DqzhcrciWq3dpzllJR2VVIyOhSlXYCo4mNEWl98DJ3FZ08PEzcI3ceudlH6F0t/nIcfSItK1bDP39cs7YoZHEA==} + /turbo-windows-64@1.13.3: + resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} cpu: [x64] os: [win32] requiresBuild: true dev: false optional: true - /turbo-windows-arm64@1.13.2: - resolution: {integrity: sha512-WnPMrwfCXxK69CdDfS1/j2DlzcKxSmycgDAqV0XCYpK/812KB0KlvsVAt5PjEbZGXkY88pCJ1BLZHAjF5FcbqA==} + /turbo-windows-arm64@1.13.3: + resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: false optional: true - /turbo@1.13.2: - resolution: {integrity: sha512-rX/d9f4MgRT3yK6cERPAkfavIxbpBZowDQpgvkYwGMGDQ0Nvw1nc0NVjruE76GrzXQqoxR1UpnmEP54vBARFHQ==} + /turbo@1.13.3: + resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} hasBin: true optionalDependencies: - turbo-darwin-64: 1.13.2 - turbo-darwin-arm64: 1.13.2 - turbo-linux-64: 1.13.2 - turbo-linux-arm64: 1.13.2 - turbo-windows-64: 1.13.2 - turbo-windows-arm64: 1.13.2 + turbo-darwin-64: 1.13.3 + turbo-darwin-arm64: 1.13.3 + turbo-linux-64: 1.13.3 + turbo-linux-arm64: 1.13.3 + turbo-windows-64: 1.13.3 + turbo-windows-arm64: 1.13.3 dev: false /tv4@1.3.0: @@ -19194,13 +18962,16 @@ packages: /type-detect@0.1.1: resolution: {integrity: sha512-5rqszGVwYgBoDkIm2oUtvkfZMQ0vk29iDMU0W2qCa3rG0vPDNczCMT4hV/bLBgLg8k8ri6+u3Zbt+S/14eMzlA==} + dev: true /type-detect@1.0.0: resolution: {integrity: sha512-f9Uv6ezcpvCQjJU0Zqbg+65qdcszv3qUQsZfjdRbWiZ7AMenrX1u0lNk9EoWWX6e1F+NULyg27mtdeZ5WhpljA==} + dev: true /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + dev: true /type-fest@0.11.0: resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} @@ -19268,11 +19039,36 @@ packages: /typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: - is-typedarray: 1.0.0 + is-typedarray: 1.0.0 + + /typescript-eslint@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + dev: false /typescript-memoize@1.1.1: resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==} + /typescript@5.4.2: + resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: false + /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -19371,8 +19167,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.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -19417,17 +19211,15 @@ 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 - dev: true /url@0.11.3: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 - qs: 6.12.0 + qs: 6.12.1 dev: true /use@3.1.1: @@ -19458,12 +19250,77 @@ packages: resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - builtins: 5.0.1 + builtins: 5.1.0 + + /validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: false /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + /vite-plugin-dts@3.9.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11): + resolution: {integrity: sha512-pwFIEYQ3LZvMafkEGvNnileb6af5JuyZsBfYQrTDYxdeGEy0OS4B4hCsLPo5YGnhK5k9EzyO6BXVO6y+Lt5T2A==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@microsoft/api-extractor': 7.43.0 + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@vue/language-core': 1.8.27(typescript@5.4.5) + debug: 4.3.4(supports-color@8.1.1) + kolorist: 1.8.0 + magic-string: 0.30.10 + typescript: 5.4.5 + vite: 5.2.11(@types/node@20.12.7) + vue-tsc: 1.8.27(typescript@5.4.5) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + dev: false + + /vite@5.2.11(@types/node@20.12.7): + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.12.7 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.17.2 + optionalDependencies: + fsevents: 2.3.3 + /vizion@2.2.1: resolution: {integrity: sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==} engines: {node: '>=4.0'} @@ -19505,19 +19362,36 @@ packages: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} dev: true + /vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: false + + /vue-tsc@1.8.27(typescript@5.4.5): + resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/typescript': 1.11.1 + '@vue/language-core': 1.8.27(typescript@5.4.5) + semver: 7.6.0 + typescript: 5.4.5 + dev: false + /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 - dev: true /w3c-xmlserializer@2.0.0: resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 - dev: true /w3c-xmlserializer@3.0.0: resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} @@ -19592,12 +19466,12 @@ packages: transitivePeerDependencies: - supports-color - /watcher@2.3.0: - resolution: {integrity: sha512-6hVpT1OhmYTZhsgUND2o2gTL79TosB1rH8DWzDO7KBlyR9Yuxg/LXUGeHJqjjvwpnyHT7uUdDwWczprJuqae9Q==} + /watcher@2.3.1: + resolution: {integrity: sha512-d3yl+ey35h05r5EFP0TafE2jsmQUJ9cc2aernRVyAkZiu0J3+3TbNugNcqdUJDoWOfL2p+bNsN427stsBC/HnA==} dependencies: - dettle: 1.0.1 + dettle: 1.0.2 stubborn-fs: 1.2.5 - tiny-readdir: 2.7.0 + tiny-readdir: 2.7.2 /watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} @@ -19618,12 +19492,10 @@ packages: /webidl-conversions@5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} - dev: true /webidl-conversions@6.1.0: resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} engines: {node: '>=10.4'} - dev: true /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} @@ -19654,7 +19526,7 @@ packages: browserslist: 4.23.0 chrome-trace-event: 1.0.3 enhanced-resolve: 5.16.0 - es-module-lexer: 1.4.2 + es-module-lexer: 1.5.2 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -19689,7 +19561,6 @@ packages: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: iconv-lite: 0.4.24 - dev: true /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} @@ -19704,7 +19575,6 @@ packages: /whatwg-mimetype@2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} @@ -19741,7 +19611,6 @@ packages: lodash: 4.17.21 tr46: 2.1.0 webidl-conversions: 6.1.0 - dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -19800,7 +19669,6 @@ packages: logform: 2.6.0 readable-stream: 3.6.2 triple-beam: 1.4.1 - dev: false /winston@3.13.0: resolution: {integrity: sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==} @@ -19817,7 +19685,10 @@ packages: stack-trace: 0.0.10 triple-beam: 1.4.1 winston-transport: 4.7.0 - dev: false + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -19863,7 +19734,6 @@ packages: graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: false /write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} @@ -19911,7 +19781,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /ws@8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} @@ -19925,8 +19794,8 @@ packages: utf-8-validate: optional: true - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + /ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -19944,7 +19813,6 @@ packages: /xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} @@ -19953,7 +19821,6 @@ packages: /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} @@ -20061,55 +19928,75 @@ packages: - supports-color dev: true + /z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.11.0 + optionalDependencies: + commander: 9.5.0 + dev: false + /zlib@1.0.5: resolution: {integrity: sha512-40fpE2II+Cd3k8HWTWONfeKE2jL+P42iWJ1zzps5W51qcTsOUKM5Q5m2PFb0CLxlmFAaUuUdJGc3OfZy947v0w==} engines: {node: '>=0.2.0'} dev: true - file:packages/-ember-data(@babel/core@7.24.4)(@ember/string@3.1.1): + file:packages/-ember-data(@babel/core@7.24.5)(@ember/string@3.1.1)(@ember/test-helpers@3.3.0)(@ember/test-waiters@3.1.0)(ember-source@5.7.0)(qunit@2.19.4): resolution: {directory: packages/-ember-data, type: directory} id: file:packages/-ember-data name: ember-data - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember/string': 3.1.1 + '@ember/test-helpers': 3.3.0 + '@ember/test-waiters': ^3.1.0 + qunit: 2.19.4 + peerDependenciesMeta: + '@ember/test-helpers': + optional: true + '@ember/test-waiters': + optional: true + qunit: + optional: true dependencies: - '@ember-data/adapter': file:packages/adapter(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/debug': file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/graph': file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/model': file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/serializer': file:packages/serializer(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + '@ember-data/adapter': file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/debug': file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/graph': file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/model': file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/serializer': file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - broccoli-merge-trees: 4.2.0 - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-inflector: 4.0.2(@babel/core@7.24.4) - typescript: 5.4.5 - webpack: 5.91.0 + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@ember/test-waiters': 3.1.0(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-inflector: 4.0.2(@babel/core@7.24.5) + qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) transitivePeerDependencies: - '@babel/core' - '@glint/template' - - '@swc/core' - - esbuild + - ember-source - supports-color - - uglify-js - - webpack-cli - file:packages/active-record(@babel/core@7.24.4)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/active-record(@babel/core@7.24.5)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(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.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/request-utils': workspace:5.4.0-alpha.64 '@ember-data/store': ^4.12.0 || ^5.0.0 @@ -20117,22 +20004,27 @@ packages: '@warp-drive/core-types': workspace:0.0.0-alpha.50 ember-inflector: ^4.0.2 dependencies: - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-inflector: 4.0.2(@babel/core@7.24.4) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-inflector: 4.0.2(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' + - '@glint/template' - supports-color dev: true - file:packages/adapter(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/adapter(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): resolution: {directory: packages/adapter, type: directory} id: file:packages/adapter name: '@ember-data/adapter' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/legacy-compat': workspace:5.4.0-alpha.64 '@ember-data/store': workspace:5.4.0-alpha.64 @@ -20140,93 +20032,157 @@ packages: '@warp-drive/core-types': workspace:0.0.0-alpha.50 ember-inflector: ^4.0.2 dependencies: - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember/edition-utils': 1.2.0 + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-cli-path-utils: 1.0.0 + ember-cli-string-utils: 1.1.0 ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2(@babel/core@7.24.4) + ember-inflector: 4.0.2(@babel/core@7.24.5) + transitivePeerDependencies: + - '@babel/core' + - '@glint/template' + - supports-color + + file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0): + resolution: {directory: packages/build-config, type: directory} + id: file:packages/build-config + name: '@warp-drive/build-config' + engines: {node: '>= 22.1.0'} + dependencies: + '@embroider/addon-shim': 1.8.8 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + babel-import-util: 2.1.1 + broccoli-funnel: 3.0.8 + semver: 7.6.0 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0): + file:packages/codemods: + resolution: {directory: packages/codemods, type: directory} + name: '@ember-data/codemods' + engines: {node: '>= 18.20.1'} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 9.5.0 + ignore: 5.3.1 + jscodeshift: 0.15.2 + strip-ansi: 7.1.0 + typescript: 5.4.5 + winston: 3.13.0 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + dev: true + + file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0): resolution: {directory: packages/core-types, type: directory} id: file:packages/core-types name: '@warp-drive/core-types' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): + file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): resolution: {directory: packages/debug, type: directory} id: file:packages/debug name: '@ember-data/debug' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: + '@ember-data/model': workspace:5.4.0-alpha.64 '@ember-data/store': workspace:5.4.0-alpha.64 '@ember/string': 3.1.1 '@warp-drive/core-types': workspace:0.0.0-alpha.50 dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/model': file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - webpack: 5.91.0 + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: + - '@babel/core' + - '@glint/template' + - supports-color + dev: true + + file:packages/debug(@babel/core@7.24.5)(@ember-data/model@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50): + resolution: {directory: packages/debug, type: directory} + id: file:packages/debug + name: '@ember-data/debug' + engines: {node: '>= 22.1.0'} + peerDependencies: + '@ember-data/model': workspace:5.4.0-alpha.64 + '@ember-data/store': workspace:5.4.0-alpha.64 + '@ember/string': 3.1.1 + '@warp-drive/core-types': workspace:0.0.0-alpha.50 + dependencies: + '@ember-data/model': file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember/edition-utils': 1.2.0 + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + transitivePeerDependencies: + - '@babel/core' - '@glint/template' - - '@swc/core' - - esbuild - supports-color - - uglify-js - - webpack-cli - file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0): + file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0): resolution: {directory: packages/diagnostic, type: directory} id: file:packages/diagnostic name: '@warp-drive/diagnostic' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: - '@ember/test-helpers': '>= 3.3.0' - '@embroider/addon-shim': '>= 1.8.7' + '@ember/test-helpers': 3.3.0 ember-cli-test-loader: '>= 3.1.0' peerDependenciesMeta: '@ember/test-helpers': optional: true - '@embroider/addon-shim': - optional: true ember-cli-test-loader: optional: true dependencies: - '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) - '@embroider/addon-shim': 1.8.7 + '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@warp-drive/build-config': link:packages/build-config chalk: 5.3.0 debug: 4.3.4(supports-color@8.1.1) ember-cli-htmlbars: 6.3.0 - ember-cli-test-loader: 3.1.0(@babel/core@7.24.4) + ember-cli-test-loader: 3.1.0(@babel/core@7.24.5) tmp: 0.2.3 transitivePeerDependencies: - supports-color - file:packages/ember(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): + file:packages/ember(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): resolution: {directory: packages/ember, type: directory} id: file:packages/ember name: '@warp-drive/ember' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/request': ^4.12.7 || > 5.3.3 '@ember-data/store': ^4.12.7 || > 5.3.3 @@ -20238,35 +20194,38 @@ packages: ember-provide-consume-context: optional: true dependencies: - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@ember/test-waiters': 3.1.0(@babel/core@7.24.4) + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': 3.1.0(@babel/core@7.24.5) '@embroider/addon-shim': 1.8.7 - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color dev: true - file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): + file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): resolution: {directory: packages/graph, type: directory} id: file:packages/graph name: '@ember-data/graph' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/store': workspace:5.4.0-alpha.64 '@warp-drive/core-types': workspace:0.0.0-alpha.50 dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' @@ -20276,24 +20235,24 @@ packages: resolution: {directory: packages/holodeck, type: directory} id: file:packages/holodeck name: '@warp-drive/holodeck' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} hasBin: true peerDependencies: '@ember-data/request': workspace:5.4.0-alpha.64 '@warp-drive/core-types': workspace:0.0.0-alpha.50 dependencies: - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@hono/node-server': 1.11.0 - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@hono/node-server': 1.11.1 + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) chalk: 5.3.0 - hono: 4.2.5 + hono: 4.2.9 dev: true - file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(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.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/graph': workspace:5.4.0-alpha.64 '@ember-data/request-utils': workspace:5.4.0-alpha.64 @@ -20304,31 +20263,34 @@ packages: '@ember-data/request-utils': optional: true dependencies: - '@ember-data/graph': file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/graph': file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-inflector: 4.0.2(@babel/core@7.24.4) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-inflector: 4.0.2(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): resolution: {directory: packages/legacy-compat, type: directory} id: file:packages/legacy-compat name: '@ember-data/legacy-compat' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/graph': workspace:5.4.0-alpha.64 '@ember-data/json-api': workspace:5.4.0-alpha.64 '@ember-data/request': workspace:5.4.0-alpha.64 '@ember-data/store': workspace:5.4.0-alpha.64 '@ember/string': 3.1.1 + '@ember/test-waiters': ^3.1.0 '@warp-drive/core-types': workspace:0.0.0-alpha.50 ember-inflector: ^4.0.2 peerDependenciesMeta: @@ -20339,33 +20301,37 @@ packages: ember-inflector: optional: true dependencies: - '@ember-data/graph': file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-inflector: 4.0.2(@babel/core@7.24.4) + '@ember-data/graph': file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': 3.1.0(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-inflector: 4.0.2(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color dev: true - file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): resolution: {directory: packages/legacy-compat, type: directory} id: file:packages/legacy-compat name: '@ember-data/legacy-compat' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/graph': workspace:5.4.0-alpha.64 '@ember-data/json-api': workspace:5.4.0-alpha.64 '@ember-data/request': workspace:5.4.0-alpha.64 '@ember-data/store': workspace:5.4.0-alpha.64 '@ember/string': 3.1.1 + '@ember/test-waiters': ^3.1.0 '@warp-drive/core-types': workspace:0.0.0-alpha.50 ember-inflector: ^4.0.2 peerDependenciesMeta: @@ -20376,28 +20342,30 @@ packages: ember-inflector: optional: true dependencies: - '@ember-data/graph': file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-inflector: 4.0.2(@babel/core@7.24.4) + '@ember-data/graph': file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@ember/test-waiters': 3.1.0(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-inflector: 4.0.2(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): resolution: {directory: packages/model, type: directory} id: file:packages/model name: '@ember-data/model' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: - '@ember-data/debug': workspace:5.4.0-alpha.64 '@ember-data/graph': workspace:5.4.0-alpha.64 '@ember-data/json-api': workspace:5.4.0-alpha.64 '@ember-data/legacy-compat': workspace:5.4.0-alpha.64 @@ -20407,28 +20375,27 @@ packages: '@warp-drive/core-types': workspace:0.0.0-alpha.50 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/debug': file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/graph': file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + '@ember-data/graph': file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-string-utils: 1.1.0 ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2(@babel/core@7.24.4) + ember-inflector: 4.0.2(@babel/core@7.24.5) inflection: 3.0.0 transitivePeerDependencies: - '@babel/core' @@ -20436,13 +20403,12 @@ packages: - supports-color dev: true - file:packages/model(@babel/core@7.24.4)(@ember-data/debug@5.4.0-alpha.64)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/model(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): resolution: {directory: packages/model, type: directory} id: file:packages/model name: '@ember-data/model' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: - '@ember-data/debug': workspace:5.4.0-alpha.64 '@ember-data/graph': workspace:5.4.0-alpha.64 '@ember-data/json-api': workspace:5.4.0-alpha.64 '@ember-data/legacy-compat': workspace:5.4.0-alpha.64 @@ -20452,103 +20418,77 @@ packages: '@warp-drive/core-types': workspace:0.0.0-alpha.50 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/debug': file:packages/debug(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/graph': file:packages/graph(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + '@ember-data/graph': file:packages/graph(@babel/core@7.24.5)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/json-api': file:packages/json-api(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) ember-cli-string-utils: 1.1.0 ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2(@babel/core@7.24.4) + ember-inflector: 4.0.2(@babel/core@7.24.5) inflection: 3.0.0 transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/private-build-infra(@glint/template@1.4.0): - resolution: {directory: packages/private-build-infra, type: directory} - id: file:packages/private-build-infra - name: '@ember-data/private-build-infra' - engines: {node: '>= 18.20.2'} - dependencies: - '@babel/core': 7.24.4(supports-color@8.1.1) - '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) - '@babel/runtime': 7.24.4 - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - babel-import-util: 2.0.2 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.4) - babel-plugin-filter-imports: 4.0.0 - babel6-plugin-strip-class-callcheck: 6.0.0 - broccoli-debug: 0.6.5 - broccoli-file-creator: 2.1.1 - broccoli-merge-trees: 4.2.0 - calculate-cache-key-for-tree: 2.0.0 - chalk: 4.1.2 - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - 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 - semver: 7.6.0 - silent-error: 1.1.1 - transitivePeerDependencies: - - '@glint/template' - - supports-color - - file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): + file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): resolution: {directory: packages/request, type: directory} id: file:packages/request name: '@ember-data/request' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@warp-drive/core-types': workspace:0.0.0-alpha.50 dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember/test-waiters': 3.1.0(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@ember/test-waiters': 3.1.0(@babel/core@7.24.5) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + broccoli-funnel: 3.0.8 + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50): + file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): resolution: {directory: packages/request-utils, type: directory} id: file:packages/request-utils name: '@ember-data/request-utils' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@warp-drive/core-types': workspace:0.0.0-alpha.50 dependencies: - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' + - '@glint/template' - supports-color - file:packages/rest(@babel/core@7.24.4)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/rest(@babel/core@7.24.5)(@ember-data/request-utils@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): resolution: {directory: packages/rest, type: directory} id: file:packages/rest name: '@ember-data/rest' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/request-utils': workspace:5.4.0-alpha.64 '@ember-data/store': ^4.12.0 || ^5.0.0 @@ -20556,134 +20496,159 @@ packages: '@warp-drive/core-types': workspace:0.0.0-alpha.50 ember-inflector: ^4.0.2 dependencies: - '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.4)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-inflector: 4.0.2(@babel/core@7.24.4) + '@ember-data/request-utils': file:packages/request-utils(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-inflector: 4.0.2(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' + - '@glint/template' - supports-color dev: true - file:packages/schema-record(@babel/core@7.24.4)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): + file:packages/schema-record(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): resolution: {directory: packages/schema-record, type: directory} id: file:packages/schema-record name: '@warp-drive/schema-record' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: + '@ember-data/request': workspace:5.4.0-alpha.64 '@ember-data/store': workspace:5.4.0-alpha.64 '@ember-data/tracking': workspace:5.4.0-alpha.64 '@warp-drive/core-types': workspace:0.0.0-alpha.50 dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color dev: true - file:packages/serializer(@babel/core@7.24.4)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): + file:packages/serializer(@babel/core@7.24.5)(@ember-data/legacy-compat@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2): resolution: {directory: packages/serializer, type: directory} id: file:packages/serializer name: '@ember-data/serializer' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/legacy-compat': workspace:5.4.0-alpha.64 + '@ember-data/store': workspace:5.4.0-alpha.64 '@ember/string': 3.1.1 '@warp-drive/core-types': workspace:0.0.0-alpha.50 ember-inflector: ^4.0.2 dependencies: - '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.4)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@ember-data/legacy-compat': file:packages/legacy-compat(@babel/core@7.24.5)(@ember-data/graph@5.4.0-alpha.64)(@ember-data/json-api@5.4.0-alpha.64)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember/string@3.1.1)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-inflector@4.0.2) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember/edition-utils': 1.2.0 + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-cli-path-utils: 1.0.0 + ember-cli-string-utils: 1.1.0 ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2(@babel/core@7.24.4) + ember-inflector: 4.0.2(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): + file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50): resolution: {directory: packages/store, type: directory} id: file:packages/store name: '@ember-data/store' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} peerDependencies: '@ember-data/request': workspace:5.4.0-alpha.64 '@ember-data/tracking': workspace:5.4.0-alpha.64 '@ember/string': 3.1.1 '@warp-drive/core-types': workspace:0.0.0-alpha.50 dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) - '@ember/string': 3.1.1(@babel/core@7.24.4) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) + '@ember/string': 3.1.1(@babel/core@7.24.5) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0): + file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0): resolution: {directory: packages/tracking, type: directory} id: file:packages/tracking name: '@ember-data/tracking' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} + peerDependencies: + '@warp-drive/core-types': workspace:0.0.0-alpha.50 + ember-source: '*' dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) + ember-source: 5.7.0(@babel/core@7.24.5)(@glimmer/component@1.1.2)(@glint/template@1.4.0) transitivePeerDependencies: - '@babel/core' - '@glint/template' - supports-color - file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0): + file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50): resolution: {directory: packages/unpublished-test-infra, type: directory} id: file:packages/unpublished-test-infra name: '@ember-data/unpublished-test-infra' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} + peerDependencies: + '@ember-data/request': workspace:5.4.0-alpha.64 + '@ember-data/store': workspace:5.4.0-alpha.64 + '@ember-data/tracking': workspace:5.4.0-alpha.64 + '@ember/test-helpers': 3.3.0 + '@warp-drive/core-types': workspace:0.0.0-alpha.50 + '@warp-drive/diagnostic': workspace:0.0.0-alpha.50 + peerDependenciesMeta: + '@warp-drive/diagnostic': + optional: true dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) - '@ember/edition-utils': 1.2.0 - '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@types/qunit': 2.19.10 - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - '@warp-drive/diagnostic': file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) - broccoli-merge-trees: 4.2.0 + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) + '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/diagnostic': file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) chalk: 4.1.2 - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-cli-blueprint-test-helpers: 0.19.2(ember-cli@5.7.0) - ember-get-config: 2.1.1(@babel/core@7.24.4)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) semver: 7.6.0 testem: 3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq) - typescript: 5.4.5 webpack: 5.91.0 transitivePeerDependencies: - '@babel/core' - - '@ember/string' - - '@embroider/addon-shim' - '@glint/template' - - '@swc/core' - arc-templates - atpl - babel-core @@ -20698,10 +20663,6 @@ packages: - eco - ect - ejs - - ember-cli - - ember-cli-test-loader - - ember-source - - esbuild - haml-coffee - hamlet - hamljs @@ -20738,48 +20699,49 @@ packages: - toffee - twig - twing - - uglify-js - underscore - utf-8-validate - vash - velocityjs - walrus - - webpack-cli - whiskers + dev: true - file:packages/unpublished-test-infra(@babel/core@7.24.4)(@ember/string@3.1.1)(@glint/template@1.4.0)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0): + file:packages/unpublished-test-infra(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/store@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/test-helpers@3.3.0)(@warp-drive/core-types@0.0.0-alpha.50)(@warp-drive/diagnostic@0.0.0-alpha.50): resolution: {directory: packages/unpublished-test-infra, type: directory} id: file:packages/unpublished-test-infra name: '@ember-data/unpublished-test-infra' - engines: {node: '>= 18.20.2'} + engines: {node: '>= 22.1.0'} + peerDependencies: + '@ember-data/request': workspace:5.4.0-alpha.64 + '@ember-data/store': workspace:5.4.0-alpha.64 + '@ember-data/tracking': workspace:5.4.0-alpha.64 + '@ember/test-helpers': 3.3.0 + '@warp-drive/core-types': workspace:0.0.0-alpha.50 + '@warp-drive/diagnostic': workspace:0.0.0-alpha.50 + peerDependenciesMeta: + '@warp-drive/diagnostic': + optional: true dependencies: - '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0) - '@ember-data/request': file:packages/request(@babel/core@7.24.4)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/store': file:packages/store(@babel/core@7.24.4)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) - '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.4)(@glint/template@1.4.0) - '@ember/edition-utils': 1.2.0 - '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.4)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0) - '@embroider/macros': 1.15.0(@glint/template@1.4.0) - '@types/qunit': 2.19.10 - '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.4)(@glint/template@1.4.0) - '@warp-drive/diagnostic': file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0) - broccoli-merge-trees: 4.2.0 + '@ember-data/request': file:packages/request(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/store': file:packages/store(@babel/core@7.24.5)(@ember-data/request@5.4.0-alpha.64)(@ember-data/tracking@5.4.0-alpha.64)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50) + '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.5)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.50)(ember-source@5.7.0) + '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.5)(@glint/template@1.4.0)(ember-source@5.7.0) + '@embroider/addon-shim': 1.8.7 + '@embroider/macros': 1.16.1(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/build-config': file:packages/build-config(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.5)(@glint/template@1.4.0) + '@warp-drive/diagnostic': file:packages/diagnostic(@ember/test-helpers@3.3.0)(ember-cli-test-loader@3.1.0) chalk: 4.1.2 - ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0) - ember-cli-babel: 8.2.0(@babel/core@7.24.4) - ember-cli-blueprint-test-helpers: 0.19.2(ember-cli@5.7.0) - ember-get-config: 2.1.1(@babel/core@7.24.4)(@glint/template@1.4.0) + ember-auto-import: 2.7.2(@glint/template@1.4.0) + ember-cli-babel: 8.2.0(@babel/core@7.24.5) qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy) semver: 7.6.0 testem: 3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq) - typescript: 5.4.5 webpack: 5.91.0 transitivePeerDependencies: - '@babel/core' - - '@ember/string' - - '@embroider/addon-shim' - '@glint/template' - - '@swc/core' - arc-templates - atpl - babel-core @@ -20794,10 +20756,6 @@ packages: - eco - ect - ejs - - ember-cli - - ember-cli-test-loader - - ember-source - - esbuild - haml-coffee - hamlet - hamljs @@ -20834,12 +20792,9 @@ packages: - toffee - twig - twing - - uglify-js - underscore - utf-8-validate - vash - velocityjs - walrus - - webpack-cli - whiskers - dev: true diff --git a/release/core/publish/steps/generate-tarballs.ts b/release/core/publish/steps/generate-tarballs.ts index 905a9fd0e3b..529d4535a09 100644 --- a/release/core/publish/steps/generate-tarballs.ts +++ b/release/core/publish/steps/generate-tarballs.ts @@ -35,6 +35,10 @@ export async function generatePackageTarballs( throw new Error(`Unexpected attempt to publish private package ${pkg.pkgData.name}`); } + if (!Array.isArray(pkg.pkgData.files) || pkg.pkgData.files.length === 0) { + throw new Error(`Unexpected attempt to publish package ${pkg.pkgData.name} with no files`); + } + try { if (pkg.pkgData.scripts?.['prepack']) { await exec({ cwd: path.join(PROJECT_ROOT, path.dirname(pkg.filePath)), cmd: `bun run prepack` }); diff --git a/release/strategy.json b/release/strategy.json index c39e0a65042..45fab3c5708 100644 --- a/release/strategy.json +++ b/release/strategy.json @@ -35,17 +35,6 @@ "types": "private", "typesPublish": false }, - "@ember-data/codemods": { - "stage": "stable", - "types": "private", - "mirrorPublish": false, - "typesPublish": false - }, - "@ember-data/private-build-infra": { - "stage": "stable", - "types": "private", - "typesPublish": false - }, "@warp-drive/holodeck": { "stage": "alpha", "types": "private", diff --git a/release/tsconfig.json b/release/tsconfig.json index ce0c0b833c8..f0facb9efeb 100644 --- a/release/tsconfig.json +++ b/release/tsconfig.json @@ -7,6 +7,7 @@ "moduleDetection": "force", "allowImportingTsExtensions": true, "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, diff --git a/scripts/downlevel-addons.mjs b/scripts/downlevel-addons.mjs new file mode 100644 index 00000000000..54a506c27b6 --- /dev/null +++ b/scripts/downlevel-addons.mjs @@ -0,0 +1,157 @@ +import fs from 'fs'; +import path from 'path'; +import chalk from 'chalk'; + +function log(msg) { + console.log(chalk.grey(msg)); +} +function fixed(msg) { + log(`\t${chalk.blue('[FIXED]')} ${msg}`); +} + +function walkSync(dir, cb, pkgs = new Map()) { + const fullPath = path.join(process.cwd(), dir); + fs.readdirSync(fullPath).forEach((dirName) => { + const relativePath = path.join(dir, dirName); + const pkgPath = path.join(relativePath, 'package.json'); + const tsConfigPath = path.join(relativePath, 'tsconfig.json'); + const fullPkgPath = path.join(process.cwd(), pkgPath); + const fullTsConfigPath = path.join(process.cwd(), tsConfigPath); + + if (!fs.existsSync(fullPkgPath)) { + console.log(chalk.red(`🚨 Missing package.json in ${relativePath}`)); + return; + } + + const hasTsConfig = fs.existsSync(fullTsConfigPath); + const pkg = JSON.parse(fs.readFileSync(fullPkgPath, 'utf-8')); + const version = pkg.version; + const workspaceVersion = `workspace:${version}`; + + pkgs.set(pkg.name, { + dirName, + relativePath, + pkgPath, + tsConfigPath, + hasTsConfig, + fullPath: path.join(fullPath, dirName), + fullPkgPath, + fullTsConfigPath, + pkg, + name: pkg.name, + version, + workspaceVersion, + }); + }); + + pkgs.forEach((pkg) => cb(pkg, pkgs)); + return pkgs; +} + +function processPackage(info) { + if (!info.pkg['ember-addon']) { + return; + } + + log(`Validating ${chalk.yellow(info.name)}`); + const { fullPkgPath, pkg } = info; + let edited = false; + + if (info.pkg['ember-addon'].version === 2 && info.pkg['ember-addon'].preventDownleveling) { + // ensure that @warp-drive/build-config is in dependencies + if (!pkg.dependencies['@warp-drive/build-config']) { + fixed(`Added missing dependency @warp-drive/build-config`); + pkg.dependencies['@warp-drive/build-config'] = info.workspaceVersion; + edited = true; + } + + // ensure that @warp-drive/build-config is not in devDependencies + if (pkg.devDependencies['@warp-drive/build-config']) { + fixed(`Removed @warp-drive/build-config from devDependencies`); + delete pkg.devDependencies['@warp-drive/build-config']; + edited = true; + } + + // remove @embroider/addon-shim from dependencies + if (pkg.dependencies['@embroider/addon-shim']) { + fixed(`Removed @embroider/addon-shim from dependencies`); + delete pkg.dependencies['@embroider/addon-shim']; + edited = true; + } + + if (edited) { + fs.writeFileSync(fullPkgPath, JSON.stringify(pkg, null, 2) + '\n'); + } + + return; + } + + // ensure that we are v1 + if (info.pkg['ember-addon'].version !== 1) { + fixed(`Set ember-addon.version to 1`); + info.pkg['ember-addon'].version = 1; + edited = true; + } + + // ensure that @warp-drive/build-config is in dependencies + if (!pkg.dependencies['@warp-drive/build-config']) { + fixed(`Added missing dependency @warp-drive/build-config`); + pkg.dependencies['@warp-drive/build-config'] = info.workspaceVersion; + edited = true; + } + + // ensure that @warp-drive/build-config is not in devDependencies + if (pkg.devDependencies['@warp-drive/build-config']) { + fixed(`Removed @warp-drive/build-config from devDependencies`); + delete pkg.devDependencies['@warp-drive/build-config']; + edited = true; + } + + // remove @embroider/addon-shim from dependencies + if (pkg.dependencies['@embroider/addon-shim']) { + fixed(`Removed @embroider/addon-shim from dependencies`); + delete pkg.dependencies['@embroider/addon-shim']; + edited = true; + } + + // ensure that ember-auto-import is in dependencies if we are test infra + if (pkg.name === '@ember-data/unpublished-test-infra') { + if (!pkg.dependencies['ember-auto-import']) { + fixed(`Added missing dependency ember-auto-import`); + pkg.dependencies['ember-auto-import'] = '^2.7.2'; + edited = true; + } + } else { + // ensure that ember-auto-import is not in dependencies + if (pkg.dependencies['ember-auto-import']) { + fixed(`Removed ember-auto-import from dependencies`); + delete pkg.dependencies['ember-auto-import']; + edited = true; + } + } + + // ensure that ember-cli-babel is in dependencies + if (!pkg.dependencies['ember-cli-babel']) { + fixed(`Added missing dependency ember-cli-babel`); + pkg.dependencies['ember-cli-babel'] = '^8.2.0'; + edited = true; + } + + // ensure that ember-auto-import and ember-cli-babel are not in devDependencies + if (pkg.devDependencies['ember-auto-import']) { + fixed(`Removed ember-auto-import from devDependencies`); + delete pkg.devDependencies['ember-auto-import']; + edited = true; + } + if (pkg.devDependencies['ember-cli-babel']) { + fixed(`Removed ember-cli-babel from devDependencies`); + delete pkg.devDependencies['ember-cli-babel']; + edited = true; + } + + if (edited) { + fs.writeFileSync(fullPkgPath, JSON.stringify(pkg, null, 2) + '\n'); + } +} + +walkSync('packages', processPackage); diff --git a/scripts/fix-dep-configuration.mjs b/scripts/fix-dep-configuration.mjs new file mode 100644 index 00000000000..e41ec18c98b --- /dev/null +++ b/scripts/fix-dep-configuration.mjs @@ -0,0 +1,198 @@ +import fs from 'fs'; +import path from 'path'; +import chalk from 'chalk'; +import JSONC from 'comment-json'; + +function log(msg) { + console.log(chalk.grey(msg)); +} +function fixed(msg) { + log(`\t${chalk.blue('[FIXED]')} ${msg}`); +} +function tsFixed(msg) { + log(`\t${chalk.green('[FIXED]')} ${msg}`); +} + +function getRelativePath(pkgA, pkgB) { + return path.relative(pkgA.fullPath, pkgB.fullPath); +} + +function walkSync(dir, cb, pkgs = new Map()) { + const fullPath = path.join(process.cwd(), dir); + fs.readdirSync(fullPath).forEach((dirName) => { + const relativePath = path.join(dir, dirName); + const pkgPath = path.join(relativePath, 'package.json'); + const tsConfigPath = path.join(relativePath, 'tsconfig.json'); + const fullPkgPath = path.join(process.cwd(), pkgPath); + const fullTsConfigPath = path.join(process.cwd(), tsConfigPath); + + if (!fs.existsSync(fullPkgPath)) { + console.log(chalk.red(`🚨 Missing package.json in ${relativePath}`)); + return; + } + + const hasTsConfig = fs.existsSync(fullTsConfigPath); + const pkg = JSON.parse(fs.readFileSync(fullPkgPath, 'utf-8')); + const version = pkg.version; + const workspaceVersion = `workspace:${version}`; + const tsConfig = hasTsConfig ? JSONC.parse(fs.readFileSync(fullTsConfigPath, 'utf-8')) : null; + + pkgs.set(pkg.name, { + dirName, + relativePath, + pkgPath, + tsConfigPath, + hasTsConfig, + fullPath: path.join(fullPath, dirName), + fullPkgPath, + fullTsConfigPath, + pkg, + tsConfig, + name: pkg.name, + version, + workspaceVersion, + }); + }); + + pkgs.forEach((pkg) => cb(pkg, pkgs)); + return pkgs; +} + +function hasReference(srcPkg, info) { + const referencePath = getRelativePath(srcPkg, info); + if (!srcPkg.tsConfig.references) { + return false; + } + return srcPkg.tsConfig.references.some((ref) => ref.path === referencePath); +} + +function hasPaths(srcPkg, info) { + if (!srcPkg.tsConfig.compilerOptions.paths) { + return false; + } + const dep = info.name; + const hasPrimary = !!srcPkg.tsConfig.compilerOptions.paths[dep]; + const hasWildcard = !!srcPkg.tsConfig.compilerOptions.paths[`${dep}/*`]; + + return hasPrimary && hasWildcard; +} + +function addPaths(srcPkg, info) { + const typesDir = info.tsConfig.compilerOptions?.declarationDir; + + if (!typesDir) { + throw new Error(`Missing compilerOptions.declarationDir in ${info.tsConfigPath}`); + } + + const relativePath = getRelativePath(srcPkg, info); + + srcPkg.tsConfig.compilerOptions.paths[info.name] = [`${relativePath}/${typesDir}`]; + srcPkg.tsConfig.compilerOptions.paths[`${info.name}/*`] = [`${relativePath}/${typesDir}/*`]; +} + +function processPackage(info, pkgs) { + log(`Validating ${chalk.yellow(info.name)}`); + const { fullPkgPath, fullTsConfigPath, pkg } = info; + let edited = false; + let tsConfigEdited = false; + /////////////////////////////////////////// + // ensure that peers are in devDependencies + /////////////////////////////////////////// + if (pkg.peerDependencies) { + if (!pkg.devDependencies) { + fixed(`Missing devDependencies hash`); + pkg.devDependencies = {}; + edited = true; + } + + for (const [peer, version] of Object.entries(pkg.peerDependencies)) { + if (!pkg.devDependencies[peer]) { + const addedVersion = pkgs.has(peer) ? pkgs.get(peer).workspaceVersion : version; + pkg.devDependencies[peer] = addedVersion; + edited = true; + fixed(`Added missing peer ${peer}@${version} to devDependencies @ ${chalk.magenta(addedVersion)}`); + } + } + } + const tsConfig = info.tsConfig; + + /////////////////////////////////////////////// + // ensure that all workspace deps are injected + /////////////////////////////////////////////// + const injected = new Set(); + Object.keys(pkg.dependencies ?? {}).forEach((dep) => { + if (pkgs.has(dep)) injected.add(dep); + }); + Object.keys(pkg.devDependencies ?? {}).forEach((dep) => { + if (pkgs.has(dep)) injected.add(dep); + }); + + if (injected.size > 0) { + if (!pkg.dependenciesMeta) { + fixed(`Added missing dependenciesMeta hash`); + pkg.dependenciesMeta = {}; + edited = true; + } + + for (const dep of injected) { + if (!pkg.dependenciesMeta[dep]) { + fixed(`Added missing injected: true for ${dep}`); + pkg.dependenciesMeta[dep] = { injected: true }; + edited = true; + } else if (!pkg.dependenciesMeta[dep].injected) { + fixed(`Set injected: true for ${dep}`); + pkg.dependenciesMeta[dep].injected = true; + edited = true; + } + + const relPkg = pkgs.get(dep); + + ///////////////////////////////////////////////////////////////////// + // ensure that the tsconfig.json has the correct paths and references + ///////////////////////////////////////////////////////////////////// + if (info.hasTsConfig && relPkg.hasTsConfig && relPkg.tsConfig.compilerOptions?.noEmit !== true) { + if (!tsConfig.references) { + tsConfig.references = []; + tsConfigEdited = true; + tsFixed(`Added references array to tsconfig.json`); + } + + if (!hasReference(info, relPkg)) { + const referencePath = getRelativePath(info, relPkg); + tsConfig.references.push({ path: referencePath }); + tsConfigEdited = true; + tsFixed(`Added reference to ${referencePath} in tsconfig.json`); + } + + if (!tsConfig.compilerOptions) { + tsConfig.compilerOptions = {}; + tsConfigEdited = true; + tsFixed(`Added compilerOptions hash to tsconfig.json`); + } + + if (!tsConfig.compilerOptions.paths) { + tsConfig.compilerOptions.paths = {}; + tsConfigEdited = true; + tsFixed(`Added paths hash to tsconfig.json`); + } + + if (!hasPaths(info, relPkg)) { + addPaths(info, relPkg); + tsConfigEdited = true; + tsFixed(`Added paths for ${dep} in tsconfig.json`); + } + } + } + } + + if (edited) { + fs.writeFileSync(fullPkgPath, JSON.stringify(pkg, null, 2) + '\n'); + } + if (tsConfigEdited) { + fs.writeFileSync(fullTsConfigPath, JSONC.stringify(tsConfig, null, 2) + '\n'); + } +} + +const pkgs = walkSync('packages', processPackage); + +walkSync('tests', processPackage, pkgs); diff --git a/scripts/uplevel-adons.mjs b/scripts/uplevel-adons.mjs new file mode 100644 index 00000000000..6c2cb6e3c22 --- /dev/null +++ b/scripts/uplevel-adons.mjs @@ -0,0 +1,76 @@ +import fs from 'fs'; +import path from 'path'; +import chalk from 'chalk'; + +function log(msg) { + console.log(chalk.grey(msg)); +} +function fixed(msg) { + log(`\t${chalk.blue('[FIXED]')} ${msg}`); +} + +function walkSync(dir, cb, pkgs = new Map()) { + const fullPath = path.join(process.cwd(), dir); + fs.readdirSync(fullPath).forEach((dirName) => { + const relativePath = path.join(dir, dirName); + const pkgPath = path.join(relativePath, 'package.json'); + const tsConfigPath = path.join(relativePath, 'tsconfig.json'); + const fullPkgPath = path.join(process.cwd(), pkgPath); + const fullTsConfigPath = path.join(process.cwd(), tsConfigPath); + + if (!fs.existsSync(fullPkgPath)) { + console.log(chalk.red(`🚨 Missing package.json in ${relativePath}`)); + return; + } + + const hasTsConfig = fs.existsSync(fullTsConfigPath); + const pkg = JSON.parse(fs.readFileSync(fullPkgPath, 'utf-8')); + const version = pkg.version; + const workspaceVersion = `workspace:${version}`; + + pkgs.set(pkg.name, { + dirName, + relativePath, + pkgPath, + tsConfigPath, + hasTsConfig, + fullPath: path.join(fullPath, dirName), + fullPkgPath, + fullTsConfigPath, + pkg, + name: pkg.name, + version, + workspaceVersion, + }); + }); + + pkgs.forEach((pkg) => cb(pkg, pkgs)); + return pkgs; +} + +function processPackage(info) { + if (!info.pkg['ember-addon'] || info.pkg['ember-addon'].version === 2) { + return; + } + + log(`Validating ${chalk.yellow(info.name)}`); + const { fullPkgPath, pkg } = info; + + // ensure that we are v2 + fixed(`Set ember-addon.version to 2`); + info.pkg['ember-addon'].version = 2; + + // ensure that ember-auto-import and ember-cli-babel are not in dependencies + if (pkg.dependencies['ember-auto-import']) { + fixed(`Removed dependency ember-auto-import`); + delete pkg.dependencies['ember-auto-import']; + } + if (pkg.dependencies['ember-cli-babel']) { + fixed(`Removed dependency ember-cli-babel`); + delete pkg.dependencies['ember-cli-babel']; + } + + fs.writeFileSync(fullPkgPath, JSON.stringify(pkg, null, 2) + '\n'); +} + +walkSync('packages', processPackage); diff --git a/scripts/validate-deps.js b/scripts/validate-deps.js index a1d258d72d4..6ebb121b2f9 100644 --- a/scripts/validate-deps.js +++ b/scripts/validate-deps.js @@ -1,5 +1,6 @@ const fs = require('fs'); const path = require('path'); +const chalk = require('chalk'); const root = process.cwd(); const pkgs = new Map(); @@ -68,22 +69,22 @@ files.set(configPkg.name, { pkgs.forEach((pkg) => { let edited = false; - if (pkg.version !== currentVersion) { - throw new Error(`Version mismatch for ${pkg.name} - expected ${currentVersion} but found ${pkg.version}`); - } + console.log( + chalk.grey(`\tValidating ${pkg.private ? '(private) ' : ''}${chalk.yellow(pkg.name)}@${chalk.magenta(pkg.version)}`) + ); if (!pkg.scripts) { - console.log(`Missing scripts for ${pkg.name}`); + console.log(chalk.grey(`\t\t[FIX] Missing scripts`)); edited = true; pkg.scripts = {}; } - if (!pkg.scripts['_syncPnpm']) { - console.log(`Missing _syncPnpm script for ${pkg.name}`); - edited = true; - pkg.scripts['_syncPnpm'] = 'bun run sync-dependencies-meta-injected'; - } + // if (!pkg.scripts['_syncPnpm']) { + // console.log(`Missing _syncPnpm script for ${pkg.name}`); + // edited = true; + // pkg.scripts['_syncPnpm'] = 'bun run sync-dependencies-meta-injected'; + // } if (pkg.scripts['prepare']) { - console.log(`Removing prepare script for ${pkg.name}`); + console.log(chalk.grey(`\t\t[FIX] Removing scripts.prepare`)); edited = true; delete pkg.scripts['prepare']; } diff --git a/tests/blueprints/.eslintrc.cjs b/tests/blueprints/.eslintrc.cjs deleted file mode 100644 index 1c4b6969b8a..00000000000 --- a/tests/blueprints/.eslintrc.cjs +++ /dev/null @@ -1,32 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const mocha = require('@warp-drive/internal-config/eslint/mocha.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.cjs'); - -module.exports = { - ...parser.defaults(), - - plugins: [...base.plugins(), ...imports.plugins()], - extends: [...base.extend()], - rules: Object.assign(base.rules(), imports.rules(), isolation.rules(), {}), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - qunit.defaults({ - files: ['fixtures/**/*.{js,ts}'], - rules: { - // Fixing these would cause test failures - 'prefer-const': 'off', - 'simple-import-sort/imports': 'off', - }, - }), - mocha.defaults(), - ], -}; diff --git a/tests/blueprints/eslint.config.mjs b/tests/blueprints/eslint.config.mjs new file mode 100644 index 00000000000..28fded541f2 --- /dev/null +++ b/tests/blueprints/eslint.config.mjs @@ -0,0 +1,32 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; +import * as mocha from '@warp-drive/internal-config/eslint/mocha.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + js.browser({ + srcDirs: ['fixtures'], + allowedImports: ['qunit'], + rules: { + // Fixing these would cause test failures + 'prefer-const': 'off', + 'simple-import-sort/imports': 'off', + }, + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs({ + files: ['tests/*'], + }), + + mocha.cjs(), +]; diff --git a/tests/blueprints/fixtures/adapter-test/rfc232-addon.js b/tests/blueprints/fixtures/adapter-test/addon-default.js similarity index 72% rename from tests/blueprints/fixtures/adapter-test/rfc232-addon.js rename to tests/blueprints/fixtures/adapter-test/addon-default.js index 4a2da233d1e..f3db94097cd 100644 --- a/tests/blueprints/fixtures/adapter-test/rfc232-addon.js +++ b/tests/blueprints/fixtures/adapter-test/addon-default.js @@ -1,13 +1,12 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'dummy/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Adapter | foo', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let adapter = this.owner.lookup('adapter:foo'); - assert.ok(adapter); + const adapter = this.owner.lookup('adapter:foo'); + assert.ok(adapter, 'adapter exists'); }); }); diff --git a/tests/blueprints/fixtures/adapter-test/application-default.js b/tests/blueprints/fixtures/adapter-test/application-default.js index 6dcf7317e98..f89f3a828c1 100644 --- a/tests/blueprints/fixtures/adapter-test/application-default.js +++ b/tests/blueprints/fixtures/adapter-test/application-default.js @@ -1,13 +1,12 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Adapter | application', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let adapter = this.owner.lookup('adapter:application'); - assert.ok(adapter); + const adapter = this.owner.lookup('adapter:application'); + assert.ok(adapter, 'adapter exists'); }); }); diff --git a/tests/blueprints/fixtures/adapter-test/foo-default.js b/tests/blueprints/fixtures/adapter-test/foo-default.js index 619a1ca9857..c48a37dcb73 100644 --- a/tests/blueprints/fixtures/adapter-test/foo-default.js +++ b/tests/blueprints/fixtures/adapter-test/foo-default.js @@ -1,13 +1,12 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Adapter | foo', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let adapter = this.owner.lookup('adapter:foo'); - assert.ok(adapter); + const adapter = this.owner.lookup('adapter:foo'); + assert.ok(adapter, 'adapter exists'); }); }); diff --git a/tests/blueprints/fixtures/adapter-test/rfc232.js b/tests/blueprints/fixtures/adapter-test/rfc232.js deleted file mode 100644 index 619a1ca9857..00000000000 --- a/tests/blueprints/fixtures/adapter-test/rfc232.js +++ /dev/null @@ -1,13 +0,0 @@ -import { module, test } from 'qunit'; - -import { setupTest } from 'my-app/tests/helpers'; - -module('Unit | Adapter | foo', function (hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function (assert) { - let adapter = this.owner.lookup('adapter:foo'); - assert.ok(adapter); - }); -}); diff --git a/tests/blueprints/fixtures/addon/package/package.json b/tests/blueprints/fixtures/addon/package/package.json index 8dc5e8a0f19..f663058e936 100644 --- a/tests/blueprints/fixtures/addon/package/package.json +++ b/tests/blueprints/fixtures/addon/package/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "description": "Addon fixture package for ember-cli-blueprint-test-helpers", "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "devDependencies": { "ember-cli": "*", diff --git a/tests/blueprints/fixtures/app/package/package.json b/tests/blueprints/fixtures/app/package/package.json index 7baa13b05c6..52703c3a606 100644 --- a/tests/blueprints/fixtures/app/package/package.json +++ b/tests/blueprints/fixtures/app/package/package.json @@ -4,7 +4,7 @@ "description": "App fixture package for ember-cli-blueprint-test-helpers", "private": true, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "devDependencies": { "ember-cli": "*", diff --git a/tests/blueprints/fixtures/model-test/rfc232-addon.js b/tests/blueprints/fixtures/model-test/addon-default.js similarity index 63% rename from tests/blueprints/fixtures/model-test/rfc232-addon.js rename to tests/blueprints/fixtures/model-test/addon-default.js index eae6cef922b..9b368ceff65 100644 --- a/tests/blueprints/fixtures/model-test/rfc232-addon.js +++ b/tests/blueprints/fixtures/model-test/addon-default.js @@ -1,14 +1,13 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'dummy/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Model | foo', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let model = store.createRecord('foo', {}); - assert.ok(model); + const store = this.owner.lookup('service:store'); + const model = store.createRecord('foo', {}); + assert.ok(model, 'model exists'); }); }); diff --git a/tests/blueprints/fixtures/model-test/comment-default.js b/tests/blueprints/fixtures/model-test/comment-default.js index 9fe885c073d..7502511fe46 100644 --- a/tests/blueprints/fixtures/model-test/comment-default.js +++ b/tests/blueprints/fixtures/model-test/comment-default.js @@ -1,14 +1,13 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Model | comment', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let model = store.createRecord('comment', {}); - assert.ok(model); + const store = this.owner.lookup('service:store'); + const model = store.createRecord('comment', {}); + assert.ok(model, 'model exists'); }); }); diff --git a/tests/blueprints/fixtures/model-test/foo-default.js b/tests/blueprints/fixtures/model-test/foo-default.js index 71843632511..f15b80537d4 100644 --- a/tests/blueprints/fixtures/model-test/foo-default.js +++ b/tests/blueprints/fixtures/model-test/foo-default.js @@ -1,14 +1,13 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Model | foo', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let model = store.createRecord('foo', {}); - assert.ok(model); + const store = this.owner.lookup('service:store'); + const model = store.createRecord('foo', {}); + assert.ok(model, 'model exists'); }); }); diff --git a/tests/blueprints/fixtures/model-test/post-default.js b/tests/blueprints/fixtures/model-test/post-default.js index 9a968c9dd62..a59db431ccf 100644 --- a/tests/blueprints/fixtures/model-test/post-default.js +++ b/tests/blueprints/fixtures/model-test/post-default.js @@ -1,14 +1,13 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Model | post', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let model = store.createRecord('post', {}); - assert.ok(model); + const store = this.owner.lookup('service:store'); + const model = store.createRecord('post', {}); + assert.ok(model, 'model exists'); }); }); diff --git a/tests/blueprints/fixtures/model-test/rfc232.js b/tests/blueprints/fixtures/model-test/rfc232.js deleted file mode 100644 index 71843632511..00000000000 --- a/tests/blueprints/fixtures/model-test/rfc232.js +++ /dev/null @@ -1,14 +0,0 @@ -import { module, test } from 'qunit'; - -import { setupTest } from 'my-app/tests/helpers'; - -module('Unit | Model | foo', function (hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let model = store.createRecord('foo', {}); - assert.ok(model); - }); -}); diff --git a/tests/blueprints/fixtures/serializer-test/addon-default.js b/tests/blueprints/fixtures/serializer-test/addon-default.js new file mode 100644 index 00000000000..2ac86ce16da --- /dev/null +++ b/tests/blueprints/fixtures/serializer-test/addon-default.js @@ -0,0 +1,23 @@ +import { setupTest } from 'dummy/tests/helpers'; +import { module, test } from 'qunit'; + +module('Unit | Serializer | foo', function (hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function (assert) { + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('foo'); + + assert.ok(serializer, 'serializer exists'); + }); + + test('it serializes records', function (assert) { + const store = this.owner.lookup('service:store'); + const record = store.createRecord('foo', {}); + + const serializedRecord = record.serialize(); + + assert.ok(serializedRecord, 'it serializes records'); + }); +}); diff --git a/tests/blueprints/fixtures/serializer-test/application-default.js b/tests/blueprints/fixtures/serializer-test/application-default.js index 64cbac10aeb..51e5be4ca2c 100644 --- a/tests/blueprints/fixtures/serializer-test/application-default.js +++ b/tests/blueprints/fixtures/serializer-test/application-default.js @@ -1,24 +1,23 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Serializer | application', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('application'); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('application'); - assert.ok(serializer); + assert.ok(serializer, 'serializer exists'); }); test('it serializes records', function (assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('application', {}); + const store = this.owner.lookup('service:store'); + const record = store.createRecord('application', {}); - let serializedRecord = record.serialize(); + const serializedRecord = record.serialize(); - assert.ok(serializedRecord); + assert.ok(serializedRecord, 'it serializes records'); }); }); diff --git a/tests/blueprints/fixtures/serializer-test/foo-default.js b/tests/blueprints/fixtures/serializer-test/foo-default.js index da81d2da6b5..dd6ed83bd68 100644 --- a/tests/blueprints/fixtures/serializer-test/foo-default.js +++ b/tests/blueprints/fixtures/serializer-test/foo-default.js @@ -1,24 +1,23 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Serializer | foo', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('foo'); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('foo'); - assert.ok(serializer); + assert.ok(serializer, 'serializer exists'); }); test('it serializes records', function (assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('foo', {}); + const store = this.owner.lookup('service:store'); + const record = store.createRecord('foo', {}); - let serializedRecord = record.serialize(); + const serializedRecord = record.serialize(); - assert.ok(serializedRecord); + assert.ok(serializedRecord, 'it serializes records'); }); }); diff --git a/tests/blueprints/fixtures/serializer-test/rfc232-addon.js b/tests/blueprints/fixtures/serializer-test/rfc232-addon.js deleted file mode 100644 index f4e8c217a6e..00000000000 --- a/tests/blueprints/fixtures/serializer-test/rfc232-addon.js +++ /dev/null @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; - -import { setupTest } from 'dummy/tests/helpers'; - -module('Unit | Serializer | foo', function (hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('foo'); - - assert.ok(serializer); - }); - - test('it serializes records', function (assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('foo', {}); - - let serializedRecord = record.serialize(); - - assert.ok(serializedRecord); - }); -}); diff --git a/tests/blueprints/fixtures/serializer-test/rfc232.js b/tests/blueprints/fixtures/serializer-test/rfc232.js deleted file mode 100644 index da81d2da6b5..00000000000 --- a/tests/blueprints/fixtures/serializer-test/rfc232.js +++ /dev/null @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; - -import { setupTest } from 'my-app/tests/helpers'; - -module('Unit | Serializer | foo', function (hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function (assert) { - let store = this.owner.lookup('service:store'); - let serializer = store.serializerFor('foo'); - - assert.ok(serializer); - }); - - test('it serializes records', function (assert) { - let store = this.owner.lookup('service:store'); - let record = store.createRecord('foo', {}); - - let serializedRecord = record.serialize(); - - assert.ok(serializedRecord); - }); -}); diff --git a/tests/blueprints/fixtures/transform-test/rfc232-addon.js b/tests/blueprints/fixtures/transform-test/addon-default.js similarity index 70% rename from tests/blueprints/fixtures/transform-test/rfc232-addon.js rename to tests/blueprints/fixtures/transform-test/addon-default.js index 9d888bbfc34..295349e8800 100644 --- a/tests/blueprints/fixtures/transform-test/rfc232-addon.js +++ b/tests/blueprints/fixtures/transform-test/addon-default.js @@ -1,13 +1,12 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'dummy/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Transform | foo', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let transform = this.owner.lookup('transform:foo'); - assert.ok(transform); + const transform = this.owner.lookup('transform:foo'); + assert.ok(transform, 'transform exists'); }); }); diff --git a/tests/blueprints/fixtures/transform-test/default.js b/tests/blueprints/fixtures/transform-test/default.js index 869294ba001..1887224dbe9 100644 --- a/tests/blueprints/fixtures/transform-test/default.js +++ b/tests/blueprints/fixtures/transform-test/default.js @@ -1,13 +1,12 @@ -import { module, test } from 'qunit'; - import { setupTest } from 'my-app/tests/helpers'; +import { module, test } from 'qunit'; module('Unit | Transform | foo', function (hooks) { setupTest(hooks); // Replace this with your real tests. test('it exists', function (assert) { - let transform = this.owner.lookup('transform:foo'); - assert.ok(transform); + const transform = this.owner.lookup('transform:foo'); + assert.ok(transform, 'transform exists'); }); }); diff --git a/tests/blueprints/fixtures/transform-test/rfc232.js b/tests/blueprints/fixtures/transform-test/rfc232.js deleted file mode 100644 index 869294ba001..00000000000 --- a/tests/blueprints/fixtures/transform-test/rfc232.js +++ /dev/null @@ -1,13 +0,0 @@ -import { module, test } from 'qunit'; - -import { setupTest } from 'my-app/tests/helpers'; - -module('Unit | Transform | foo', function (hooks) { - setupTest(hooks); - - // Replace this with your real tests. - test('it exists', function (assert) { - let transform = this.owner.lookup('transform:foo'); - assert.ok(transform); - }); -}); diff --git a/tests/blueprints/package.json b/tests/blueprints/package.json index f1a0ace1d14..9386115733a 100644 --- a/tests/blueprints/package.json +++ b/tests/blueprints/package.json @@ -11,17 +11,14 @@ "license": "MIT", "author": "", "scripts": { - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "test:blueprints": "mocha tests", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/unpublished-test-infra": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/adapter": { "injected": true }, @@ -79,14 +76,16 @@ "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", "@ember-data/model": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/serializer": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", "@ember-data/tracking": "workspace:5.4.0-alpha.64", "@ember-data/unpublished-test-infra": "workspace:5.4.0-alpha.64", + "@ember/edition-utils": "^1.2.0", "@ember/string": "3.1.1", + "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", @@ -95,12 +94,12 @@ "ember-cli-blueprint-test-helpers": "^0.19.2", "ember-inflector": "^4.0.2", "ember-source": "~5.7.0", - "pnpm-sync-dependencies-meta-injected": "0.0.10", "mocha": "^10.4.0", + "pnpm-sync-dependencies-meta-injected": "0.0.10", "silent-error": "^1.1.1" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/blueprints/tests/adapter-test.js b/tests/blueprints/tests/adapter-test.js index dede1ecf93a..57a816c9f17 100644 --- a/tests/blueprints/tests/adapter-test.js +++ b/tests/blueprints/tests/adapter-test.js @@ -1,27 +1,56 @@ 'use strict'; +const { describe, it, beforeEach, afterEach } = require('mocha'); const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); const chai = require('ember-cli-blueprint-test-helpers/chai'); const SilentError = require('silent-error'); -const generateFakePackageManifest = require('@ember-data/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest'); -const fixture = require('@ember-data/unpublished-test-infra/src/node-test-helpers/fixture'); -const setupTestEnvironment = require('@ember-data/unpublished-test-infra/src/node-test-helpers/setup-test-environment'); -const setupTestHooks = blueprintHelpers.setupTestHooks; +const path = require('path'); +const file = require('ember-cli-blueprint-test-helpers/chai').file; + +function fixture(directory, filePath) { + return file(path.join(directory, '../fixtures', filePath)); +} + +const { setEdition, clearEdition } = require('@ember/edition-utils'); + +function enableOctane(hooks) { + hooks.beforeEach(function () { + setEdition('octane'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + +function enableClassic(hooks) { + hooks.beforeEach(function () { + setEdition('classic'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + const emberNew = blueprintHelpers.emberNew; const emberGenerate = blueprintHelpers.emberGenerate; const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; const modifyPackages = blueprintHelpers.modifyPackages; const expect = chai.expect; -const enableOctane = setupTestEnvironment.enableOctane; -const enableClassic = setupTestEnvironment.enableClassic; + +function setupTestHooks(context) { + // context.timeout = function () {}; + blueprintHelpers.setupTestHooks(context); +} describe('Acceptance: generate and destroy adapter blueprints', function () { setupTestHooks(this); describe('classic', function () { - enableClassic(); + enableClassic({ beforeEach, afterEach }); beforeEach(async function () { await emberNew(); @@ -36,7 +65,7 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { .to.contain(`import JSONAPIAdapter from '@ember-data/adapter/json-api';`) .to.contain('export default JSONAPIAdapter.extend({'); - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }); }); @@ -49,7 +78,7 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { .to.contain("import ApplicationAdapter from './application';") .to.contain('export default ApplicationAdapter.extend({'); - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }); }); @@ -61,7 +90,7 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { .to.contain("import BarAdapter from './bar';") .to.contain('export default BarAdapter.extend({'); - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }); }); @@ -90,29 +119,13 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { const args = ['adapter-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); - }); - }); - - describe('adapter-test with ember-cli-qunit@4.1.0', function () { - beforeEach(function () { - modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('adapter-test-test foo', function () { - return emberGenerateDestroy(['adapter-test', 'foo'], (_file) => { - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); - }); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }); }); }); describe('octane', function () { - enableOctane(); + enableOctane({ beforeEach, afterEach }); beforeEach(async function () { await emberNew(); @@ -127,7 +140,7 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { .to.contain(`import JSONAPIAdapter from '@ember-data/adapter/json-api';`) .to.contain('export default class FooAdapter extends JSONAPIAdapter {'); - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }); }); @@ -140,7 +153,7 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { .to.contain("import ApplicationAdapter from './application';") .to.contain('export default class FooAdapter extends ApplicationAdapter {'); - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }) ); }); @@ -153,7 +166,7 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { .to.contain("import BarAdapter from './bar';") .to.contain('export default class FooAdapter extends BarAdapter {'); - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }); }); @@ -175,23 +188,7 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { const args = ['adapter-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232.js')); - }); - }); - - describe('adapter-test with ember-cli-qunit@4.1.0', function () { - beforeEach(function () { - modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('adapter-test-test foo', function () { - return emberGenerateDestroy(['adapter-test', 'foo'], (_file) => { - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); - }); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/foo-default.js')); }); }); }); @@ -205,7 +202,9 @@ describe('Acceptance: generate and destroy adapter blueprints', function () { describe('with ember-qunit (default)', function () { it('adapter-test foo', function () { return emberGenerateDestroy(['adapter-test', 'foo'], (_file) => { - expect(_file('tests/unit/adapters/foo-test.js')).to.equal(fixture(__dirname, 'adapter-test/rfc232-addon.js')); + expect(_file('tests/unit/adapters/foo-test.js')).to.equal( + fixture(__dirname, 'adapter-test/addon-default.js') + ); }); }); }); diff --git a/tests/blueprints/tests/model-test.js b/tests/blueprints/tests/model-test.js index 2e7e91ea0ef..8d16bdf60ba 100644 --- a/tests/blueprints/tests/model-test.js +++ b/tests/blueprints/tests/model-test.js @@ -1,24 +1,52 @@ 'use strict'; +const { describe, it, beforeEach, afterEach } = require('mocha'); const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); const chai = require('ember-cli-blueprint-test-helpers/chai'); -const generateFakePackageManifest = require('@ember-data/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest'); -const fixture = require('@ember-data/unpublished-test-infra/src/node-test-helpers/fixture'); -const setupTestEnvironment = require('@ember-data/unpublished-test-infra/src/node-test-helpers/setup-test-environment'); -const setupTestHooks = blueprintHelpers.setupTestHooks; +const path = require('path'); +const file = require('ember-cli-blueprint-test-helpers/chai').file; + +function fixture(directory, filePath) { + return file(path.join(directory, '../fixtures', filePath)); +} + const emberNew = blueprintHelpers.emberNew; const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; const modifyPackages = blueprintHelpers.modifyPackages; const expect = chai.expect; -const enableOctane = setupTestEnvironment.enableOctane; -const enableClassic = setupTestEnvironment.enableClassic; +const { setEdition, clearEdition } = require('@ember/edition-utils'); + +function enableOctane(hooks) { + hooks.beforeEach(function () { + setEdition('octane'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + +function enableClassic(hooks) { + hooks.beforeEach(function () { + setEdition('classic'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + +function setupTestHooks(context) { + // context.timeout = function () {}; + blueprintHelpers.setupTestHooks(context); +} describe('Acceptance: generate and destroy model blueprints', function () { setupTestHooks(this); describe('classic', function () { - enableClassic(); + enableClassic({ beforeEach, afterEach }); beforeEach(async function () { await emberNew(); @@ -33,7 +61,7 @@ describe('Acceptance: generate and destroy model blueprints', function () { .to.contain(`import Model from '@ember-data/model';`) .to.contain('export default Model.extend('); - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/rfc232.js')); + expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); }); }); @@ -64,7 +92,7 @@ describe('Acceptance: generate and destroy model blueprints', function () { .to.contain(" name: attr('string'),") .to.contain(" customAttr: attr('custom-transform')"); - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/rfc232.js')); + expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); }); }); @@ -102,29 +130,13 @@ describe('Acceptance: generate and destroy model blueprints', function () { const args = ['model-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/rfc232.js')); - }); - }); - - describe('model-test with ember-cli-qunit@4.1.0', function () { - beforeEach(function () { - modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('model-test-test foo', function () { - return emberGenerateDestroy(['model-test', 'foo'], (_file) => { - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); - }); + expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); }); }); }); describe('octane', function () { - enableOctane(); + enableOctane({ beforeEach, afterEach }); beforeEach(async function () { await emberNew(); @@ -139,7 +151,7 @@ describe('Acceptance: generate and destroy model blueprints', function () { .to.contain(`import Model from '@ember-data/model';`) .to.contain('export default class FooModel extends Model {'); - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/rfc232.js')); + expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); }); }); @@ -170,7 +182,7 @@ describe('Acceptance: generate and destroy model blueprints', function () { .to.contain(" @attr('string') name;") .to.contain(" @attr('custom-transform') customAttr;"); - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/rfc232.js')); + expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); }); }); @@ -208,23 +220,7 @@ describe('Acceptance: generate and destroy model blueprints', function () { const args = ['model-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/rfc232.js')); - }); - }); - - describe('model-test with ember-cli-qunit@4.1.0', function () { - beforeEach(function () { - modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('model-test-test foo', function () { - return emberGenerateDestroy(['model-test', 'foo'], (_file) => { - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); - }); + expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/foo-default.js')); }); }); }); @@ -238,7 +234,7 @@ describe('Acceptance: generate and destroy model blueprints', function () { describe('with ember-qunit (default)', function () { it('model-test foo', function () { return emberGenerateDestroy(['model-test', 'foo'], (_file) => { - expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/rfc232-addon.js')); + expect(_file('tests/unit/models/foo-test.js')).to.equal(fixture(__dirname, 'model-test/addon-default.js')); }); }); }); diff --git a/tests/blueprints/tests/serializer-test.js b/tests/blueprints/tests/serializer-test.js index a3dcdf61395..fa7d9e1a7bf 100644 --- a/tests/blueprints/tests/serializer-test.js +++ b/tests/blueprints/tests/serializer-test.js @@ -1,26 +1,54 @@ 'use strict'; +const { describe, it, beforeEach, afterEach } = require('mocha'); const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); const chai = require('ember-cli-blueprint-test-helpers/chai'); const SilentError = require('silent-error'); -const generateFakePackageManifest = require('@ember-data/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest'); -const fixture = require('@ember-data/unpublished-test-infra/src/node-test-helpers/fixture'); -const setupTestEnvironment = require('@ember-data/unpublished-test-infra/src/node-test-helpers/setup-test-environment'); -const setupTestHooks = blueprintHelpers.setupTestHooks; +const path = require('path'); +const file = require('ember-cli-blueprint-test-helpers/chai').file; + +function fixture(directory, filePath) { + return file(path.join(directory, '../fixtures', filePath)); +} + const emberNew = blueprintHelpers.emberNew; const emberGenerate = blueprintHelpers.emberGenerate; const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; const modifyPackages = blueprintHelpers.modifyPackages; const expect = chai.expect; -const enableOctane = setupTestEnvironment.enableOctane; -const enableClassic = setupTestEnvironment.enableClassic; +const { setEdition, clearEdition } = require('@ember/edition-utils'); + +function enableOctane(hooks) { + hooks.beforeEach(function () { + setEdition('octane'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + +function enableClassic(hooks) { + hooks.beforeEach(function () { + setEdition('classic'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + +function setupTestHooks(context) { + // context.timeout = function () {}; + blueprintHelpers.setupTestHooks(context); +} describe('Acceptance: generate and destroy serializer blueprints', function () { setupTestHooks(this); describe('classic', function () { - enableClassic(); + enableClassic({ beforeEach, afterEach }); beforeEach(async function () { await emberNew(); @@ -35,7 +63,9 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { .to.contain(`import JSONAPISerializer from '@ember-data/serializer/json-api';`) .to.contain('export default JSONAPISerializer.extend('); - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }); }); @@ -48,7 +78,9 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { .to.contain("import ApplicationSerializer from './application';") .to.contain('export default ApplicationSerializer.extend({'); - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }) ); }); @@ -61,7 +93,9 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { .to.contain("import BarSerializer from './bar';") .to.contain('export default BarSerializer.extend({'); - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }); }); @@ -90,32 +124,15 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { const args = ['serializer-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); - }); - }); - - describe('serializer-test with ember-cli-qunit@4.1.0', function () { - beforeEach(async function () { - await modifyPackages([{ name: '@ember-data/serializer', dev: true }]); - await modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('serializer-test-test foo', function () { - return emberGenerateDestroy(['serializer-test', 'foo'], (_file) => { - expect(_file('tests/unit/serializers/foo-test.js')).to.equal( - fixture(__dirname, 'serializer-test/foo-default.js') - ); - }); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }); }); }); describe('octane', function () { - enableOctane(); + enableOctane({ beforeEach, afterEach }); beforeEach(async function () { await emberNew(); @@ -130,7 +147,9 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { .to.contain(`import JSONAPISerializer from '@ember-data/serializer/json-api';`) .to.contain('export default class FooSerializer extends JSONAPISerializer {'); - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }); }); @@ -143,7 +162,9 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { .to.contain("import ApplicationSerializer from './application';") .to.contain('export default class FooSerializer extends ApplicationSerializer {'); - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }) ); }); @@ -156,7 +177,9 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { .to.contain("import BarSerializer from './bar';") .to.contain('export default class FooSerializer extends BarSerializer'); - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }); }); @@ -185,26 +208,9 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { const args = ['serializer-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/serializers/foo-test.js')).to.equal(fixture(__dirname, 'serializer-test/rfc232.js')); - }); - }); - - describe('serializer-test with ember-cli-qunit@4.1.0', function () { - beforeEach(async function () { - await modifyPackages([{ name: '@ember-data/serializer', dev: true }]); - modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('serializer-test-test foo', function () { - return emberGenerateDestroy(['serializer-test', 'foo'], (_file) => { - expect(_file('tests/unit/serializers/foo-test.js')).to.equal( - fixture(__dirname, 'serializer-test/foo-default.js') - ); - }); + expect(_file('tests/unit/serializers/foo-test.js')).to.equal( + fixture(__dirname, 'serializer-test/foo-default.js') + ); }); }); }); @@ -219,7 +225,7 @@ describe('Acceptance: generate and destroy serializer blueprints', function () { it('serializer-test foo', function () { return emberGenerateDestroy(['serializer-test', 'foo'], (_file) => { expect(_file('tests/unit/serializers/foo-test.js')).to.equal( - fixture(__dirname, 'serializer-test/rfc232-addon.js') + fixture(__dirname, 'serializer-test/addon-default.js') ); }); }); diff --git a/tests/blueprints/tests/transform-test.js b/tests/blueprints/tests/transform-test.js index 10cff0141c6..75ce0f09b77 100644 --- a/tests/blueprints/tests/transform-test.js +++ b/tests/blueprints/tests/transform-test.js @@ -1,24 +1,52 @@ 'use strict'; +const { describe, it, beforeEach, afterEach } = require('mocha'); const blueprintHelpers = require('ember-cli-blueprint-test-helpers/helpers'); const chai = require('ember-cli-blueprint-test-helpers/chai'); -const generateFakePackageManifest = require('@ember-data/unpublished-test-infra/src/node-test-helpers/generate-fake-package-manifest'); -const fixture = require('@ember-data/unpublished-test-infra/src/node-test-helpers/fixture'); -const setupTestEnvironment = require('@ember-data/unpublished-test-infra/src/node-test-helpers/setup-test-environment'); -const setupTestHooks = blueprintHelpers.setupTestHooks; +const path = require('path'); +const file = require('ember-cli-blueprint-test-helpers/chai').file; + +function fixture(directory, filePath) { + return file(path.join(directory, '../fixtures', filePath)); +} + const emberNew = blueprintHelpers.emberNew; const emberGenerateDestroy = blueprintHelpers.emberGenerateDestroy; const modifyPackages = blueprintHelpers.modifyPackages; const expect = chai.expect; -const enableOctane = setupTestEnvironment.enableOctane; -const enableClassic = setupTestEnvironment.enableClassic; +const { setEdition, clearEdition } = require('@ember/edition-utils'); + +function enableOctane(hooks) { + hooks.beforeEach(function () { + setEdition('octane'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + +function enableClassic(hooks) { + hooks.beforeEach(function () { + setEdition('classic'); + }); + + hooks.afterEach(function () { + clearEdition(); + }); +} + +function setupTestHooks(context) { + // context.timeout = function () {}; + blueprintHelpers.setupTestHooks(context); +} describe('Acceptance: generate and destroy transform blueprints', function () { setupTestHooks(this); describe('classic', function () { - enableClassic(); + enableClassic({ beforeEach, afterEach }); describe('in app', function () { beforeEach(async function () { @@ -35,7 +63,7 @@ describe('Acceptance: generate and destroy transform blueprints', function () { .to.contain('deserialize(serialized) {') .to.contain('serialize(deserialized) {'); - expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/rfc232.js')); + expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/default.js')); }); }); @@ -43,26 +71,7 @@ describe('Acceptance: generate and destroy transform blueprints', function () { const args = ['transform-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/rfc232.js')); - }); - }); - - describe('transform-test with ember-cli-qunit@4.1.0', function () { - beforeEach(async function () { - await modifyPackages([{ name: '@ember-data/serializer', dev: true }]); - modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('transform-test-test foo', function () { - return emberGenerateDestroy(['transform-test', 'foo'], (_file) => { - expect(_file('tests/unit/transforms/foo-test.js')).to.equal( - fixture(__dirname, 'transform-test/default.js') - ); - }); + expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/default.js')); }); }); }); @@ -70,7 +79,7 @@ describe('Acceptance: generate and destroy transform blueprints', function () { describe('octane', function () { describe('in app', function () { - enableOctane(); + enableOctane({ beforeEach, afterEach }); beforeEach(async function () { await emberNew(); @@ -86,7 +95,7 @@ describe('Acceptance: generate and destroy transform blueprints', function () { .to.contain('deserialize(serialized) {') .to.contain('serialize(deserialized) {'); - expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/rfc232.js')); + expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/default.js')); }); }); @@ -94,26 +103,7 @@ describe('Acceptance: generate and destroy transform blueprints', function () { const args = ['transform-test', 'foo']; return emberGenerateDestroy(args, (_file) => { - expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/rfc232.js')); - }); - }); - - describe('transform-test with ember-cli-qunit@4.1.0', function () { - beforeEach(async function () { - await modifyPackages([{ name: '@ember-data/serializer', dev: true }]); - modifyPackages([ - { name: 'ember-qunit', delete: true }, - { name: 'ember-cli-qunit', delete: true }, - ]); - generateFakePackageManifest('ember-cli-qunit', '4.1.0'); - }); - - it('transform-test-test foo', function () { - return emberGenerateDestroy(['transform-test', 'foo'], (_file) => { - expect(_file('tests/unit/transforms/foo-test.js')).to.equal( - fixture(__dirname, 'transform-test/default.js') - ); - }); + expect(_file('tests/unit/transforms/foo-test.js')).to.equal(fixture(__dirname, 'transform-test/default.js')); }); }); }); @@ -129,7 +119,7 @@ describe('Acceptance: generate and destroy transform blueprints', function () { it('transform-test foo', function () { return emberGenerateDestroy(['transform-test', 'foo'], (_file) => { expect(_file('tests/unit/transforms/foo-test.js')).to.equal( - fixture(__dirname, 'transform-test/rfc232-addon.js') + fixture(__dirname, 'transform-test/addon-default.js') ); }); }); diff --git a/tests/builders/.eslintrc.cjs b/tests/builders/.eslintrc.cjs deleted file mode 100644 index b8f1386c9b7..00000000000 --- a/tests/builders/.eslintrc.cjs +++ /dev/null @@ -1,36 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const diagnostic = require('@warp-drive/internal-config/eslint/diagnostic.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - diagnostic.config(), - diagnostic.defaults({ - files: ['tests/**/*.{js,ts}'], - }), - ], -}; diff --git a/tests/builders/app/services/store.ts b/tests/builders/app/services/store.ts index b88bb03b733..8d1250cbd70 100644 --- a/tests/builders/app/services/store.ts +++ b/tests/builders/app/services/store.ts @@ -5,8 +5,7 @@ import { buildSchema, modelFor } from '@ember-data/model/hooks'; import RequestManager from '@ember-data/request'; import Fetch from '@ember-data/request/fetch'; import DataStore, { CacheHandler } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { TypeFromInstance } from '@warp-drive/core-types/record'; diff --git a/tests/builders/ember-cli-build.js b/tests/builders/ember-cli-build.js index 35799698982..4b20eb3c50e 100644 --- a/tests/builders/ember-cli-build.js +++ b/tests/builders/ember-cli-build.js @@ -2,38 +2,36 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null; +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - emberData: { - compatWith, - }, - tests: true, babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith, - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, + // autoImport: { + // forbidEval: true, + // webpack: { + // devtool: 'source-map', + // optimization: { + // minimize: false, + // moduleIds: 'named', + // }, + // }, + // }, + }); + + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, }); - /* - This build file specifies the options for the dummy test app of this - addon, located in `/tests/dummy` - This build file does *not* influence how the addon or the app using it - behave. You most likely want to be modifying `./index.js` or app's build file - */ app.import('node_modules/@warp-drive/diagnostic/dist/styles/dom-reporter.css'); return app.toTree(); diff --git a/tests/builders/eslint.config.mjs b/tests/builders/eslint.config.mjs new file mode 100644 index 00000000000..6e22b01f43f --- /dev/null +++ b/tests/builders/eslint.config.mjs @@ -0,0 +1,26 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as diagnostic from '@warp-drive/internal-config/eslint/diagnostic.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // browser (test) ================ + diagnostic.browser(), +]; diff --git a/tests/builders/package.json b/tests/builders/package.json index a9e89625ecf..07f7df192ff 100644 --- a/tests/builders/package.json +++ b/tests/builders/package.json @@ -17,11 +17,11 @@ "scripts": { "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", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "test": "bun ./diagnostic.js", "test:production": "bun ./diagnostic.js", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/json-api": { @@ -48,9 +48,6 @@ "@ember-data/active-record": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/unpublished-test-infra": { "injected": true }, @@ -60,6 +57,9 @@ "@warp-drive/core-types": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@ember-data/graph": { "injected": true }, @@ -85,7 +85,6 @@ "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", "@ember-data/model": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/rest": "workspace:5.4.0-alpha.64", @@ -96,12 +95,14 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/addon-shim": "^1.8.7", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-auto-import": "^2.7.2", "ember-cli": "~5.7.0", "ember-cli-babel": "^8.2.0", @@ -126,7 +127,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/builders/tests/integration/create-record-test.ts b/tests/builders/tests/integration/create-record-test.ts index ee2f5ea19b2..6381b66acc5 100644 --- a/tests/builders/tests/integration/create-record-test.ts +++ b/tests/builders/tests/integration/create-record-test.ts @@ -4,18 +4,16 @@ import JSONAPICache from '@ember-data/json-api'; import { createRecord } from '@ember-data/json-api/request'; import Model, { attr, instantiateRecord, teardownRecord } from '@ember-data/model'; import { buildSchema, modelFor } from '@ember-data/model/hooks'; -import type { RequestContext, StructuredDataDocument } from '@ember-data/request'; +import type { Future, Handler, RequestContext, StructuredDataDocument } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Future, Handler } from '@ember-data/request/-private/types'; import { setBuildURLConfig } from '@ember-data/request-utils'; import DataStore, { CacheHandler, recordIdentifierFor } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -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 { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { SingleResourceDataDocument } from '@warp-drive/core-types/spec/document'; -import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -80,7 +78,7 @@ module('Integration - createRecord', function (hooks) { assert.step(`didCommit ${committedIdentifier.lid}`); return super.didCommit(committedIdentifier, result); } - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void { assert.step(`commitWasRejected ${identifier.lid}`); return super.commitWasRejected(identifier, errors); } @@ -161,7 +159,7 @@ module('Integration - createRecord', function (hooks) { assert.step(`didCommit ${committedIdentifier.lid}`); return super.didCommit(committedIdentifier, result); } - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void { assert.step(`commitWasRejected ${identifier.lid}`); return super.commitWasRejected(identifier, errors); } @@ -203,9 +201,9 @@ module('Integration - createRecord', function (hooks) { assert.true(user.hasDirtyAttributes, 'The user is dirty'); const validationError: Error & { - content: { errors: JsonApiError[] }; + content: { errors: ApiError[] }; } = new Error('Something went wrong') as Error & { - content: { errors: JsonApiError[] }; + content: { errors: ApiError[] }; }; validationError.content = { errors: [ @@ -231,7 +229,7 @@ module('Integration - createRecord', function (hooks) { assert.true(e instanceof Error, 'The error is an error'); assert.equal((e as Error).message, 'Something went wrong', 'The error has the expected error message'); assert.true( - Array.isArray((e as { content: { errors: JsonApiError[] } })?.content?.errors), + Array.isArray((e as { content: { errors: ApiError[] } })?.content?.errors), 'The error has an errors array' ); } diff --git a/tests/builders/tests/integration/delete-record-test.ts b/tests/builders/tests/integration/delete-record-test.ts index 0cd8084fe65..ed763163585 100644 --- a/tests/builders/tests/integration/delete-record-test.ts +++ b/tests/builders/tests/integration/delete-record-test.ts @@ -4,18 +4,16 @@ import JSONAPICache from '@ember-data/json-api'; import { deleteRecord } from '@ember-data/json-api/request'; import Model, { attr, instantiateRecord, teardownRecord } from '@ember-data/model'; import { buildSchema, modelFor } from '@ember-data/model/hooks'; -import type { RequestContext, StructuredDataDocument } from '@ember-data/request'; +import type { Future, Handler, RequestContext, StructuredDataDocument } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Future, Handler } from '@ember-data/request/-private/types'; import { setBuildURLConfig } from '@ember-data/request-utils'; import DataStore, { CacheHandler, recordIdentifierFor } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -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 { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { SingleResourceDataDocument } from '@warp-drive/core-types/spec/document'; -import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -80,7 +78,7 @@ module('Integration - deleteRecord', function (hooks) { assert.step(`didCommit ${committedIdentifier.lid}`); return super.didCommit(committedIdentifier, result); } - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void { assert.step(`commitWasRejected ${identifier.lid}`); return super.commitWasRejected(identifier, errors); } @@ -177,7 +175,7 @@ module('Integration - deleteRecord', function (hooks) { assert.step(`didCommit ${committedIdentifier.lid}`); return super.didCommit(committedIdentifier, result); } - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void { assert.step(`commitWasRejected ${identifier.lid}`); return super.commitWasRejected(identifier, errors); } @@ -240,9 +238,9 @@ module('Integration - deleteRecord', function (hooks) { assert.equal(user.dirtyType, 'deleted', 'The user is dirty with the correct type'); const validationError: Error & { - content: { errors: JsonApiError[] }; + content: { errors: ApiError[] }; } = new Error('405 | Not Authorized') as Error & { - content: { errors: JsonApiError[] }; + content: { errors: ApiError[] }; }; validationError.content = { errors: [ @@ -268,7 +266,7 @@ module('Integration - deleteRecord', function (hooks) { assert.true(e instanceof Error, 'The error is an error'); assert.equal((e as Error).message, '405 | Not Authorized', 'The error has the expected error message'); assert.true( - Array.isArray((e as { content: { errors: JsonApiError[] } })?.content?.errors), + Array.isArray((e as { content: { errors: ApiError[] } })?.content?.errors), 'The error has an errors array' ); } diff --git a/tests/builders/tests/integration/update-record-test.ts b/tests/builders/tests/integration/update-record-test.ts index bed7ada0af5..85ca8cf3ce5 100644 --- a/tests/builders/tests/integration/update-record-test.ts +++ b/tests/builders/tests/integration/update-record-test.ts @@ -4,18 +4,16 @@ import JSONAPICache from '@ember-data/json-api'; import { updateRecord } from '@ember-data/json-api/request'; import Model, { attr, instantiateRecord, teardownRecord } from '@ember-data/model'; import { buildSchema, modelFor } from '@ember-data/model/hooks'; -import type { RequestContext, StructuredDataDocument } from '@ember-data/request'; +import type { Future, Handler, RequestContext, StructuredDataDocument } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Future, Handler } from '@ember-data/request/-private/types'; import { setBuildURLConfig } from '@ember-data/request-utils'; import DataStore, { CacheHandler, recordIdentifierFor } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -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 { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { StableRecordIdentifier } from '@warp-drive/core-types/identifier'; import type { SingleResourceDataDocument } from '@warp-drive/core-types/spec/document'; -import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -80,7 +78,7 @@ module('Integration - updateRecord', function (hooks) { assert.step(`didCommit ${committedIdentifier.lid}`); return super.didCommit(committedIdentifier, result); } - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void { assert.step(`commitWasRejected ${identifier.lid}`); return super.commitWasRejected(identifier, errors); } @@ -162,7 +160,7 @@ module('Integration - updateRecord', function (hooks) { assert.step(`didCommit ${committedIdentifier.lid}`); return super.didCommit(committedIdentifier, result); } - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]): void { assert.step(`commitWasRejected ${identifier.lid}`); return super.commitWasRejected(identifier, errors); } @@ -204,9 +202,9 @@ module('Integration - updateRecord', function (hooks) { assert.false(user.hasDirtyAttributes, 'The user is not dirty'); const validationError: Error & { - content: { errors: JsonApiError[] }; + content: { errors: ApiError[] }; } = new Error('Something went wrong') as Error & { - content: { errors: JsonApiError[] }; + content: { errors: ApiError[] }; }; validationError.content = { errors: [ @@ -235,7 +233,7 @@ module('Integration - updateRecord', function (hooks) { assert.true(e instanceof Error, 'The error is an error'); assert.equal((e as Error).message, 'Something went wrong', 'The error has the expected error message'); assert.true( - Array.isArray((e as { content: { errors: JsonApiError[] } })?.content?.errors), + Array.isArray((e as { content: { errors: ApiError[] } })?.content?.errors), 'The error has an errors array' ); } diff --git a/tests/builders/tests/unit/parse-cache-control-test.ts b/tests/builders/tests/unit/parse-cache-control-test.ts index 0f3f5381ecb..43e06cbe796 100644 --- a/tests/builders/tests/unit/parse-cache-control-test.ts +++ b/tests/builders/tests/unit/parse-cache-control-test.ts @@ -56,13 +56,13 @@ module('parseCacheControl', function (hooks) { await assert.expectAssertion(() => { const header = 'max-age=,'; parseCacheControl(header); - }, /Assertion Failed: Invalid Cache-Control value, expected a value after "=" but got ","/); + }, /Invalid Cache-Control value, expected a value after "=" but got ","/); }); debug('throws when Cache-Control has invalid value type', async function (assert) { await assert.expectAssertion(() => { const header = 'max-age="3600"'; parseCacheControl(header); - }, /Assertion Failed: Invalid Cache-Control value, expected a number but got - "3600"/); + }, /Invalid Cache-Control value, expected a number but got - "3600"/); }); }); diff --git a/tests/builders/tsconfig.json b/tests/builders/tsconfig.json index 0799fad34af..e0e1d8e71a7 100644 --- a/tests/builders/tsconfig.json +++ b/tests/builders/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*", "../../@types/ember-data-qunit-asserts"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,24 +7,98 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/active-record": ["../../packages/active-record/unstable-preview-types"], + "@ember-data/active-record/*": ["../../packages/active-record/unstable-preview-types/*"], + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/rest": ["../../packages/rest/unstable-preview-types"], + "@ember-data/rest/*": ["../../packages/rest/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../../packages/diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../../packages/diagnostic/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/active-record" + }, + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/rest" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/diagnostic" + }, + { + "path": "../../packages/build-config" + } + ] } diff --git a/tests/codemods/.eslintrc.cjs b/tests/codemods/.eslintrc.cjs deleted file mode 100644 index d9864d86800..00000000000 --- a/tests/codemods/.eslintrc.cjs +++ /dev/null @@ -1,20 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.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(), {}), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [node.config(), node.defaults(), typescript.defaults()], -}; diff --git a/tests/codemods/eslint.config.mjs b/tests/codemods/eslint.config.mjs new file mode 100644 index 00000000000..a7810b1e1fb --- /dev/null +++ b/tests/codemods/eslint.config.mjs @@ -0,0 +1,19 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // node (ts) ================ + typescript.node({ + srcDirs: ['tests'], + allowedImports: [], + }), + + // node (module) ================ + node.esm(), +]; diff --git a/tests/codemods/package.json b/tests/codemods/package.json index bac7e97b618..7c638db3ede 100644 --- a/tests/codemods/package.json +++ b/tests/codemods/package.json @@ -1,7 +1,7 @@ { "name": "codemods-tests", "private": true, - "version": "5.4.0-alpha.62", + "version": "5.4.0-alpha.64", "description": "Codemods for EmberData paradigms", "keywords": [], "repository": { @@ -14,8 +14,8 @@ }, "type": "module", "scripts": { - "check:types": "tsc --noEmit", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "check:types": "", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "test": "tsx --test tests/index.spec.ts", "fixme": "tsx --test tests/index.spec.ts", "_syncPnpm": "bun run sync-dependencies-meta-injected" @@ -47,5 +47,10 @@ "volta": { "extends": "../../package.json" }, - "packageManager": "pnpm@8.15.6" + "packageManager": "pnpm@8.15.6", + "dependenciesMeta": { + "@ember-data/codemods": { + "injected": true + } + } } diff --git a/tests/codemods/tsconfig.json b/tests/codemods/tsconfig.json index 0975ae1ff6b..7621da133f7 100644 --- a/tests/codemods/tsconfig.json +++ b/tests/codemods/tsconfig.json @@ -10,6 +10,7 @@ "moduleResolution": "NodeNext", "moduleDetection": "force", "strict": true, + "pretty": true, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, diff --git a/tests/docs/.eslintrc.cjs b/tests/docs/.eslintrc.cjs deleted file mode 100644 index d46717879cc..00000000000 --- a/tests/docs/.eslintrc.cjs +++ /dev/null @@ -1,36 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.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: [], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults({ - files: ['**/*.{js,ts}'], - }), - qunit.defaults({ - files: ['index.{js,ts}'], - }), - ], -}; diff --git a/tests/docs/eslint.config.mjs b/tests/docs/eslint.config.mjs new file mode 100644 index 00000000000..060710f4537 --- /dev/null +++ b/tests/docs/eslint.config.mjs @@ -0,0 +1,23 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs({ + files: ['fixtures/**/*.{js,ts}'], + }), + + // Test Support ================ + qunit.node({ + files: ['index.{js,ts}'], + }), +]; diff --git a/tests/docs/fixtures/expected.js b/tests/docs/fixtures/expected.js index 89f906e2f65..2b9e7c421c8 100644 --- a/tests/docs/fixtures/expected.js +++ b/tests/docs/fixtures/expected.js @@ -25,6 +25,7 @@ module.exports = { '@ember-data/store', '@ember-data/tracking', '@warp-drive/build-config/canary-features', + '@warp-drive/build-config/debugging', '@warp-drive/build-config/deprecations', 'ember-data-overview', ], @@ -187,15 +188,15 @@ module.exports = { '(public) @ember-data/adapter/rest RESTAdapter#sortQueryParams', '(public) @ember-data/adapter/rest RESTAdapter#updateRecord', '(public) @ember-data/adapter/rest RESTAdapter#useFetch', - '(public) @ember-data/debug DebugLogging#LOG_GRAPH', - '(public) @ember-data/debug DebugLogging#LOG_IDENTIFIERS', - '(public) @ember-data/debug DebugLogging#LOG_INSTANCE_CACHE', - '(public) @ember-data/debug DebugLogging#LOG_MUTATIONS', - '(public) @ember-data/debug DebugLogging#LOG_NOTIFICATIONS', - '(public) @ember-data/debug DebugLogging#LOG_OPERATIONS', - '(public) @ember-data/debug DebugLogging#LOG_PAYLOADS', - '(public) @ember-data/debug DebugLogging#LOG_REQUESTS', - '(public) @ember-data/debug DebugLogging#LOG_REQUEST_STATUS', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_GRAPH', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_IDENTIFIERS', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_INSTANCE_CACHE', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_MUTATIONS', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_NOTIFICATIONS', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_OPERATIONS', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_PAYLOADS', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_REQUESTS', + '(public) @warp-drive/build-config/debugging DebugLogging#LOG_REQUEST_STATUS', '(public) @ember-data/experimental-preview-types Adapter#coalesceFindRequests [OPTIONAL]', '(public) @ember-data/experimental-preview-types Adapter#createRecord', '(public) @ember-data/experimental-preview-types Adapter#deleteRecord', diff --git a/tests/docs/package.json b/tests/docs/package.json index e82431c8929..f45688ec954 100644 --- a/tests/docs/package.json +++ b/tests/docs/package.json @@ -12,8 +12,8 @@ "author": "", "scripts": { "test:docs": "qunit ./index.js", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "devDependencies": { "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", @@ -21,7 +21,7 @@ "qunit": "^2.20.1" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/ember-data__adapter/.eslintrc.cjs b/tests/ember-data__adapter/.eslintrc.cjs deleted file mode 100644 index 3074b042bde..00000000000 --- a/tests/ember-data__adapter/.eslintrc.cjs +++ /dev/null @@ -1,37 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const diagnostic = require('@warp-drive/internal-config/eslint/diagnostic.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - diagnostic.config(), - diagnostic.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: ['@ember/object'], - }), - ], -}; diff --git a/tests/ember-data__adapter/app/services/store.ts b/tests/ember-data__adapter/app/services/store.ts index aa33446693d..a6b0de4bebc 100644 --- a/tests/ember-data__adapter/app/services/store.ts +++ b/tests/ember-data__adapter/app/services/store.ts @@ -13,8 +13,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 { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { TypeFromInstance } from '@warp-drive/core-types/record'; diff --git a/tests/ember-data__adapter/ember-cli-build.js b/tests/ember-data__adapter/ember-cli-build.js index 7b5bae0a3e3..436ede741f6 100644 --- a/tests/ember-data__adapter/ember-cli-build.js +++ b/tests/ember-data__adapter/ember-cli-build.js @@ -1,30 +1,27 @@ -/* eslint n/no-unpublished-require: 'off' */ - 'use strict'; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - tests: true, + babel: { + // this ensures that the same build-time code stripping that is done + // for library packages is also done for our tests and dummy app + plugins: [...macros()], + }, 'ember-cli-babel': { throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, }); - // Use `app.import` to add additional libraries to the generated - // output files. - // - // If you need to use different assets in different - // environments, specify an object as the first parameter. That - // object's keys should be the environment name and the values - // should be the asset to use in that environment. - // - // If the library that you are including contains AMD or ES6 - // modules that you would like to import into your application - // please specify an object with the list of modules as keys - // along with the exports of each module as its value. + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); + app.import('node_modules/@warp-drive/diagnostic/dist/styles/dom-reporter.css'); return app.toTree(); diff --git a/tests/ember-data__adapter/eslint.config.mjs b/tests/ember-data__adapter/eslint.config.mjs new file mode 100644 index 00000000000..5f9f29b44b5 --- /dev/null +++ b/tests/ember-data__adapter/eslint.config.mjs @@ -0,0 +1,36 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; +import * as diagnostic from '@warp-drive/internal-config/eslint/diagnostic.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + js.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // browser (js/ts) ================ + typescript.browser({ + files: ['**/*.ts'], + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + diagnostic.browser({ + allowedImports: ['@ember/object'], + }), +]; diff --git a/tests/ember-data__adapter/package.json b/tests/ember-data__adapter/package.json index 1620a7f7b34..3de48c63dff 100644 --- a/tests/ember-data__adapter/package.json +++ b/tests/ember-data__adapter/package.json @@ -17,11 +17,11 @@ "scripts": { "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", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "test": "bun ./diagnostic.js", "_test:production": "bun ./diagnostic.js", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/debug": { @@ -63,11 +63,17 @@ "@warp-drive/core-types": { "injected": true }, + "@warp-rive/build-config": { + "injected": true + }, "@ember/string": { "injected": true }, "ember-inflector": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "dependencies": { @@ -87,10 +93,12 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/addon-shim": "^1.8.7", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", "ember-auto-import": "^2.7.2", @@ -111,7 +119,7 @@ "webpack": "^5.91.0" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember": { "edition": "octane" diff --git a/tests/ember-data__adapter/tests/integration/belongs-to-test.js b/tests/ember-data__adapter/tests/integration/belongs-to-test.js index 2f13a157378..ae734152b0d 100644 --- a/tests/ember-data__adapter/tests/integration/belongs-to-test.js +++ b/tests/ember-data__adapter/tests/integration/belongs-to-test.js @@ -3,7 +3,6 @@ import EmberObject from '@ember/object'; import Store from 'ember-data__adapter/services/store'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -56,7 +55,7 @@ class MinimalSerializer extends EmberObject { // minimal implementation, not json-api compliant serializeHasMany(snapshot, json, relationship) { - const key = relationship.key; + const key = relationship.name; const hasMany = snapshot.hasMany(key); if (hasMany && hasMany.length) { @@ -144,7 +143,7 @@ module('integration/belongs-to - Belongs To Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindBelongsToAdapter extends EmberObject { findRecord() { @@ -158,7 +157,7 @@ module('integration/belongs-to - Belongs To Tests', function (hooks) { const expectedURL = initialRecord.data.relationships.post.links.related; assert.equal(url, expectedURL, 'url is passed to findBelongsTo'); - assert.equal(relationship.key, 'post', 'relationship is passed to findBelongsTo'); + assert.equal(relationship.name, 'post', 'relationship is passed to findBelongsTo'); assert.equal(snapshot.modelName, 'comment', 'snapshot is passed to findBelongsTo with correct modelName'); assert.equal(snapshot.id, '3', 'snapshot is passed to findBelongsTo with correct id'); @@ -261,7 +260,7 @@ module('integration/belongs-to - Belongs To Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindRecordAdapter extends EmberObject { findRecord(passedStore, type, id, snapshot) { @@ -340,7 +339,7 @@ module('integration/belongs-to - Belongs To Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindRecordAdapter extends EmberObject { findRecord(passedStore, type, id, snapshot) { @@ -418,7 +417,7 @@ module('integration/belongs-to - Belongs To Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindBelongsToAdapter extends EmberObject { findRecord() { @@ -499,7 +498,7 @@ module('integration/belongs-to - Belongs To Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindRecordAdapter extends EmberObject { findRecord(passedStore, type, id, snapshot) { diff --git a/tests/ember-data__adapter/tests/integration/coalescing-test.js b/tests/ember-data__adapter/tests/integration/coalescing-test.js index 0f470c6d275..7577468a145 100644 --- a/tests/ember-data__adapter/tests/integration/coalescing-test.js +++ b/tests/ember-data__adapter/tests/integration/coalescing-test.js @@ -4,7 +4,6 @@ import Store from 'ember-data__adapter/services/store'; import Model, { attr } from '@ember-data/model'; import { recordIdentifierFor } from '@ember-data/store'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -73,7 +72,7 @@ module('integration/coalescing - Coalescing Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultsCopy = deepCopy(expectedResults); + const expectedResultsCopy = structuredClone(expectedResults); class TestFindRecordAdapter extends EmberObject { coalesceFindRequests = true; @@ -135,7 +134,7 @@ module('integration/coalescing - Coalescing Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultsCopy = deepCopy(expectedResults); + const expectedResultsCopy = structuredClone(expectedResults); class TestFindRecordAdapter extends EmberObject { coalesceFindRequests = true; @@ -416,7 +415,7 @@ module('integration/coalescing - Coalescing Tests', function (hooks) { const { owner } = this; const store = owner.lookup('service:store'); - const expectedResultsCopy = deepCopy(expectedResults); + const expectedResultsCopy = structuredClone(expectedResults); class TestFindRecordAdapter extends EmberObject { coalesceFindRequests = true; @@ -490,7 +489,7 @@ module('integration/coalescing - Coalescing Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultsCopy = deepCopy(expectedResults); + const expectedResultsCopy = structuredClone(expectedResults); class TestFindRecordAdapter extends EmberObject { coalesceFindRequests = false; diff --git a/tests/ember-data__adapter/tests/integration/has-many-test.js b/tests/ember-data__adapter/tests/integration/has-many-test.js index 896d2715df2..229503cec81 100644 --- a/tests/ember-data__adapter/tests/integration/has-many-test.js +++ b/tests/ember-data__adapter/tests/integration/has-many-test.js @@ -3,7 +3,6 @@ import EmberObject from '@ember/object'; import Store from 'ember-data__adapter/services/store'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -40,7 +39,7 @@ class MinimalSerializer extends EmberObject { // minimal implementation, not json-api compliant serializeBelongsTo(snapshot, json, relationship) { - const key = relationship.key; + const key = relationship.name; const belongsTo = snapshot.belongsTo(key); if (belongsTo) { @@ -56,7 +55,7 @@ class MinimalSerializer extends EmberObject { // minimal implementation, not json-api compliant serializeHasMany(snapshot, json, relationship) { - const key = relationship.key; + const key = relationship.name; const hasMany = snapshot.hasMany(key); if (hasMany && hasMany.length) { @@ -160,7 +159,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindHasManyAdapter extends EmberObject { findRecord() { @@ -269,7 +268,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindRecordAdapter extends EmberObject { coalesceFindRequests = false; @@ -345,7 +344,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindRecordAdapter extends EmberObject { coalesceFindRequests = false; @@ -417,7 +416,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindManyAdapter extends EmberObject { coalesceFindRequests = true; @@ -500,7 +499,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindManyAdapter extends EmberObject { coalesceFindRequests = true; @@ -582,7 +581,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindHasManyAdapter extends EmberObject { findRecord() { @@ -661,7 +660,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindManyAdapter extends EmberObject { coalesceFindRequests = true; @@ -739,7 +738,7 @@ module('integration/has-many - Has Many Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindRecordAdapter extends EmberObject { coalesceFindRequests = false; diff --git a/tests/ember-data__adapter/tests/integration/queries-test.js b/tests/ember-data__adapter/tests/integration/queries-test.js index 021d5b6588d..5f13df715a0 100644 --- a/tests/ember-data__adapter/tests/integration/queries-test.js +++ b/tests/ember-data__adapter/tests/integration/queries-test.js @@ -3,7 +3,6 @@ import EmberObject from '@ember/object'; import Store from 'ember-data__adapter/services/store'; import Model, { attr } from '@ember-data/model'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -110,7 +109,7 @@ module('integration/queries - Queries Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); class TestFindRecordAdapter extends EmberObject { findRecord(passedStore, type, id, snapshot) { @@ -161,7 +160,7 @@ module('integration/queries - Queries Tests', function (hooks) { // This code is a workaround for issue https://github.com/emberjs/data/issues/6758 // expectedResult is mutated during store.findRecord // to add the lid - const expectedResultCopy = deepCopy(expectedResult); + const expectedResultCopy = structuredClone(expectedResult); const { owner } = this; const store = owner.lookup('service:store'); diff --git a/tests/ember-data__adapter/tests/test-helper.js b/tests/ember-data__adapter/tests/test-helper.js index 7589fecb246..8d90206e905 100644 --- a/tests/ember-data__adapter/tests/test-helper.js +++ b/tests/ember-data__adapter/tests/test-helper.js @@ -1,6 +1,6 @@ import { setApplication } from '@ember/test-helpers'; -import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts'; +import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts/index'; import { setupGlobalHooks } from '@warp-drive/diagnostic'; import { configure } from '@warp-drive/diagnostic/ember'; import { start } from '@warp-drive/diagnostic/runners/dom'; diff --git a/tests/ember-data__adapter/tsconfig.json b/tests/ember-data__adapter/tsconfig.json index e39fd4da358..527a59ee167 100644 --- a/tests/ember-data__adapter/tsconfig.json +++ b/tests/ember-data__adapter/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,24 +7,93 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/serializer": ["../../packages/serializer/unstable-preview-types"], + "@ember-data/serializer/*": ["../../packages/serializer/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../../packages/diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../../packages/diagnostic/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/serializer" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/build-config" + }, + { + "path": "../../packages/diagnostic" + } + ] } diff --git a/tests/ember-data__graph/.eslintrc.cjs b/tests/ember-data__graph/.eslintrc.cjs deleted file mode 100644 index b8f1386c9b7..00000000000 --- a/tests/ember-data__graph/.eslintrc.cjs +++ /dev/null @@ -1,36 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const diagnostic = require('@warp-drive/internal-config/eslint/diagnostic.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - diagnostic.config(), - diagnostic.defaults({ - files: ['tests/**/*.{js,ts}'], - }), - ], -}; diff --git a/tests/ember-data__graph/app/config/environment.d.ts b/tests/ember-data__graph/app/config/environment.d.ts index f989849605d..5d685ce5f0a 100644 --- a/tests/ember-data__graph/app/config/environment.d.ts +++ b/tests/ember-data__graph/app/config/environment.d.ts @@ -13,4 +13,5 @@ declare const config: { podModulePrefix: string; locationType: string; rootURL: string; + APP: object; }; diff --git a/tests/ember-data__graph/app/services/store.ts b/tests/ember-data__graph/app/services/store.ts index aa33446693d..a6b0de4bebc 100644 --- a/tests/ember-data__graph/app/services/store.ts +++ b/tests/ember-data__graph/app/services/store.ts @@ -13,8 +13,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 { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { TypeFromInstance } from '@warp-drive/core-types/record'; diff --git a/tests/ember-data__graph/ember-cli-build.js b/tests/ember-data__graph/ember-cli-build.js index 90beb108c7d..436ede741f6 100644 --- a/tests/ember-data__graph/ember-cli-build.js +++ b/tests/ember-data__graph/ember-cli-build.js @@ -2,67 +2,27 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null; - const isProd = process.env.EMBER_ENV === 'production'; - - const config = { - compatWith, - includeDataAdapterInProduction: true, - includeDataAdapter: true, - debug: { - LOG_PAYLOADS: process.env.DEBUG_DATA ? true : false, - LOG_OPERATIONS: process.env.DEBUG_DATA ? true : false, - LOG_MUTATIONS: process.env.DEBUG_DATA ? true : false, - LOG_NOTIFICATIONS: process.env.DEBUG_DATA ? true : false, - LOG_REQUESTS: process.env.DEBUG_DATA ? true : false, - LOG_REQUEST_STATUS: process.env.DEBUG_DATA ? true : false, - LOG_IDENTIFIERS: process.env.DEBUG_DATA ? true : false, - LOG_GRAPH: process.env.DEBUG_DATA ? true : false, - LOG_INSTANCE_CACHE: process.env.DEBUG_DATA ? true : false, - }, - deprecations: require('@ember-data/private-build-infra/src/deprecations')(compatWith || null), - features: require('@ember-data/private-build-infra/src/features')(isProd), - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }; +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); const app = new EmberApp(defaults, { - emberData: Object.assign({}, config), - tests: true, babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [...require('@ember-data/private-build-infra/src/debug-macros')(config)], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, - '@embroider/macros': { - // setConfig: { - // '@ember-data/store': { - // polyfillUUID: true, - // }, - // }, - setOwnConfig: config, - }, + }); + + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, }); app.import('node_modules/@warp-drive/diagnostic/dist/styles/dom-reporter.css'); return app.toTree(); - // const { Webpack } = require('@embroider/webpack'); - - // return require('@embroider/compat').compatBuild(app, Webpack, { - // // staticAddonTestSupportTrees: true, - // // staticAddonTrees: true, - // // staticHelpers: true, - // // staticModifiers: true, - // // staticComponents: true, - // // staticEmberSource: true, - // // splitAtRoutes: ['route.name'], // can also be a RegExp - // //packagerOptions: { - // // webpackConfig: { } - // // } - // }); }; diff --git a/tests/ember-data__graph/eslint.config.mjs b/tests/ember-data__graph/eslint.config.mjs new file mode 100644 index 00000000000..9b1fba199bb --- /dev/null +++ b/tests/ember-data__graph/eslint.config.mjs @@ -0,0 +1,26 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as diagnostic from '@warp-drive/internal-config/eslint/diagnostic.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + diagnostic.browser(), +]; diff --git a/tests/ember-data__graph/package.json b/tests/ember-data__graph/package.json index 6a438b10b1c..f7f3230d750 100644 --- a/tests/ember-data__graph/package.json +++ b/tests/ember-data__graph/package.json @@ -17,11 +17,11 @@ "scripts": { "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", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "test": "bun ./diagnostic.js", "test:production": "bun ./diagnostic.js", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/diagnostic": { @@ -45,9 +45,6 @@ "@ember-data/request-utils": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/store": { "injected": true }, @@ -57,6 +54,9 @@ "@ember-data/unpublished-test-infra": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@warp-drive/core-types": { "injected": true }, @@ -78,7 +78,6 @@ "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", "@ember-data/model": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", @@ -88,10 +87,12 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/addon-shim": "^1.8.7", "@embroider/macros": "^1.15.1", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", @@ -119,7 +120,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/ember-data__graph/tests/integration/graph/duplicate-data-test.ts b/tests/ember-data__graph/tests/integration/graph/duplicate-data-test.ts index 516f79ba16d..cbe21bbe895 100644 --- a/tests/ember-data__graph/tests/integration/graph/duplicate-data-test.ts +++ b/tests/ember-data__graph/tests/integration/graph/duplicate-data-test.ts @@ -1,10 +1,9 @@ -/* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ import { graphFor } from '@ember-data/graph/-private'; import Model, { attr, hasMany } from '@ember-data/model'; import type Store from '@ember-data/store'; -import { test } from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; import { DEPRECATE_NON_UNIQUE_PAYLOADS } from '@warp-drive/build-config/deprecations'; -import { module } from '@warp-drive/diagnostic'; +import { DEBUG } from '@warp-drive/build-config/env'; +import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; import { deprecatedTest } from '../../setup-test'; @@ -133,98 +132,100 @@ module('Integration | Graph | Duplicate Data', function (hooks) { ); if (!DEPRECATE_NON_UNIQUE_PAYLOADS) { - test('updateRelationship operation asserts on duplicates in remote payloads', function (assert) { - const { owner } = this; - - class App extends Model { - @attr declare name: string; - @hasMany('config', { async: false, inverse: null }) declare configs: Config[]; - } - - class Config extends Model { - @attr declare name: string; - } - - owner.register('model:app', App); - owner.register('model:config', Config); - const store = owner.lookup('service:store') as unknown as Store; - const graph = graphFor(store); - const appIdentifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'app', id: '1' }); - - try { - store._join(() => { - graph.push({ - op: 'updateRelationship', - field: 'configs', - record: appIdentifier, - value: { - data: [ - { type: 'config', id: '1' }, - { type: 'config', id: '1' }, - { type: 'config', id: '1' }, - { type: 'config', id: '2' }, - { type: 'config', id: '3' }, - { type: 'config', id: '4' }, - ], - }, + if (DEBUG) { + test('updateRelationship operation asserts on duplicates in remote payloads', function (assert) { + const { owner } = this; + + class App extends Model { + @attr declare name: string; + @hasMany('config', { async: false, inverse: null }) declare configs: Config[]; + } + + class Config extends Model { + @attr declare name: string; + } + + owner.register('model:app', App); + owner.register('model:config', Config); + const store = owner.lookup('service:store') as unknown as Store; + const graph = graphFor(store); + const appIdentifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'app', id: '1' }); + + try { + store._join(() => { + graph.push({ + op: 'updateRelationship', + field: 'configs', + record: appIdentifier, + value: { + data: [ + { type: 'config', id: '1' }, + { type: 'config', id: '1' }, + { type: 'config', id: '1' }, + { type: 'config', id: '2' }, + { type: 'config', id: '3' }, + { type: 'config', id: '4' }, + ], + }, + }); }); - }); - assert.ok(false, 'expected assertion'); - } catch (e: unknown) { - assert.strictEqual( - (e as Error)?.message, - 'Assertion Failed: Expected all entries in the relationship to be unique, found duplicates', - 'assertion is thrown' - ); - } - }); - - test('replaceRelatedRecords asserts on duplicates in a local replace', function (assert) { - const { owner } = this; - - class App extends Model { - @attr declare name: string; - @hasMany('config', { async: false, inverse: null }) declare configs: Config[]; - } - - class Config extends Model { - @attr declare name: string; - } - - owner.register('model:app', App); - owner.register('model:config', Config); - const store = owner.lookup('service:store') as unknown as Store; - const graph = graphFor(store); - const appIdentifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'app', id: '1' }); - const configIdentifier1 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '1' }); - const configIdentifier2 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '2' }); - const configIdentifier3 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '3' }); - const configIdentifier4 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '4' }); + assert.ok(false, 'expected assertion'); + } catch (e: unknown) { + assert.equal( + (e as Error)?.message, + 'Expected all entries in the relationship to be unique, found duplicates', + 'assertion is thrown' + ); + } + }); - try { - store._join(() => { - graph.update({ - op: 'replaceRelatedRecords', - field: 'configs', - record: appIdentifier, - value: [ - configIdentifier1, - configIdentifier1, - configIdentifier1, - configIdentifier2, - configIdentifier3, - configIdentifier4, - ], + test('replaceRelatedRecords asserts on duplicates in a local replace', function (assert) { + const { owner } = this; + + class App extends Model { + @attr declare name: string; + @hasMany('config', { async: false, inverse: null }) declare configs: Config[]; + } + + class Config extends Model { + @attr declare name: string; + } + + owner.register('model:app', App); + owner.register('model:config', Config); + const store = owner.lookup('service:store') as unknown as Store; + const graph = graphFor(store); + const appIdentifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'app', id: '1' }); + const configIdentifier1 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '1' }); + const configIdentifier2 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '2' }); + const configIdentifier3 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '3' }); + const configIdentifier4 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'config', id: '4' }); + + try { + store._join(() => { + graph.update({ + op: 'replaceRelatedRecords', + field: 'configs', + record: appIdentifier, + value: [ + configIdentifier1, + configIdentifier1, + configIdentifier1, + configIdentifier2, + configIdentifier3, + configIdentifier4, + ], + }); }); - }); - assert.ok(false, 'expected assertion'); - } catch (e: unknown) { - assert.strictEqual( - (e as Error)?.message, - 'Assertion Failed: Expected all entries in the relationship to be unique, found duplicates', - 'assertion is thrown' - ); - } - }); + assert.ok(false, 'expected assertion'); + } catch (e: unknown) { + assert.equal( + (e as Error)?.message, + 'Expected all entries in the relationship to be unique, found duplicates', + 'assertion is thrown' + ); + } + }); + } } }); 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 84ff0f0dcf3..230f2ff1473 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 @@ -2,7 +2,7 @@ import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import { recordIdentifierFor } from '@ember-data/store'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import type { Diagnostic } from '@warp-drive/diagnostic/-types'; import type { Context, UserRecord } 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 da5cd999846..5ee8eb3dcc2 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,11 +1,8 @@ +import type { CollectionEdge, Graph, GraphEdge, ImplicitEdge, ResourceEdge } from '@ember-data/graph/-private'; import { graphFor } from '@ember-data/graph/-private'; -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 Model from '@ember-data/model'; import type Store from '@ember-data/store'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { ModelSchema } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { CollectionRelationship } from '@warp-drive/core-types/cache/relationship'; import type { ResourceType } from '@warp-drive/core-types/symbols'; diff --git a/tests/ember-data__graph/tests/integration/graph/edge-test.ts b/tests/ember-data__graph/tests/integration/graph/edge-test.ts index 7193f346728..47c7eafefa8 100644 --- a/tests/ember-data__graph/tests/integration/graph/edge-test.ts +++ b/tests/ember-data__graph/tests/integration/graph/edge-test.ts @@ -1,5 +1,5 @@ +import type { Graph } from '@ember-data/graph/-private'; import { graphFor } from '@ember-data/graph/-private'; -import type { Graph } from '@ember-data/graph/-private/graph'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; diff --git a/tests/ember-data__graph/tests/integration/graph/polymorphism/implicit-keys-test.ts b/tests/ember-data__graph/tests/integration/graph/polymorphism/implicit-keys-test.ts index eb26e6d3c5e..da1ce0bac8c 100644 --- a/tests/ember-data__graph/tests/integration/graph/polymorphism/implicit-keys-test.ts +++ b/tests/ember-data__graph/tests/integration/graph/polymorphism/implicit-keys-test.ts @@ -2,7 +2,7 @@ import { graphFor } from '@ember-data/graph/-private'; import Model, { attr, belongsTo } from '@ember-data/model'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import { ResourceType } from '@warp-drive/core-types/symbols'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; 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 c0e64d66105..54a4b2abf52 100644 --- a/tests/ember-data__graph/tests/integration/graph/unload-test.ts +++ b/tests/ember-data__graph/tests/integration/graph/unload-test.ts @@ -1,6 +1,5 @@ +import type { Graph, ResourceEdge } from '@ember-data/graph/-private'; import { graphFor } from '@ember-data/graph/-private'; -import type { ResourceEdge } from '@ember-data/graph/-private/edges/resource'; -import type { Graph } from '@ember-data/graph/-private/graph'; import Model, { attr, belongsTo } from '@ember-data/model'; import type Store from '@ember-data/store'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; diff --git a/tests/ember-data__graph/tests/test-helper.js b/tests/ember-data__graph/tests/test-helper.ts similarity index 75% rename from tests/ember-data__graph/tests/test-helper.js rename to tests/ember-data__graph/tests/test-helper.ts index 7589fecb246..c380c8a49c8 100644 --- a/tests/ember-data__graph/tests/test-helper.js +++ b/tests/ember-data__graph/tests/test-helper.ts @@ -1,13 +1,13 @@ import { setApplication } from '@ember/test-helpers'; -import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts'; +import Application from 'ember-data__graph/app'; +import config from 'ember-data__graph/config/environment'; + +import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts/index'; import { setupGlobalHooks } from '@warp-drive/diagnostic'; import { configure } from '@warp-drive/diagnostic/ember'; import { start } from '@warp-drive/diagnostic/runners/dom'; -import Application from '../app'; -import config from '../config/environment'; - setupGlobalHooks((hooks) => { configureAsserts(hooks); }); @@ -15,8 +15,8 @@ setupGlobalHooks((hooks) => { configure(); setApplication(Application.create(config.APP)); -start({ - tryCatch: false, +void start({ + tryCatch: true, groupLogs: false, instrument: true, hideReport: true, diff --git a/tests/ember-data__graph/tsconfig.json b/tests/ember-data__graph/tsconfig.json index 1841c389699..d299b914f1c 100644 --- a/tests/ember-data__graph/tsconfig.json +++ b/tests/ember-data__graph/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,34 +7,89 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - + "baseUrl": ".", "experimentalDecorators": true, - - "noImplicitOverride": true, - + "noImplicitOverride": false, "incremental": true, - "noEmit": true, "declaration": false, - - "types": ["ember-source/types"], "paths": { - "@warp-drive/build-config/deprecations": [ - "../../packages/private-build-infra/virtual-packages/deprecations.d.ts" - ], - "@ember-data/packages": ["../../packages/private-build-infra/virtual-packages/packages.d.ts"], - "@warp-drive/build-config/canary-features": [ - "../../packages/private-build-infra/virtual-packages/canary-features.d.ts" - ], - "@warp-drive/build-config/debugging": ["../../packages/private-build-infra/virtual-packages/debugging.d.ts"], - "@warp-drive/build-config/env": ["../../packages/private-build-infra/virtual-packages/env.d.ts"] - } + "ember-data__graph/*": ["./app/*"], + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../../packages/diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../../packages/diagnostic/unstable-preview-types/*"] + }, + "types": ["ember-source/types"] }, - "references": [] + "references": [ + { + "path": "../../packages/build-config" + }, + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/diagnostic" + } + ] } diff --git a/tests/ember-data__json-api/.eslintrc.cjs b/tests/ember-data__json-api/.eslintrc.cjs deleted file mode 100644 index b8f1386c9b7..00000000000 --- a/tests/ember-data__json-api/.eslintrc.cjs +++ /dev/null @@ -1,36 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const diagnostic = require('@warp-drive/internal-config/eslint/diagnostic.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - diagnostic.config(), - diagnostic.defaults({ - files: ['tests/**/*.{js,ts}'], - }), - ], -}; diff --git a/tests/ember-data__json-api/ember-cli-build.js b/tests/ember-data__json-api/ember-cli-build.js index effea243257..436ede741f6 100644 --- a/tests/ember-data__json-api/ember-cli-build.js +++ b/tests/ember-data__json-api/ember-cli-build.js @@ -2,25 +2,15 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : '4.12'; +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - emberData: { - compatWith, - }, - tests: true, babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith, - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, @@ -28,26 +18,11 @@ module.exports = function (defaults) { }, }); - /* - This build file specifies the options for the dummy test app of this - addon, located in `/tests/dummy` - This build file does *not* influence how the addon or the app using it - behave. You most likely want to be modifying `./index.js` or app's build file - */ + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); + app.import('node_modules/@warp-drive/diagnostic/dist/styles/dom-reporter.css'); - return app.toTree(); - // const { Webpack } = require('@embroider/webpack'); - // return require('@embroider/compat').compatBuild(app, Webpack, { - // staticAddonTestSupportTrees: true, - // staticAddonTrees: true, - // staticHelpers: true, - // staticModifiers: true, - // staticComponents: true, - // // staticEmberSource: true, - // // splitAtRoutes: ['route.name'], // can also be a RegExp - // packagerOptions: { - // webpackConfig: {}, - // }, - // }); + return app.toTree(); }; diff --git a/tests/ember-data__json-api/eslint.config.mjs b/tests/ember-data__json-api/eslint.config.mjs new file mode 100644 index 00000000000..aedceb2d799 --- /dev/null +++ b/tests/ember-data__json-api/eslint.config.mjs @@ -0,0 +1,28 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as diagnostic from '@warp-drive/internal-config/eslint/diagnostic.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + diagnostic.browser({ + allowedImports: ['@ember/object'], + }), +]; diff --git a/tests/ember-data__json-api/package.json b/tests/ember-data__json-api/package.json index a4c0d376f73..d93b479025b 100644 --- a/tests/ember-data__json-api/package.json +++ b/tests/ember-data__json-api/package.json @@ -18,11 +18,11 @@ "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", "start": "bun run build:tests --watch", "build:production": "pnpm build:tests -e production", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "test": "bun ./diagnostic.js", "test:production": "bun ./diagnostic.js", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/diagnostic": { @@ -37,9 +37,6 @@ "@ember-data/graph": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/store": { "injected": true }, @@ -55,6 +52,9 @@ "@warp-drive/core-types": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@ember/string": { "injected": true }, @@ -82,7 +82,6 @@ "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", "@ember-data/model": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", @@ -92,6 +91,7 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/addon-shim": "^1.8.7", "@embroider/macros": "^1.15.1", "@glimmer/component": "^1.1.2", @@ -100,6 +100,7 @@ "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", "@warp-drive/holodeck": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-auto-import": "^2.7.2", "ember-cli": "~5.7.0", "ember-cli-babel": "^8.2.0", @@ -124,7 +125,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" 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 aed96b3ac60..eb4a6c0225c 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,16 +1,24 @@ import Cache from '@ember-data/json-api'; import type { StructuredDataDocument } from '@ember-data/request'; +import type { NotificationType } from '@ember-data/store'; 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 { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { CacheCapabilitiesManager, SchemaService } from '@ember-data/store/types'; import type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { CollectionResourceDataDocument } from '@warp-drive/core-types/spec/document'; -import type { CollectionResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { CollectionResourceDocument, ResourceObject } from '@warp-drive/core-types/spec/json-api-raw'; import { module, test } from '@warp-drive/diagnostic'; +type AttributesSchema = ReturnType; +type RelationshipsSchema = ReturnType; + +function asStructuredDocument(doc: { + request?: { url: string; cacheOptions?: { key?: string } }; + content: T; +}): StructuredDataDocument { + return doc as unknown as StructuredDataDocument; +} + type FakeRecord = { [key: string]: unknown; destroy: () => void }; class TestStore extends Store { override createCache(wrapper: CacheCapabilitiesManager) { @@ -20,7 +28,7 @@ class TestStore extends Store { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, (this.cache.peek(identifier) as ResourceObject).attributes); const token = this.notifications.subscribe( identifier, @@ -93,14 +101,16 @@ module('Integration | @ember-data/json-api Cache.put()', const store = new TestStore(); store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - content: { - data: [ - { type: 'user', id: '1', attributes: { name: 'Chris' } }, - { type: 'user', id: '2', attributes: { name: 'Wesley' } }, - ], - }, - }) as CollectionResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + content: { + data: [ + { type: 'user', id: '1', attributes: { name: 'Chris' } }, + { type: 'user', id: '2', attributes: { name: 'Wesley' } }, + ], + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1' }); const identifier2 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '2' }); @@ -111,15 +121,17 @@ module('Integration | @ember-data/json-api Cache.put()', const store = new TestStore(); store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - request: { url: 'https://api.example.com/v1/users' }, - content: { - data: [ - { type: 'user', id: '1', attributes: { name: 'Chris' } }, - { type: 'user', id: '2', attributes: { name: 'Wesley' } }, - ], - }, - }) as CollectionResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users' }, + content: { + data: [ + { type: 'user', id: '1', attributes: { name: 'Chris' } }, + { type: 'user', id: '2', attributes: { name: 'Wesley' } }, + ], + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1', @@ -160,11 +172,13 @@ module('Integration | @ember-data/json-api Cache.put()', const store = new TestStore(); store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - content: { - data: [{ type: 'user', id: '1', attributes: { name: 'Chris' } }], - }, - }) as CollectionResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + content: { + data: [{ type: 'user', id: '1', attributes: { name: 'Chris' } }], + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1' }); assert.deepEqual(responseDocument.data, [identifier], 'We were given the correct data back'); @@ -190,11 +204,13 @@ module('Integration | @ember-data/json-api Cache.put()', 'Resource Blob is kept updated in the cache after mutation' ); - store.cache.put({ - content: { - data: [{ type: 'user', id: '1', attributes: { username: '@runspired' } }], - }, - }); + store.cache.put( + asStructuredDocument({ + content: { + data: [{ type: 'user', id: '1', attributes: { username: '@runspired' } }], + }, + }) + ); resourceData = store.cache.peek(identifier); assert.deepEqual( @@ -268,65 +284,67 @@ module('Integration | @ember-data/json-api Cache.put()', let responseDocument: CollectionResourceDataDocument; store._run(() => { - responseDocument = store.cache.put({ - content: { - data: [ - { - type: 'user', - id: '1', - attributes: { name: 'Chris' }, - relationships: { - bestFriend: { - data: { type: 'user', id: '2' }, - }, - worstEnemy: { - data: { type: 'user', id: '3' }, - }, - friends: { - data: [ - { type: 'user', id: '2' }, - { type: 'user', id: '3' }, - ], + responseDocument = store.cache.put( + asStructuredDocument({ + content: { + data: [ + { + type: 'user', + id: '1', + attributes: { name: 'Chris' }, + relationships: { + bestFriend: { + data: { type: 'user', id: '2' }, + }, + worstEnemy: { + data: { type: 'user', id: '3' }, + }, + friends: { + data: [ + { type: 'user', id: '2' }, + { type: 'user', id: '3' }, + ], + }, }, }, - }, - ], - included: [ - { - type: 'user', - id: '2', - attributes: { name: 'Wesley' }, - relationships: { - bestFriend: { - data: { type: 'user', id: '1' }, - }, - friends: { - data: [ - { type: 'user', id: '1' }, - { type: 'user', id: '3' }, - ], + ], + included: [ + { + type: 'user', + id: '2', + attributes: { name: 'Wesley' }, + relationships: { + bestFriend: { + data: { type: 'user', id: '1' }, + }, + friends: { + data: [ + { type: 'user', id: '1' }, + { type: 'user', id: '3' }, + ], + }, }, }, - }, - { - type: 'user', - id: '3', - attributes: { name: 'Rey' }, - relationships: { - bestFriend: { - data: null, - }, - friends: { - data: [ - { type: 'user', id: '1' }, - { type: 'user', id: '2' }, - ], + { + type: 'user', + id: '3', + attributes: { name: 'Rey' }, + relationships: { + bestFriend: { + data: null, + }, + friends: { + data: [ + { type: 'user', id: '1' }, + { type: 'user', id: '2' }, + ], + }, }, }, - }, - ], - }, - }) as CollectionResourceDataDocument; + ], + }, + }) + ); }); const identifier1 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1' }); const identifier2 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '2' }); diff --git a/tests/ember-data__json-api/tests/integration/cache/error-documents-test.ts b/tests/ember-data__json-api/tests/integration/cache/error-documents-test.ts index 27813e68af6..5890598b964 100644 --- a/tests/ember-data__json-api/tests/integration/cache/error-documents-test.ts +++ b/tests/ember-data__json-api/tests/integration/cache/error-documents-test.ts @@ -2,7 +2,7 @@ import Cache from '@ember-data/json-api'; import RequestManager from '@ember-data/request'; import Fetch from '@ember-data/request/fetch'; import Store, { CacheHandler } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import { module, test } from '@warp-drive/diagnostic'; import { mock, MockServerHandler } from '@warp-drive/holodeck'; 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 22a3c5a730a..315e80134b0 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,14 +1,23 @@ import Cache from '@ember-data/json-api'; -import type { StructuredDocument } from '@ember-data/request'; +import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; +import type { CacheOperation } from '@ember-data/store'; import Store from '@ember-data/store'; -import type { CacheOperation } from '@ember-data/store/-private/managers/notification-manager'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { CacheCapabilitiesManager, SchemaService } from '@ember-data/store/types'; import type { StableDocumentIdentifier, StableExistingRecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { LegacyFieldSchema as FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { CollectionResourceDataDocument, ResourceMetaDocument } from '@warp-drive/core-types/spec/document'; import { module, test } from '@warp-drive/diagnostic'; +type AttributesSchema = ReturnType; +type RelationshipsSchema = ReturnType; + +function asStructuredDocument(doc: { + request?: { url: string; cacheOptions?: { key?: string } }; + content: T; +}): StructuredDataDocument { + return doc as unknown as StructuredDataDocument; +} + class TestStore extends Store { override createCache(wrapper: CacheCapabilitiesManager) { return new Cache(wrapper); @@ -64,12 +73,14 @@ module('Integration | @ember-data/json-api Cach.put()', function ( test('meta documents are correctly cached', function (assert) { const store = new TestStore(); - const responseDocument = store.cache.put({ - request: { url: 'https://api.example.com/v1/users' }, - content: { - meta: { count: 4 }, - }, - }) as ResourceMetaDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users' }, + content: { + meta: { count: 4 }, + }, + }) + ); assert.false('data' in responseDocument, 'No data is associated'); assert.deepEqual(responseDocument.meta, { count: 4 }, 'meta is correct'); @@ -102,12 +113,14 @@ module('Integration | @ember-data/json-api Cach.put()', function ( test('meta documents respect cacheOptions.key', function (assert) { const store = new TestStore(); - const responseDocument = store.cache.put({ - request: { url: 'https://api.example.com/v1/users', cacheOptions: { key: 'users' } }, - content: { - meta: { count: 4 }, - }, - }) as ResourceMetaDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users', cacheOptions: { key: 'users' } }, + content: { + meta: { count: 4 }, + }, + }) + ); assert.false('data' in responseDocument, 'No data is associated'); assert.deepEqual(responseDocument.meta, { count: 4 }, 'meta is correct'); @@ -144,12 +157,14 @@ module('Integration | @ember-data/json-api Cach.put()', function ( test('meta documents are correctly updated', function (assert) { const store = new TestStore(); - const responseDocument = store.cache.put({ - request: { url: 'https://api.example.com/v1/users' }, - content: { - meta: { count: 4, last: 4 }, - }, - }) as ResourceMetaDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users' }, + content: { + meta: { count: 4, last: 4 }, + }, + }) + ); assert.false('data' in responseDocument, 'No data is associated'); assert.deepEqual(responseDocument.meta, { count: 4, last: 4 }, 'meta is correct'); @@ -178,12 +193,14 @@ module('Integration | @ember-data/json-api Cach.put()', function ( 'We got the cached response document back' ); - const responseDocument2 = store.cache.put({ - request: { url: 'https://api.example.com/v1/users' }, - content: { - meta: { count: 3, next: 8 }, - }, - }) as ResourceMetaDocument; + const responseDocument2 = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users' }, + content: { + meta: { count: 3, next: 8 }, + }, + }) + ); assert.false('data' in responseDocument2, 'No data is associated'); assert.deepEqual(responseDocument2.meta, { count: 3, next: 8 }, 'meta is correct'); @@ -217,13 +234,15 @@ module('Integration | @ember-data/json-api Cach.put()', function ( const store = new TestStore(); store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - request: { url: 'https://api.example.com/v1/users' }, - content: { - data: [{ type: 'user', id: '1', attributes: { name: 'Chris' } }], - meta: { count: 4, last: 4 }, - }, - }) as CollectionResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users' }, + content: { + data: [{ type: 'user', id: '1', attributes: { name: 'Chris' } }], + meta: { count: 4, last: 4 }, + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1', @@ -258,12 +277,14 @@ module('Integration | @ember-data/json-api Cach.put()', function ( 'We got the cached response document back' ); - const responseDocument2 = store.cache.put({ - request: { url: 'https://api.example.com/v1/users' }, - content: { - meta: { count: 3, next: 8 }, - }, - }) as ResourceMetaDocument; + const responseDocument2 = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users' }, + content: { + meta: { count: 3, next: 8 }, + }, + }) + ); assert.false('data' in responseDocument2, 'No data is associated'); assert.deepEqual(responseDocument2.meta, { count: 3, next: 8 }, 'meta is correct'); @@ -322,28 +343,32 @@ module('Integration | @ember-data/json-api Cach.put()', function ( }); store._run(() => { - const responseDocument = store.cache.put({ - request: { - url: '/api/v1/query?type=user&name=Chris&limit=1', - }, - content: { - meta: { count: 4 }, - }, - }) as ResourceMetaDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { + url: '/api/v1/query?type=user&name=Chris&limit=1', + }, + content: { + meta: { count: 4 }, + }, + }) + ); assert.equal(responseDocument.meta.count, 4, 'We were given the correct data back'); }); isUpdating = true; store._run(() => { - const responseDocument2 = store.cache.put({ - request: { - url: '/api/v1/query?type=user&name=Chris&limit=1', - }, - content: { - meta: { count: 3 }, - }, - }) as ResourceMetaDocument; + const responseDocument2 = store.cache.put( + asStructuredDocument({ + request: { + url: '/api/v1/query?type=user&name=Chris&limit=1', + }, + content: { + meta: { count: 3 }, + }, + }) + ); assert.equal(responseDocument2.meta.count, 3, 'We were given the correct data back'); }); 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 610d5ae4e7a..59c2e3f358e 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,20 +1,21 @@ import Cache from '@ember-data/json-api'; -import type { StructuredDocument } from '@ember-data/request'; +import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; +import type { CacheOperation, NotificationType } from '@ember-data/store'; import Store from '@ember-data/store'; -import type { CacheOperation, 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 { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { CacheCapabilitiesManager, SchemaService } from '@ember-data/store/types'; import type { StableDocumentIdentifier, StableExistingRecordIdentifier, StableRecordIdentifier, } from '@warp-drive/core-types/identifier'; -import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { SingleResourceDataDocument } from '@warp-drive/core-types/spec/document'; -import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; import { module, test } from '@warp-drive/diagnostic'; +type AttributesSchema = ReturnType; +type RelationshipsSchema = ReturnType; + type FakeRecord = { [key: string]: unknown; destroy: () => void }; class TestStore extends Store { override createCache(wrapper: CacheCapabilitiesManager) { @@ -24,7 +25,7 @@ class TestStore extends Store { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, this.cache.peek(identifier)!.attributes); const token = this.notifications.subscribe( identifier, @@ -92,16 +93,25 @@ class TestSchema { } } +function asStructuredDocument(doc: { + request?: { url: string; cacheOptions?: { key?: string } }; + content: T; +}): StructuredDataDocument { + return doc as unknown as StructuredDataDocument; +} + module('Integration | @ember-data/json-api Cache.put()', function (hooks) { test('simple single resource documents are correctly managed', function (assert) { const store = new TestStore(); store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - content: { - data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, - }, - }) as SingleResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + content: { + data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1', @@ -114,12 +124,14 @@ module('Integration | @ember-data/json-api Cache.put()', f const store = new TestStore(); store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - request: { url: 'https://api.example.com/v1/users/1' }, - content: { - data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, - }, - }) as SingleResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users/1' }, + content: { + data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1', @@ -152,14 +164,16 @@ module('Integration | @ember-data/json-api Cache.put()', f test('data documents respect cacheOptions.key', function (assert) { const store = new TestStore(); - store.registerSchemaDefinitionService(new TestSchema()); + store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - request: { url: 'https://api.example.com/v1/users/1', cacheOptions: { key: 'user-1' } }, - content: { - data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, - }, - }) as SingleResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { url: 'https://api.example.com/v1/users/1', cacheOptions: { key: 'user-1' } }, + content: { + data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1', @@ -225,14 +239,16 @@ module('Integration | @ember-data/json-api Cache.put()', f }); store._run(() => { - const responseDocument = store.cache.put({ - request: { - url: '/api/v1/query?type=user&name=Chris&limit=1', - }, - content: { - data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, - }, - }) as SingleResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + request: { + url: '/api/v1/query?type=user&name=Chris&limit=1', + }, + content: { + data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1' }); assert.equal(responseDocument.data, identifier, 'We were given the correct data back'); @@ -240,14 +256,16 @@ module('Integration | @ember-data/json-api Cache.put()', f isUpdating = true; store._run(() => { - const responseDocument2 = store.cache.put({ - request: { - url: '/api/v1/query?type=user&name=Chris&limit=1', - }, - content: { - data: { type: 'user', id: '2', attributes: { name: 'Chris' } }, - }, - }) as SingleResourceDataDocument; + const responseDocument2 = store.cache.put( + asStructuredDocument({ + request: { + url: '/api/v1/query?type=user&name=Chris&limit=1', + }, + content: { + data: { type: 'user', id: '2', attributes: { name: 'Chris' } }, + }, + }) + ); const identifier2 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '2' }); assert.equal(responseDocument2.data, identifier2, 'We were given the correct data back'); }); @@ -257,11 +275,13 @@ module('Integration | @ember-data/json-api Cache.put()', f const store = new TestStore(); store.registerSchema(new TestSchema()); - const responseDocument = store.cache.put({ - content: { - data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, - }, - }) as SingleResourceDataDocument; + const responseDocument = store.cache.put( + asStructuredDocument({ + content: { + data: { type: 'user', id: '1', attributes: { name: 'Chris' } }, + }, + }) + ); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1' }); assert.equal(responseDocument.data, identifier, 'We were given the correct data back'); @@ -287,11 +307,13 @@ module('Integration | @ember-data/json-api Cache.put()', f 'Resource Blob is kept updated in the cache after mutation' ); - store.cache.put({ - content: { - data: { type: 'user', id: '1', attributes: { username: '@runspired' } }, - }, - }); + store.cache.put( + asStructuredDocument({ + content: { + data: { type: 'user', id: '1', attributes: { username: '@runspired' } }, + }, + }) + ); resourceData = store.cache.peek(identifier); assert.deepEqual( @@ -365,63 +387,65 @@ module('Integration | @ember-data/json-api Cache.put()', f let responseDocument: SingleResourceDataDocument; store._run(() => { - responseDocument = store.cache.put({ - content: { - data: { - type: 'user', - id: '1', - attributes: { name: 'Chris' }, - relationships: { - bestFriend: { - data: { type: 'user', id: '2' }, - }, - worstEnemy: { - data: { type: 'user', id: '3' }, - }, - friends: { - data: [ - { type: 'user', id: '2' }, - { type: 'user', id: '3' }, - ], - }, - }, - }, - included: [ - { + responseDocument = store.cache.put( + asStructuredDocument({ + content: { + data: { type: 'user', - id: '2', - attributes: { name: 'Wesley' }, + id: '1', + attributes: { name: 'Chris' }, relationships: { bestFriend: { - data: { type: 'user', id: '1' }, + data: { type: 'user', id: '2' }, + }, + worstEnemy: { + data: { type: 'user', id: '3' }, }, friends: { data: [ - { type: 'user', id: '1' }, + { type: 'user', id: '2' }, { type: 'user', id: '3' }, ], }, }, }, - { - type: 'user', - id: '3', - attributes: { name: 'Rey' }, - relationships: { - bestFriend: { - data: null, + included: [ + { + type: 'user', + id: '2', + attributes: { name: 'Wesley' }, + relationships: { + bestFriend: { + data: { type: 'user', id: '1' }, + }, + friends: { + data: [ + { type: 'user', id: '1' }, + { type: 'user', id: '3' }, + ], + }, }, - friends: { - data: [ - { type: 'user', id: '1' }, - { type: 'user', id: '2' }, - ], + }, + { + type: 'user', + id: '3', + attributes: { name: 'Rey' }, + relationships: { + bestFriend: { + data: null, + }, + friends: { + data: [ + { type: 'user', id: '1' }, + { type: 'user', id: '2' }, + ], + }, }, }, - }, - ], - }, - }) as SingleResourceDataDocument; + ], + }, + }) + ); }); const identifier1 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1' }); const identifier2 = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '2' }); @@ -505,6 +529,7 @@ module('Integration | @ember-data/json-api Cache.put()', f name: 'name', type: null, options: { + // @ts-expect-error functions are not allowed in schema defaultValue: () => { i++; return `Name ${i}`; @@ -518,15 +543,17 @@ module('Integration | @ember-data/json-api Cache.put()', f ); store._run(() => { - store.cache.put({ - content: { - data: { - type: 'user', - id: '1', - attributes: {}, + store.cache.put( + asStructuredDocument({ + content: { + data: { + type: 'user', + id: '1', + attributes: {}, + }, }, - }, - }) as SingleResourceDataDocument; + }) + ); }); const identifier = store.identifierCache.getOrCreateRecordIdentifier({ type: 'user', id: '1' }); @@ -548,17 +575,19 @@ module('Integration | @ember-data/json-api Cache.put()', f assert.equal(name5, 'Name 2', 'The default value was regenerated'); store._run(() => { - store.cache.put({ - content: { - data: { - type: 'user', - id: '1', - attributes: { - name: 'Tomster', + store.cache.put( + asStructuredDocument({ + content: { + data: { + type: 'user', + id: '1', + attributes: { + name: 'Tomster', + }, }, }, - }, - }) as SingleResourceDataDocument; + }) + ); }); const name6 = store.cache.getAttr(identifier, 'name'); 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 4d4ed739646..17480a093bf 100644 --- a/tests/ember-data__json-api/tests/integration/serialize-test.ts +++ b/tests/ember-data__json-api/tests/integration/serialize-test.ts @@ -1,12 +1,11 @@ import Cache from '@ember-data/json-api'; import { serializePatch, serializeResources } from '@ember-data/json-api/request'; +import type { NotificationType } from '@ember-data/store'; 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 { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { FieldSchema, LegacyAttributeField, LegacyRelationshipSchema } from '@warp-drive/core-types/schema/fields'; +import type { ResourceObject } from '@warp-drive/core-types/spec/json-api-raw'; import { module, test } from '@warp-drive/diagnostic'; type FakeRecord = { [key: string]: unknown; destroy: () => void }; @@ -18,7 +17,7 @@ class TestStore extends Store { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, (this.cache.peek(identifier) as ResourceObject).attributes); const token = this.notifications.subscribe( identifier, @@ -41,6 +40,8 @@ class TestStore extends Store { } } +type AttributesSchema = Record; +type RelationshipsSchema = Record; type Schemas = Record; class TestSchema { declare schemas: Schemas; diff --git a/tests/ember-data__json-api/tsconfig.json b/tests/ember-data__json-api/tsconfig.json index 55b15091402..1b019f68942 100644 --- a/tests/ember-data__json-api/tsconfig.json +++ b/tests/ember-data__json-api/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,22 +7,92 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../../packages/diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../../packages/diagnostic/unstable-preview-types/*"], + "@warp-drive/holodeck": ["../../packages/holodeck/unstable-preview-types"], + "@warp-drive/holodeck/*": ["../../packages/holodeck/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/diagnostic" + }, + { + "path": "../../packages/holodeck" + }, + { + "path": "../../packages/build-config" + } + ] } diff --git a/tests/ember-data__model/.eslintrc.cjs b/tests/ember-data__model/.eslintrc.cjs deleted file mode 100644 index b8f1386c9b7..00000000000 --- a/tests/ember-data__model/.eslintrc.cjs +++ /dev/null @@ -1,36 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const diagnostic = require('@warp-drive/internal-config/eslint/diagnostic.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - diagnostic.config(), - diagnostic.defaults({ - files: ['tests/**/*.{js,ts}'], - }), - ], -}; diff --git a/tests/ember-data__model/ember-cli-build.js b/tests/ember-data__model/ember-cli-build.js index e145431c921..436ede741f6 100644 --- a/tests/ember-data__model/ember-cli-build.js +++ b/tests/ember-data__model/ember-cli-build.js @@ -1,50 +1,27 @@ -/* eslint n/no-unpublished-require: 'off' */ - 'use strict'; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - // allows testing with env config for stripping all deprecations - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null; - const plugins = [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith, - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ]; +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); const app = new EmberApp(defaults, { - emberData: { - compatWith, - }, - tests: true, - // Add options here babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins, + plugins: [...macros()], }, 'ember-cli-babel': { + throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, }); - // Use `app.import` to add additional libraries to the generated - // output files. - // - // If you need to use different assets in different - // environments, specify an object as the first parameter. That - // object's keys should be the environment name and the values - // should be the asset to use in that environment. - // - // If the library that you are including contains AMD or ES6 - // modules that you would like to import into your application - // please specify an object with the list of modules as keys - // along with the exports of each module as its value. + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); + app.import('node_modules/@warp-drive/diagnostic/dist/styles/dom-reporter.css'); return app.toTree(); diff --git a/tests/ember-data__model/eslint.config.mjs b/tests/ember-data__model/eslint.config.mjs new file mode 100644 index 00000000000..edabe45e43a --- /dev/null +++ b/tests/ember-data__model/eslint.config.mjs @@ -0,0 +1,36 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; +import * as diagnostic from '@warp-drive/internal-config/eslint/diagnostic.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js) ================ + js.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // browser (js/ts) ================ + typescript.browser({ + files: ['**/*.ts', '**/*.gts'], + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + diagnostic.browser({ + allowedImports: ['@ember/object'], + }), +]; diff --git a/tests/ember-data__model/package.json b/tests/ember-data__model/package.json index ecc75aa258c..a691655b275 100644 --- a/tests/ember-data__model/package.json +++ b/tests/ember-data__model/package.json @@ -17,17 +17,14 @@ "scripts": { "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", "check:types": "tsc --noEmit", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "test": "bun ./diagnostic.js", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/adapter": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/serializer": { "injected": true }, @@ -43,6 +40,9 @@ "@warp-drive/core-types": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@ember/string": { "injected": true }, @@ -72,7 +72,6 @@ "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/serializer": "workspace:5.4.0-alpha.64", @@ -81,12 +80,14 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/addon-shim": "^1.8.7", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-auto-import": "^2.7.2", "ember-cli": "~5.7.0", "ember-cli-babel": "^8.2.0", @@ -104,7 +105,7 @@ "webpack": "^5.91.0" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember": { "edition": "octane" diff --git a/tests/ember-data__model/tests/integration/model-for-test.ts b/tests/ember-data__model/tests/integration/model-for-test.ts index 77a51cd3e02..dc199b57085 100644 --- a/tests/ember-data__model/tests/integration/model-for-test.ts +++ b/tests/ember-data__model/tests/integration/model-for-test.ts @@ -1,6 +1,6 @@ import Store from '@ember-data/store'; -import type { FieldSchema, SchemaService } from '@ember-data/store/-types/q/schema-service'; -import type { RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { SchemaService } from '@ember-data/store/types'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import { module, test } from '@warp-drive/diagnostic'; module('modelFor without @ember-data/model', function () { @@ -55,7 +55,9 @@ module('modelFor without @ember-data/model', function () { return fieldDefs; } - relationshipsDefinitionFor(_identifier: { type: string }): RelationshipsSchema { + relationshipsDefinitionFor(_identifier: { + type: string; + }): ReturnType { return {}; } @@ -79,7 +81,7 @@ module('modelFor without @ember-data/model', function () { } catch (e) { assert.equal( (e as Error).message, - "Assertion Failed: No model was found for 'person' and no schema handles the type", + "No model was found for 'person' and no schema handles the type", 'We throw an error when no schema is available' ); } @@ -135,7 +137,9 @@ module('modelFor without @ember-data/model', function () { return fieldDefs; } - relationshipsDefinitionFor(_identifier: { type: string }): RelationshipsSchema { + relationshipsDefinitionFor(_identifier: { + type: string; + }): ReturnType { return {}; } diff --git a/tests/ember-data__model/tsconfig.json b/tests/ember-data__model/tsconfig.json index e39fd4da358..079ccd949f1 100644 --- a/tests/ember-data__model/tsconfig.json +++ b/tests/ember-data__model/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,24 +7,83 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/adapter": ["../../packages/adapter/unstable-preview-types"], + "@ember-data/adapter/*": ["../../packages/adapter/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/serializer": ["../../packages/serializer/unstable-preview-types"], + "@ember-data/serializer/*": ["../../packages/serializer/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../../packages/diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../../packages/diagnostic/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/adapter" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/serializer" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/diagnostic" + }, + { + "path": "../../packages/build-config" + } + ] } diff --git a/tests/ember-data__request/.eslintrc.cjs b/tests/ember-data__request/.eslintrc.cjs deleted file mode 100644 index df6dbd72caa..00000000000 --- a/tests/ember-data__request/.eslintrc.cjs +++ /dev/null @@ -1,37 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const diagnostic = require('@warp-drive/internal-config/eslint/diagnostic.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - diagnostic.config(), - diagnostic.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: ['@ember/application', '@ember/owner', '@ember/service'], - }), - ], -}; diff --git a/tests/ember-data__request/ember-cli-build.js b/tests/ember-data__request/ember-cli-build.js index 35799698982..436ede741f6 100644 --- a/tests/ember-data__request/ember-cli-build.js +++ b/tests/ember-data__request/ember-cli-build.js @@ -2,25 +2,15 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null; +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - emberData: { - compatWith, - }, - tests: true, babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith, - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, @@ -28,12 +18,10 @@ module.exports = function (defaults) { }, }); - /* - This build file specifies the options for the dummy test app of this - addon, located in `/tests/dummy` - This build file does *not* influence how the addon or the app using it - behave. You most likely want to be modifying `./index.js` or app's build file - */ + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); + app.import('node_modules/@warp-drive/diagnostic/dist/styles/dom-reporter.css'); return app.toTree(); diff --git a/tests/ember-data__request/eslint.config.mjs b/tests/ember-data__request/eslint.config.mjs new file mode 100644 index 00000000000..0713926424c --- /dev/null +++ b/tests/ember-data__request/eslint.config.mjs @@ -0,0 +1,36 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; +import * as diagnostic from '@warp-drive/internal-config/eslint/diagnostic.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js) ================ + js.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // browser (js/ts) ================ + typescript.browser({ + files: ['**/*.ts', '**/*.gts'], + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + diagnostic.browser({ + allowedImports: ['@ember/application', '@ember/owner', '@ember/service'], + }), +]; diff --git a/tests/ember-data__request/package.json b/tests/ember-data__request/package.json index 66714918a03..109c539e968 100644 --- a/tests/ember-data__request/package.json +++ b/tests/ember-data__request/package.json @@ -18,11 +18,11 @@ "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", "start": "bun run build:tests --watch", "_build:production": "pnpm build:tests -e production", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "test": "bun ./diagnostic.js", "_test:production": "bun ./diagnostic.js", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/diagnostic": { @@ -34,9 +34,6 @@ "@ember-data/request-utils": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@warp-drive/holodeck": { "injected": true }, @@ -48,22 +45,26 @@ }, "@warp-drive/core-types": { "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "devDependencies": { "@babel/core": "^7.24.4", "@babel/runtime": "^7.24.4", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember/edition-utils": "^1.2.0", "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/addon-shim": "^1.8.7", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", "@warp-drive/holodeck": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", @@ -94,7 +95,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/ember-data__request/tests/integration/abort-test.ts b/tests/ember-data__request/tests/integration/abort-test.ts index 39e39d8fccd..0e656e70f09 100644 --- a/tests/ember-data__request/tests/integration/abort-test.ts +++ b/tests/ember-data__request/tests/integration/abort-test.ts @@ -1,7 +1,6 @@ -import type { RequestInfo } from '@ember-data/request'; +import type { Future, Handler, NextFn, RequestInfo } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Future, Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; module('RequestManager | Abort', function () { @@ -10,7 +9,7 @@ module('RequestManager | Abort', function () { const manager = new RequestManager(); const handler: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal'); const result = await fetch(context.request.url!, context.request); @@ -35,7 +34,7 @@ module('RequestManager | Abort', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const future = next(context.request); assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler1'); @@ -44,7 +43,7 @@ module('RequestManager | Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler2'); const result = await fetch(context.request.url!, context.request); @@ -69,7 +68,7 @@ module('RequestManager | Abort', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const future = next(context.request); const future2 = next(context.request); const future3 = next(context.request); @@ -81,7 +80,7 @@ module('RequestManager | Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler2'); const result = await fetch(context.request.url!, context.request); @@ -111,7 +110,7 @@ module('RequestManager | Abort', function () { let controller!: AbortController; const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const request = Object.assign({}, context.request) as RequestInfo; delete request.signal; controller = new AbortController(); @@ -123,7 +122,7 @@ module('RequestManager | Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive an abort signal in handler2'); assert.equal(context.request.signal, controller.signal, 'we receive the expected abort signal in handler2'); resolvePre(); @@ -163,7 +162,7 @@ module('RequestManager | Abort', function () { let controller!: AbortController; const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const request = Object.assign({}, context.request) as RequestInfo; signal = request.signal!; delete request.signal; @@ -176,7 +175,7 @@ module('RequestManager | Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive an abort signal in handler2'); assert.equal(context.request.signal, controller.signal, 'we receive the expected abort signal in handler2'); resolvePre(); @@ -211,7 +210,7 @@ module('RequestManager | Abort', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const future = next(context.request); assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler1'); @@ -220,7 +219,7 @@ module('RequestManager | Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler2'); const request: RequestInfo = Object.assign({}, context.request) as RequestInfo; delete request.signal; diff --git a/tests/ember-data__request/tests/integration/custom-abort-test.ts b/tests/ember-data__request/tests/integration/custom-abort-test.ts index 4f724fc2092..d63a60f2468 100644 --- a/tests/ember-data__request/tests/integration/custom-abort-test.ts +++ b/tests/ember-data__request/tests/integration/custom-abort-test.ts @@ -1,7 +1,6 @@ -import type { RequestInfo } from '@ember-data/request'; +import type { Future, Handler, NextFn, RequestInfo } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Future, Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; module('RequestManager | Custom Abort', function () { @@ -11,7 +10,7 @@ module('RequestManager | Custom Abort', function () { const controller = new AbortController(); const handler: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal'); assert.equal(context.request.signal, controller.signal, 'we receive the correct signal'); // @ts-expect-error @@ -40,7 +39,7 @@ module('RequestManager | Custom Abort', function () { const controller = new AbortController(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const future = next(context.request); assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler1'); assert.equal(context.request.signal, controller.signal, 'we receive the correct signal'); @@ -51,7 +50,7 @@ module('RequestManager | Custom Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler2'); assert.equal(context.request.signal, controller.signal, 'we receive the correct signal'); // @ts-expect-error @@ -79,7 +78,7 @@ module('RequestManager | Custom Abort', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler1'); const controller = new AbortController(); const future = next(Object.assign({ controller }, context.request, { signal: controller.signal })); @@ -89,7 +88,7 @@ module('RequestManager | Custom Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler2'); const result = await fetch(context.request.url!, context.request); @@ -114,7 +113,7 @@ module('RequestManager | Custom Abort', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const controller = new AbortController(); const future = next(Object.assign({ controller }, context.request)); assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler1'); @@ -124,7 +123,7 @@ module('RequestManager | Custom Abort', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.true(context.request.signal instanceof AbortSignal, 'we receive the abort signal in handler2'); const request: RequestInfo = Object.assign({}, context.request) as RequestInfo; delete request.signal; diff --git a/tests/ember-data__request/tests/integration/error-propagation-test.ts b/tests/ember-data__request/tests/integration/error-propagation-test.ts index 78b514f1ac5..4f0d65563b6 100644 --- a/tests/ember-data__request/tests/integration/error-propagation-test.ts +++ b/tests/ember-data__request/tests/integration/error-propagation-test.ts @@ -1,7 +1,6 @@ -import type { StructuredErrorDocument } from '@ember-data/request'; +import type { Future, Handler, NextFn, StructuredErrorDocument } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Future, Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; function isErrorDoc(e: Error | unknown | StructuredErrorDocument): e is StructuredErrorDocument { @@ -13,7 +12,7 @@ module('RequestManager | Error Propagation', function () { const manager = new RequestManager(); const catchingHandler: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.ok(true, 'catching handler triggered'); try { // await to catch, else error is curried @@ -25,7 +24,7 @@ module('RequestManager | Error Propagation', function () { }, }; const throwingHandler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { assert.ok(true, 'throwing handler triggered'); throw new Error('Oops!'); }, @@ -39,13 +38,13 @@ module('RequestManager | Error Propagation', function () { assert.expect(4); const manager = new RequestManager(); const curryingHandler: Handler = { - request(context: Context, next: NextFn): Promise | Future { + request(context: RequestContext, next: NextFn): Promise | Future { assert.ok(true, 'catching handler triggered'); return next({ url: '/curried' }); }, }; const throwingHandler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { assert.ok(true, 'throwing handler triggered'); throw new Error('Oops!'); }, @@ -68,13 +67,13 @@ module('RequestManager | Error Propagation', function () { const manager = new RequestManager(); const catchingHandler: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.ok(true, 'catching handler triggered'); return await next({ url: '/curried' }); }, }; const throwingHandler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { assert.ok(true, 'throwing handler triggered'); throw new Error('Oops!'); }, @@ -97,13 +96,13 @@ module('RequestManager | Error Propagation', function () { const manager = new RequestManager(); const catchingHandler: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { assert.ok(true, 'catching handler triggered'); return await next({ url: '/curried' }); }, }; const throwingHandler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { assert.ok(true, 'throwing handler triggered'); throw new Error('Oops!'); }, diff --git a/tests/ember-data__request/tests/integration/graceful-dev-errors-test.ts b/tests/ember-data__request/tests/integration/graceful-dev-errors-test.ts index f228bde093a..bd29d92a8a3 100644 --- a/tests/ember-data__request/tests/integration/graceful-dev-errors-test.ts +++ b/tests/ember-data__request/tests/integration/graceful-dev-errors-test.ts @@ -1,6 +1,6 @@ +import type { Handler, NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; module('RequestManager | Graceful Errors', function () { @@ -118,7 +118,7 @@ module('RequestManager | Graceful Errors', function () { test('We error meaningfully for empty requests', async function (assert) { const manager = new RequestManager(); const handler: Handler = { - request(_context: Context, _next: NextFn): Promise { + request(_context: RequestContext, _next: NextFn): Promise { return Promise.resolve('done' as T); }, }; @@ -182,7 +182,7 @@ module('RequestManager | Graceful Errors', function () { test('We error meaningfully for invalid next', async function (assert) { const manager = new RequestManager(); const handler = { - request(req: Context, next: NextFn) { + request(req: RequestContext, next: NextFn) { return next(req.request); }, }; @@ -203,7 +203,7 @@ module('RequestManager | Graceful Errors', function () { test('We error meaningfully for misshapen requests', async function (assert) { const manager = new RequestManager(); const handler: Handler = { - request(_context: Context, _next: NextFn): Promise { + request(_context: RequestContext, _next: NextFn): Promise { return Promise.resolve('done' as T); }, }; diff --git a/tests/ember-data__request/tests/integration/graceful-dev-handler-errors-test.ts b/tests/ember-data__request/tests/integration/graceful-dev-handler-errors-test.ts index bc5a52c1eea..2d8ef02de74 100644 --- a/tests/ember-data__request/tests/integration/graceful-dev-handler-errors-test.ts +++ b/tests/ember-data__request/tests/integration/graceful-dev-handler-errors-test.ts @@ -1,6 +1,6 @@ +import type { Handler, NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; module('RequestManager | Graceful Handler Errors', function () { @@ -9,7 +9,7 @@ module('RequestManager | Graceful Handler Errors', function () { let called = false; let nextArg: unknown = undefined; const handler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { called = true; // @ts-expect-error return nextArg ? next(nextArg) : next(); @@ -68,7 +68,7 @@ module('RequestManager | Graceful Handler Errors', function () { let called = false; let nextArg: unknown = undefined; const handler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { called = true; // @ts-expect-error return nextArg ? next(nextArg) : next(); @@ -127,7 +127,7 @@ The following issues were found: let called = false; let nextArg: unknown = undefined; const handler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { called = true; // @ts-expect-error return nextArg ? next(nextArg) : next(); diff --git a/tests/ember-data__request/tests/integration/immutability-test.ts b/tests/ember-data__request/tests/integration/immutability-test.ts index 547607f181b..2011b00feb9 100644 --- a/tests/ember-data__request/tests/integration/immutability-test.ts +++ b/tests/ember-data__request/tests/integration/immutability-test.ts @@ -1,13 +1,13 @@ +import type { Handler, NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; module('RequestManager | Immutability', function () { test('RequestInfo passed to a handler is Immutable', async function (assert) { const manager = new RequestManager(); const handler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { // @ts-expect-error context.request.integrity = 'some val'; return Promise.resolve('hello' as T); @@ -29,7 +29,7 @@ module('RequestManager | Immutability', function () { test('Headers in RequestInfo passed to a handler are Immutable', async function (assert) { const manager = new RequestManager(); const handler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { context.request.headers!.append('house', 'home'); return Promise.resolve('hello' as T); }, @@ -50,7 +50,7 @@ module('RequestManager | Immutability', function () { test('Headers in RequestInfo passed to a handler may be edited after cloning', async function (assert) { const manager = new RequestManager(); const handler: Handler = { - request(context: Context, next: NextFn) { + request(context: RequestContext, next: NextFn) { const headers = new Headers(context.request.headers); headers.append('house', 'home'); // @ts-expect-error Types are wrong: Property 'entries' does not exist on type 'Headers'. diff --git a/tests/ember-data__request/tests/integration/response-currying-test.ts b/tests/ember-data__request/tests/integration/response-currying-test.ts index 47ed8f52c27..4c9f1d6d27e 100644 --- a/tests/ember-data__request/tests/integration/response-currying-test.ts +++ b/tests/ember-data__request/tests/integration/response-currying-test.ts @@ -1,6 +1,6 @@ +import type { Handler, NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; const IGNORED_HEADERS = new Set(['connection', 'keep-alive', 'content-length', 'date', 'etag', 'last-modified']); @@ -9,13 +9,13 @@ module('RequestManager | Response Currying', function () { test('We curry response when setResponse is not called', async function (assert) { const manager = new RequestManager(); const handler1: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await next(context.request); return response.content; }, }; const handler2: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await fetch(context.request.url!, context.request); context.setResponse(response); return response.json(); @@ -55,14 +55,14 @@ module('RequestManager | Response Currying', function () { test('We do not curry response when we call next multiple times', async function (assert) { const manager = new RequestManager(); const handler1: Handler = { - async request(context: Context, next: NextFn): Promise { + async request(context: RequestContext, next: NextFn): Promise { await next(context.request); await next(context.request); return (await next(context.request)).content; }, }; const handler2: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await fetch(context.request.url!, context.request); context.setResponse(response); return response.json(); @@ -78,12 +78,12 @@ module('RequestManager | Response Currying', function () { test('We curry when we return directly', async function (assert) { const manager = new RequestManager(); const handler1: Handler = { - async request(context: Context, next: NextFn): Promise { + async request(context: RequestContext, next: NextFn): Promise { return next(context.request) as unknown as Promise; }, }; const handler2: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await fetch(context.request.url!, context.request); context.setResponse(response); return response.json(); @@ -123,7 +123,7 @@ module('RequestManager | Response Currying', function () { test('We can intercept Response', async function (assert) { const manager = new RequestManager(); const handler1: Handler = { - async request(context: Context, next: NextFn): Promise { + async request(context: RequestContext, next: NextFn): Promise { const doc = await next(context.request); const response = Object.assign({}, doc.response, { ok: false }); @@ -133,7 +133,7 @@ module('RequestManager | Response Currying', function () { }, }; const handler2: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await fetch(context.request.url!, context.request); context.setResponse(response); return response.json(); @@ -174,7 +174,7 @@ module('RequestManager | Response Currying', function () { assert.expect(3); const manager = new RequestManager(); const handler1: Handler = { - async request(context: Context, next: NextFn): Promise { + async request(context: RequestContext, next: NextFn): Promise { const doc = await next(context.request); try { @@ -196,7 +196,7 @@ module('RequestManager | Response Currying', function () { }, }; const handler2: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await fetch(context.request.url!, context.request); context.setResponse(response); return response.json(); @@ -236,7 +236,7 @@ module('RequestManager | Response Currying', function () { test('We can set response to null', async function (assert) { const manager = new RequestManager(); const handler1: Handler = { - async request(context: Context, next: NextFn): Promise { + async request(context: RequestContext, next: NextFn): Promise { const doc = await next(context.request); context.setResponse(null); @@ -245,7 +245,7 @@ module('RequestManager | Response Currying', function () { }, }; const handler2: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await fetch(context.request.url!, context.request); context.setResponse(response); return response.json(); diff --git a/tests/ember-data__request/tests/integration/response-test.ts b/tests/ember-data__request/tests/integration/response-test.ts index 3291e1fe01b..1881b4a5f3b 100644 --- a/tests/ember-data__request/tests/integration/response-test.ts +++ b/tests/ember-data__request/tests/integration/response-test.ts @@ -1,6 +1,6 @@ +import type { Handler, NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; const IGNORED_HEADERS = new Set(['connection', 'keep-alive', 'content-length', 'date', 'etag', 'last-modified']); @@ -9,7 +9,7 @@ module('RequestManager | Response', function () { test('Handlers may set response via Response', async function (assert) { const manager = new RequestManager(); const handler: Handler = { - async request(context: Context, next: NextFn) { + async request(context: RequestContext, next: NextFn) { const response = await fetch(context.request.url!, context.request); context.setResponse(response); return response.json(); diff --git a/tests/ember-data__request/tests/integration/setup-test.ts b/tests/ember-data__request/tests/integration/setup-test.ts index 03dca9f8600..aa3816f1909 100644 --- a/tests/ember-data__request/tests/integration/setup-test.ts +++ b/tests/ember-data__request/tests/integration/setup-test.ts @@ -1,6 +1,6 @@ +import type { NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context as HandlerRequestContext } from '@ember-data/request/-private/context'; -import type { NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; module('RequestManager | Basic Setup', function () { @@ -19,7 +19,7 @@ module('RequestManager | Basic Setup', function () { let calls = 0; manager.use([ { - request(req: HandlerRequestContext, next: NextFn) { + request(req: RequestContext, next: NextFn) { calls++; return Promise.resolve('success!' as T); }, @@ -40,14 +40,14 @@ module('RequestManager | Basic Setup', function () { let callsB = 0; manager.use([ { - async request(req: HandlerRequestContext, next: NextFn) { + async request(req: RequestContext, next: NextFn) { calls++; const outcome = await next(req.request); return outcome.content; }, }, { - request(req: HandlerRequestContext, next: NextFn) { + request(req: RequestContext, next: NextFn) { callsB++; return Promise.resolve('success!' as T); }, @@ -68,7 +68,7 @@ module('RequestManager | Basic Setup', function () { let calls = 0; const handler = { - async request(req: HandlerRequestContext, next: NextFn) { + async request(req: RequestContext, next: NextFn) { calls++; if (calls === 2) { return Promise.resolve('success!' as T); diff --git a/tests/ember-data__request/tests/integration/stateful-handler-test.ts b/tests/ember-data__request/tests/integration/stateful-handler-test.ts index 1a8c1a1897f..a76d27f198d 100644 --- a/tests/ember-data__request/tests/integration/stateful-handler-test.ts +++ b/tests/ember-data__request/tests/integration/stateful-handler-test.ts @@ -4,9 +4,9 @@ import type { TestContext } from '@ember/test-helpers'; import Resolver from 'ember-resolver'; +import type { NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context as HandlerRequestContext } from '@ember-data/request/-private/context'; -import type { NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; import { setupTest } from '@warp-drive/diagnostic/ember'; @@ -33,7 +33,7 @@ module('RequestManager | Stateful Handlers', function (hooks) { class MyHandler { @service declare intl: { t: (key: string) => string }; - request(req: HandlerRequestContext, next: NextFn) { + request(req: RequestContext, next: NextFn) { calls++; return Promise.resolve(this.intl.t('success!') as T); } diff --git a/tests/ember-data__request/tests/integration/streams-test.ts b/tests/ember-data__request/tests/integration/streams-test.ts index 654772e9139..f3f13b47fa3 100644 --- a/tests/ember-data__request/tests/integration/streams-test.ts +++ b/tests/ember-data__request/tests/integration/streams-test.ts @@ -1,6 +1,6 @@ +import type { Future, Handler, NextFn } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Future, Handler, NextFn } from '@ember-data/request/-private/types'; +import type { RequestContext } from '@warp-drive/core-types/request'; import { module, test } from '@warp-drive/diagnostic'; module('RequestManager | Streams', function () { @@ -9,7 +9,7 @@ module('RequestManager | Streams', function () { const manager = new RequestManager(); const handler: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const result = await fetch(context.request.url!, context.request); if (result.body) { @@ -43,7 +43,7 @@ module('RequestManager | Streams', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const future = next(context.request); context.setStream(future.getStream()); @@ -53,7 +53,7 @@ module('RequestManager | Streams', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const result = await fetch(context.request.url!, context.request); if (result.body) { @@ -87,7 +87,7 @@ module('RequestManager | Streams', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const future = next(context.request); const stream = await future.getStream(); assert.true(stream instanceof ReadableStream, 'we receive the stream'); @@ -98,7 +98,7 @@ module('RequestManager | Streams', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const result = await fetch(context.request.url!, context.request); if (result.body) { @@ -132,14 +132,14 @@ module('RequestManager | Streams', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const future = next(context.request); return (await future).content; }, }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const result = await fetch(context.request.url!, context.request); if (result.body) { @@ -172,13 +172,13 @@ module('RequestManager | Streams', function () { assert.expect(2); const manager = new RequestManager(); const handler1: Handler = { - request(context: Context, next: NextFn): Promise | Future { + request(context: RequestContext, next: NextFn): Promise | Future { return next(context.request); }, }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const result = await fetch(context.request.url!, context.request); if (result.body) { @@ -212,7 +212,7 @@ module('RequestManager | Streams', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const a = await next(context.request); const b = await next(context.request); return a.content || b.content; @@ -220,7 +220,7 @@ module('RequestManager | Streams', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const result = await fetch(context.request.url!, context.request); if (result.body) { @@ -254,7 +254,7 @@ module('RequestManager | Streams', function () { const manager = new RequestManager(); const handler1: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { await next(context.request); await next(context.request); return next(context.request); @@ -262,7 +262,7 @@ module('RequestManager | Streams', function () { }; const handler2: Handler = { // @ts-expect-error - async request(context: Context, next: NextFn): Promise | Future { + async request(context: RequestContext, next: NextFn): Promise | Future { const result = await fetch(context.request.url!, context.request); if (result.body) { diff --git a/tests/ember-data__request/tsconfig.json b/tests/ember-data__request/tsconfig.json index 915e6879cc8..ba62fea52b7 100644 --- a/tests/ember-data__request/tsconfig.json +++ b/tests/ember-data__request/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,27 +7,55 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - + "baseUrl": ".", "experimentalDecorators": true, - // TODO: Reenable this "noImplicitAny": false, - - "noImplicitOverride": true, - + "noImplicitOverride": false, "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../../packages/diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../../packages/diagnostic/unstable-preview-types/*"], + "@warp-drive/holodeck": ["../../packages/holodeck/unstable-preview-types"], + "@warp-drive/holodeck/*": ["../../packages/holodeck/unstable-preview-types/*"] + } }, - "references": [{ "path": "../../packages/request" }, { "path": "../../packages/request-utils" }] + "references": [ + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/build-config" + }, + { + "path": "../../packages/diagnostic" + }, + { + "path": "../../packages/holodeck" + } + ] } diff --git a/tests/ember-data__serializer/.eslintrc.cjs b/tests/ember-data__serializer/.eslintrc.cjs deleted file mode 100644 index df0739f45fe..00000000000 --- a/tests/ember-data__serializer/.eslintrc.cjs +++ /dev/null @@ -1,36 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - qunit.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: ['@ember/object'], - }), - ], -}; diff --git a/tests/ember-data__serializer/app/services/store.ts b/tests/ember-data__serializer/app/services/store.ts index aa33446693d..a6b0de4bebc 100644 --- a/tests/ember-data__serializer/app/services/store.ts +++ b/tests/ember-data__serializer/app/services/store.ts @@ -13,8 +13,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 { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { ModelSchema } from '@ember-data/store/-types/q/ds-model'; +import type { CacheCapabilitiesManager, ModelSchema } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { TypeFromInstance } from '@warp-drive/core-types/record'; diff --git a/tests/ember-data__serializer/ember-cli-build.js b/tests/ember-data__serializer/ember-cli-build.js index bd6a82673e4..07003480e86 100644 --- a/tests/ember-data__serializer/ember-cli-build.js +++ b/tests/ember-data__serializer/ember-cli-build.js @@ -1,31 +1,29 @@ -/* eslint n/no-unpublished-require: 'off' */ - 'use strict'; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - const app = new EmberApp(defaults, { - // Add options here +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { + babel: { + // this ensures that the same build-time code stripping that is done + // for library packages is also done for our tests and dummy app + plugins: [...macros()], + }, 'ember-cli-babel': { throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, + sourcemaps: { + enabled: false, + }, }); - // Use `app.import` to add additional libraries to the generated - // output files. - // - // If you need to use different assets in different - // environments, specify an object as the first parameter. That - // object's keys should be the environment name and the values - // should be the asset to use in that environment. - // - // If the library that you are including contains AMD or ES6 - // modules that you would like to import into your application - // please specify an object with the list of modules as keys - // along with the exports of each module as its value. + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); return app.toTree(); }; diff --git a/tests/ember-data__serializer/eslint.config.mjs b/tests/ember-data__serializer/eslint.config.mjs new file mode 100644 index 00000000000..e0a6b3e98f2 --- /dev/null +++ b/tests/ember-data__serializer/eslint.config.mjs @@ -0,0 +1,38 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + js.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // browser (js/ts) ================ + typescript.browser({ + files: ['**/*.ts', '**/*.gts'], + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs({ + files: ['ember-cli-build.js'], + }), + + // Test Support ================ + qunit.ember({ + allowedImports: ['@ember/object'], + }), +]; diff --git a/tests/ember-data__serializer/package.json b/tests/ember-data__serializer/package.json index a5595d095e4..ed6a832c13f 100644 --- a/tests/ember-data__serializer/package.json +++ b/tests/ember-data__serializer/package.json @@ -16,11 +16,11 @@ }, "scripts": { "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "start": "ember serve", "test": "ember test --test-port=0 --path=dist-test", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@ember-data/adapter": { @@ -56,6 +56,9 @@ "@warp-drive/core-types": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@ember/string": { "injected": true }, @@ -83,10 +86,12 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-auto-import": "^2.7.2", "ember-cli": "~5.7.0", "ember-cli-babel": "^8.2.0", @@ -106,7 +111,7 @@ "webpack": "^5.91.0" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember": { "edition": "octane" diff --git a/tests/ember-data__serializer/testem.js b/tests/ember-data__serializer/testem.js index a9df5e60abb..34bdb125e60 100644 --- a/tests/ember-data__serializer/testem.js +++ b/tests/ember-data__serializer/testem.js @@ -1,6 +1,5 @@ -const customDotReporter = require('@ember-data/unpublished-test-infra/src/testem/custom-dot-reporter'); +const customDotReporter = require('@ember-data/unpublished-test-infra/testem/custom-dot-reporter'); -// eslint-disable-next-line no-console console.log(`\n\nLaunching with ${process.env.TESTEM_CI_LAUNCHER || 'Chrome'}\n\n`); module.exports = { diff --git a/tests/ember-data__serializer/tests/integration/push-payload-test.js b/tests/ember-data__serializer/tests/integration/push-payload-test.js index c870217c331..ae4514d4259 100644 --- a/tests/ember-data__serializer/tests/integration/push-payload-test.js +++ b/tests/ember-data__serializer/tests/integration/push-payload-test.js @@ -106,7 +106,7 @@ module('Serializer Contract | pushPayload method forwards to Serializer#pushPayl }, }, }); - }, `Assertion Failed: You cannot use 'store.pushPayload(, )' unless the serializer for 'person' defines 'pushPayload'`); + }, `You cannot use 'store.pushPayload(, )' unless the serializer for 'person' defines 'pushPayload'`); } ); }); diff --git a/tests/ember-data__serializer/tests/test-helper.js b/tests/ember-data__serializer/tests/test-helper.js index bffc9f847f4..782af4b5e07 100644 --- a/tests/ember-data__serializer/tests/test-helper.js +++ b/tests/ember-data__serializer/tests/test-helper.js @@ -5,7 +5,7 @@ import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; -import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts'; +import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts/index'; import Application from '../app'; import config from '../config/environment'; diff --git a/tests/ember-data__serializer/tsconfig.json b/tests/ember-data__serializer/tsconfig.json index e39fd4da358..ddaf75c71b7 100644 --- a/tests/ember-data__serializer/tsconfig.json +++ b/tests/ember-data__serializer/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,24 +7,88 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/adapter": ["../../packages/adapter/unstable-preview-types"], + "@ember-data/adapter/*": ["../../packages/adapter/unstable-preview-types/*"], + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/adapter" + }, + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/build-config" + } + ] } diff --git a/tests/embroider-basic-compat/.eslintrc.cjs b/tests/embroider-basic-compat/.eslintrc.cjs deleted file mode 100644 index 9d47a37caab..00000000000 --- a/tests/embroider-basic-compat/.eslintrc.cjs +++ /dev/null @@ -1,43 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.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/application'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults({ - rules: { - // TODO: Enable these once we get types working properly - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - }, - }), - qunit.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: [], - }), - ], -}; diff --git a/tests/embroider-basic-compat/app/adapters/application.ts b/tests/embroider-basic-compat/app/adapters/application.ts index f88acbac13d..091f5ab1225 100644 --- a/tests/embroider-basic-compat/app/adapters/application.ts +++ b/tests/embroider-basic-compat/app/adapters/application.ts @@ -1,6 +1,4 @@ -// @ts-expect-error import RESTAdapter from '@ember-data/adapter/rest'; -// @ts-expect-error import type { SnapshotRecordArray } from '@ember-data/legacy-compat/-private'; export default class ApplicationAdapter extends RESTAdapter { diff --git a/tests/embroider-basic-compat/app/models/user.ts b/tests/embroider-basic-compat/app/models/user.ts index f253c222fff..33d0be8ad43 100644 --- a/tests/embroider-basic-compat/app/models/user.ts +++ b/tests/embroider-basic-compat/app/models/user.ts @@ -1,4 +1,3 @@ -// @ts-expect-error import Model, { attr } from '@ember-data/model'; export default class User extends Model { diff --git a/tests/embroider-basic-compat/ember-cli-build.js b/tests/embroider-basic-compat/ember-cli-build.js index 01b71dcd385..503544fb6f5 100644 --- a/tests/embroider-basic-compat/ember-cli-build.js +++ b/tests/embroider-basic-compat/ember-cli-build.js @@ -1,29 +1,27 @@ -/* eslint n/no-unpublished-require: 'off' */ - 'use strict'; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const plugins = macros(); + const app = new EmberApp(defaults, { - // Add options here + babel: { + // this ensures that the same build-time code stripping that is done + // for library packages is also done for our tests and dummy app + plugins, + }, 'ember-cli-babel': { + throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, }); - // Use `app.import` to add additional libraries to the generated - // output files. - // - // If you need to use different assets in different - // environments, specify an object as the first parameter. That - // object's keys should be the environment name and the values - // should be the asset to use in that environment. - // - // If the library that you are including contains AMD or ES6 - // modules that you would like to import into your application - // please specify an object with the list of modules as keys - // along with the exports of each module as its value. + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); const { Webpack } = require('@embroider/webpack'); return require('@embroider/compat').compatBuild(app, Webpack, { diff --git a/tests/embroider-basic-compat/eslint.config.mjs b/tests/embroider-basic-compat/eslint.config.mjs new file mode 100644 index 00000000000..c9815c47c47 --- /dev/null +++ b/tests/embroider-basic-compat/eslint.config.mjs @@ -0,0 +1,32 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application'], + rules: { + // TODO: Enable these once we get types working properly + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + }, + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + qunit.ember(), +]; diff --git a/tests/embroider-basic-compat/package.json b/tests/embroider-basic-compat/package.json index ede855250a4..7a7ed532295 100644 --- a/tests/embroider-basic-compat/package.json +++ b/tests/embroider-basic-compat/package.json @@ -16,24 +16,50 @@ }, "scripts": { "build": "ember build", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "start": "ember serve", "test:embroider": "ember test --test-port=0", - "_syncPnpm": "bun run sync-dependencies-meta-injected" - }, - "dependencies": { - "@ember/string": "3.1.1", - "ember-auto-import": "^2.7.2", - "ember-data": "workspace:5.4.0-alpha.64", - "ember-inflector": "^4.0.2", - "pnpm-sync-dependencies-meta-injected": "0.0.10", - "webpack": "^5.91.0" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, + "dependencies": {}, "dependenciesMeta": { "ember-data": { "injected": true }, + "@ember-data/tracking": { + "injected": true + }, + "@ember-data/store": { + "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/adapter": { + "injected": true + }, + "@ember-data/graph": { + "injected": true + }, + "@ember-data/debug": { + "injected": true + }, + "@ember-data/model": { + "injected": true + }, + "@ember-data/json-api": { + "injected": true + }, + "@ember-data/request-utils": { + "injected": true + }, + "@ember-data/legacy-compat": { + "injected": true + }, + "@ember-data/serializer": { + "injected": true + }, "@ember-data/unpublished-test-infra": { "injected": true }, @@ -42,6 +68,12 @@ }, "ember-inflector": { "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@warp-drive/build-config": { + "injected": true } }, "devDependencies": { @@ -50,11 +82,31 @@ "@ember-data/unpublished-test-infra": "workspace:5.4.0-alpha.64", "@ember/optional-features": "^2.1.0", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/compat": "^3.4.7", "@embroider/core": "^3.4.7", "@embroider/webpack": "^3.2.3", + "@ember/string": "3.1.1", + "ember-auto-import": "^2.7.2", + "ember-data": "workspace:5.4.0-alpha.64", + "ember-inflector": "^4.0.2", + "pnpm-sync-dependencies-meta-injected": "0.0.10", + "webpack": "^5.91.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", + "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/adapter": "workspace:5.4.0-alpha.64", + "@ember-data/debug": "workspace:5.4.0-alpha.64", + "@ember-data/graph": "workspace:5.4.0-alpha.64", + "@ember-data/json-api": "workspace:5.4.0-alpha.64", + "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", + "@ember-data/model": "workspace:5.4.0-alpha.64", + "@ember-data/request-utils": "workspace:5.4.0-alpha.64", + "@ember-data/serializer": "workspace:5.4.0-alpha.64", + "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "ember-cli": "~5.7.0", "ember-cli-babel": "^8.2.0", @@ -75,7 +127,7 @@ "typescript": "^5.4.5" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember": { "edition": "octane" diff --git a/tests/embroider-basic-compat/testem.js b/tests/embroider-basic-compat/testem.js index a9df5e60abb..34bdb125e60 100644 --- a/tests/embroider-basic-compat/testem.js +++ b/tests/embroider-basic-compat/testem.js @@ -1,6 +1,5 @@ -const customDotReporter = require('@ember-data/unpublished-test-infra/src/testem/custom-dot-reporter'); +const customDotReporter = require('@ember-data/unpublished-test-infra/testem/custom-dot-reporter'); -// eslint-disable-next-line no-console console.log(`\n\nLaunching with ${process.env.TESTEM_CI_LAUNCHER || 'Chrome'}\n\n`); module.exports = { diff --git a/tests/embroider-basic-compat/tsconfig.json b/tests/embroider-basic-compat/tsconfig.json index e39fd4da358..4d54bd9854f 100644 --- a/tests/embroider-basic-compat/tsconfig.json +++ b/tests/embroider-basic-compat/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,24 +7,98 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "ember-data": ["../../packages/-ember-data/unstable-preview-types"], + "ember-data/*": ["../../packages/-ember-data/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/adapter": ["../../packages/adapter/unstable-preview-types"], + "@ember-data/adapter/*": ["../../packages/adapter/unstable-preview-types/*"], + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/serializer": ["../../packages/serializer/unstable-preview-types"], + "@ember-data/serializer/*": ["../../packages/serializer/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/-ember-data" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/adapter" + }, + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/serializer" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/build-config" + } + ] } diff --git a/tests/example-json-api/.eslintrc.cjs b/tests/example-json-api/.eslintrc.cjs deleted file mode 100644 index b9660bad7f1..00000000000 --- a/tests/example-json-api/.eslintrc.cjs +++ /dev/null @@ -1,45 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.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/application', - '@ember/debug', - '@ember/routing/route', - '@ember/service', - '@glimmer/component', - '@glimmer/tracking', - ], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults({ - files: ['./server/**/*.{js,ts}'], - }), - typescript.defaults(), - qunit.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: [], - }), - ], -}; diff --git a/tests/example-json-api/app/components/book-list.ts b/tests/example-json-api/app/components/book-list.ts index bed74d8bf40..91dd8529d04 100644 --- a/tests/example-json-api/app/components/book-list.ts +++ b/tests/example-json-api/app/components/book-list.ts @@ -5,7 +5,7 @@ import { cached, tracked } from '@glimmer/tracking'; import { query } from '@ember-data/json-api/request'; import { filterEmpty } from '@ember-data/request-utils'; import type Store from '@ember-data/store'; -import type { Document } from '@ember-data/store/-private/document'; +import type { Document } from '@ember-data/store'; import type Book from '../models/book'; import type { ApiPage } from '../utils/pagination-links'; diff --git a/tests/example-json-api/app/components/infinite-books.ts b/tests/example-json-api/app/components/infinite-books.ts index 07da7e93729..6af8d5f4bdc 100644 --- a/tests/example-json-api/app/components/infinite-books.ts +++ b/tests/example-json-api/app/components/infinite-books.ts @@ -3,7 +3,7 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import type Store from '@ember-data/store'; -import type { Document } from '@ember-data/store/-private/document'; +import type { Document } from '@ember-data/store'; import type Book from '../models/book'; diff --git a/tests/example-json-api/app/components/legacy-infinite-books.ts b/tests/example-json-api/app/components/legacy-infinite-books.ts index 151b40a1aea..fd05a36b378 100644 --- a/tests/example-json-api/app/components/legacy-infinite-books.ts +++ b/tests/example-json-api/app/components/legacy-infinite-books.ts @@ -3,27 +3,27 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import type Store from '@ember-data/store'; -import type { Collection } from '@ember-data/store/-private/record-arrays/identifier-array'; +import type { CollectionRecordArray } from '@ember-data/store/-private'; import type Book from '../models/book'; export interface InfiniteBookSignature { Element: HTMLUListElement; Args: { - allBooks: Collection; + allBooks: CollectionRecordArray; }; } class Pages { - @tracked pages: Collection[] = []; + @tracked pages: CollectionRecordArray[] = []; @tracked data: T[] = []; - constructor(page: Collection) { + constructor(page: CollectionRecordArray) { this.pages = [page]; this.data = page.slice(); } - addPage(page: Collection) { + addPage(page: CollectionRecordArray) { this.pages.push(page); this.data = this.data.concat(page); } diff --git a/tests/example-json-api/app/routes/application.ts b/tests/example-json-api/app/routes/application.ts index dcbc3d50fa3..f24820014b0 100644 --- a/tests/example-json-api/app/routes/application.ts +++ b/tests/example-json-api/app/routes/application.ts @@ -3,7 +3,7 @@ import { service } from '@ember/service'; import { query } from '@ember-data/json-api/request'; import type Store from '@ember-data/store'; -import type { Document } from '@ember-data/store/-private/document'; +import type { Document } from '@ember-data/store'; import type Author from '../models/author'; import type Book from '../models/book'; diff --git a/tests/example-json-api/ember-cli-build.js b/tests/example-json-api/ember-cli-build.js index e6790e9743c..7b83a1e3091 100644 --- a/tests/example-json-api/ember-cli-build.js +++ b/tests/example-json-api/ember-cli-build.js @@ -2,31 +2,24 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - emberData: { - compatWith: '99.0', - }, babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith: '99.0', - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, - 'ember-cli-terser': { - exclude: ['assets/dummy.js', 'assets/tests.js', 'assets/test-support.js'], - }, + }); + + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, }); const { Webpack } = require('@embroider/webpack'); diff --git a/tests/example-json-api/eslint.config.mjs b/tests/example-json-api/eslint.config.mjs new file mode 100644 index 00000000000..6dc6ef46e81 --- /dev/null +++ b/tests/example-json-api/eslint.config.mjs @@ -0,0 +1,33 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['app', 'tests'], + allowedImports: [ + '@ember/application', + '@ember/debug', + '@ember/routing/route', + '@ember/service', + '@glimmer/component', + '@glimmer/tracking', + ], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + qunit.ember(), +]; diff --git a/tests/example-json-api/package.json b/tests/example-json-api/package.json index 2da421a7f73..73d0b02d978 100644 --- a/tests/example-json-api/package.json +++ b/tests/example-json-api/package.json @@ -17,10 +17,10 @@ "scripts": { "build": "ember build", "start": "ember test --port=0 --serve --no-launch", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "test:examples": "ember test --test-port=0", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "ember-data": { @@ -32,9 +32,6 @@ "@ember-data/graph": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/store": { "injected": true }, @@ -77,7 +74,6 @@ "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", "@ember-data/model": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", @@ -87,6 +83,7 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/compat": "^3.4.7", "@embroider/core": "^3.4.7", "@embroider/webpack": "^3.2.3", @@ -131,7 +128,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/example-json-api/server/index.js b/tests/example-json-api/server/index.js index f28263c054f..385ff70efcb 100644 --- a/tests/example-json-api/server/index.js +++ b/tests/example-json-api/server/index.js @@ -10,7 +10,6 @@ // }; module.exports = function (app) { - // eslint-disable-next-line no-console console.log(`\n\n\t💎 mounting mock server\n\n`); let mocks; try { @@ -21,7 +20,6 @@ module.exports = function (app) { return require(realPath); }); } catch (e) { - // eslint-disable-next-line no-console console.error(e); return; } diff --git a/tests/example-json-api/testem.js b/tests/example-json-api/testem.js index 491eb29ca44..5ddb8e6ce1a 100644 --- a/tests/example-json-api/testem.js +++ b/tests/example-json-api/testem.js @@ -1,6 +1,5 @@ -const customDotReporter = require('@ember-data/unpublished-test-infra/src/testem/custom-dot-reporter'); +const customDotReporter = require('@ember-data/unpublished-test-infra/testem/custom-dot-reporter'); -// eslint-disable-next-line no-console console.log(`\n\nLaunching with ${process.env.TESTEM_CI_LAUNCHER || 'Chrome'}\n\n`); module.exports = { diff --git a/tests/example-json-api/tests/test-helper.js b/tests/example-json-api/tests/test-helper.js index ad0e2125174..893c2d16b7d 100644 --- a/tests/example-json-api/tests/test-helper.js +++ b/tests/example-json-api/tests/test-helper.js @@ -5,7 +5,7 @@ import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; -import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts'; +import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts/index'; import Application from '../app'; import config from '../config/environment'; diff --git a/tests/example-json-api/tsconfig.json b/tests/example-json-api/tsconfig.json index e39fd4da358..65311c35698 100644 --- a/tests/example-json-api/tsconfig.json +++ b/tests/example-json-api/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,24 +7,83 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "ember-data": ["../../packages/-ember-data/unstable-preview-types"], + "ember-data/*": ["../../packages/-ember-data/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/-ember-data" + } + ] } diff --git a/tests/fastboot/.ember-cli b/tests/fastboot/.ember-cli deleted file mode 100644 index ee64cfed2a8..00000000000 --- a/tests/fastboot/.ember-cli +++ /dev/null @@ -1,9 +0,0 @@ -{ - /** - Ember CLI sends analytics information by default. The data is completely - anonymous, but there are times when you might want to disable this behavior. - - Setting `disableAnalytics` to true will prevent any data from being sent. - */ - "disableAnalytics": false -} diff --git a/tests/fastboot/.eslintrc.cjs b/tests/fastboot/.eslintrc.cjs deleted file mode 100644 index 8d6aa00ee89..00000000000 --- a/tests/fastboot/.eslintrc.cjs +++ /dev/null @@ -1,45 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.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/application', '@ember/routing/route', '@ember/service'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults({ - files: ['./config/fastboot.js', './config/fastboot-testing.js'], - }), - typescript.defaults({ - rules: { - // TODO: Enable these once we get types working properly - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - }, - }), - qunit.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: ['@ember/object'], - }), - ], -}; diff --git a/tests/fastboot/.gitignore b/tests/fastboot/.gitignore deleted file mode 100644 index c40a1b2aba3..00000000000 --- a/tests/fastboot/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist/ -/tmp/ - -# dependencies -/bower_components/ -/node_modules/ - -# misc -/.env* -/.pnp* -/.sass-cache -/connect.lock -/coverage/ -/libpeerconnection.log -/npm-debug.log* -/testem.log -/yarn-error.log - -# ember-try -/.node_modules.ember-try/ -/bower.json.ember-try -/package.json.ember-try diff --git a/tests/fastboot/app/adapters/application.ts b/tests/fastboot/app/adapters/application.ts index f88acbac13d..3420114fc41 100644 --- a/tests/fastboot/app/adapters/application.ts +++ b/tests/fastboot/app/adapters/application.ts @@ -1,6 +1,5 @@ // @ts-expect-error import RESTAdapter from '@ember-data/adapter/rest'; -// @ts-expect-error import type { SnapshotRecordArray } from '@ember-data/legacy-compat/-private'; export default class ApplicationAdapter extends RESTAdapter { diff --git a/tests/fastboot/app/models/person.js b/tests/fastboot/app/models/person.ts similarity index 58% rename from tests/fastboot/app/models/person.js rename to tests/fastboot/app/models/person.ts index 8255ebebbe3..11eb49380ef 100644 --- a/tests/fastboot/app/models/person.js +++ b/tests/fastboot/app/models/person.ts @@ -1,14 +1,16 @@ +import type { AsyncBelongsTo, AsyncHasMany } from '@ember-data/model'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; +import type { ResourceType } from '@warp-drive/core-types/symbols'; export default class Person extends Model { @attr() - name; + declare name: string; @hasMany('person', { async: true, inverse: 'parent' }) - children; + declare children: AsyncHasMany; @belongsTo('person', { async: true, inverse: 'children' }) - parent; + declare parent: AsyncBelongsTo; get parentId() { return this.belongsTo('parent').id(); @@ -18,4 +20,6 @@ export default class Person extends Model { const { id, name, parentId } = this; return { id, name, parentId }; } + + declare [ResourceType]: 'person'; } diff --git a/tests/fastboot/app/routes/index.js b/tests/fastboot/app/routes/index.js deleted file mode 100644 index e2f49b7326d..00000000000 --- a/tests/fastboot/app/routes/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import Route from '@ember/routing/route'; -import { inject as service } from '@ember/service'; - -import { buildTree } from 'ember-simple-tree/utils/tree'; - -export default class IndexRoute extends Route { - @service store; - - async model() { - const people = await this.store.findAll('person'); - const tree = buildTree(people.map((person) => person.toNode())); - return tree; - } -} diff --git a/tests/fastboot/app/routes/index.ts b/tests/fastboot/app/routes/index.ts new file mode 100644 index 00000000000..0666a7f7452 --- /dev/null +++ b/tests/fastboot/app/routes/index.ts @@ -0,0 +1,20 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; + +// @ts-expect-error untyped +import { buildTree } from 'ember-simple-tree/utils/tree'; + +import type Person from '../models/person'; +import type Store from '../services/store'; + +export default class IndexRoute extends Route { + @service declare store: Store; + + override async model() { + const people = await this.store.findAll('person'); + const tree = buildTree(people.map((person) => person.toNode())); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return tree; + } +} diff --git a/tests/fastboot/app/services/store.js b/tests/fastboot/app/services/store.ts similarity index 100% rename from tests/fastboot/app/services/store.js rename to tests/fastboot/app/services/store.ts diff --git a/tests/fastboot/ember-cli-build.js b/tests/fastboot/ember-cli-build.js index 85b2c4fea09..b4f794466fe 100644 --- a/tests/fastboot/ember-cli-build.js +++ b/tests/fastboot/ember-cli-build.js @@ -1,29 +1,26 @@ -/* eslint n/no-unpublished-require: 'off' */ - 'use strict'; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - // Add options here + babel: { + // this ensures that the same build-time code stripping that is done + // for library packages is also done for our tests and dummy app + plugins: [...macros()], + }, 'ember-cli-babel': { + throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, }); - // Use `app.import` to add additional libraries to the generated - // output files. - // - // If you need to use different assets in different - // environments, specify an object as the first parameter. That - // object's keys should be the environment name and the values - // should be the asset to use in that environment. - // - // If the library that you are including contains AMD or ES6 - // modules that you would like to import into your application - // please specify an object with the list of modules as keys - // along with the exports of each module as its value. + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); return app.toTree(); }; diff --git a/tests/fastboot/eslint.config.mjs b/tests/fastboot/eslint.config.mjs new file mode 100644 index 00000000000..b085eaadcf2 --- /dev/null +++ b/tests/fastboot/eslint.config.mjs @@ -0,0 +1,44 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js) ================ + js.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/routing/route', '@ember/application', '@ember/service'], + }), + + // browser (js/ts) ================ + typescript.browser({ + files: ['**/*.ts', '**/*.gts'], + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/routing/route', '@ember/application', '@ember/service'], + rules: { + // TODO: Enable these once we get types working properly + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + }, + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs({ + files: ['config/fastboot.js', 'config/fastboot-testing.js'], + }), + + // Test Support ================ + qunit.ember({ + allowedImports: ['@ember/object'], + }), +]; diff --git a/tests/fastboot/package.json b/tests/fastboot/package.json index 16a8299126e..d2ce115fb3e 100644 --- a/tests/fastboot/package.json +++ b/tests/fastboot/package.json @@ -16,11 +16,11 @@ }, "scripts": { "build": "ember build", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "start": "ember serve", "test:fastboot": "ember test --test-port=0", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependencies": { "@ember-data/unpublished-test-infra": "workspace:5.4.0-alpha.64", @@ -43,6 +43,27 @@ }, "ember-inflector": { "injected": true + }, + "@ember-data/request": { + "injected": true + }, + "@ember-data/store": { + "injected": true + }, + "@ember-data/model": { + "injected": true + }, + "@ember-data/tracking": { + "injected": true + }, + "@warp-drive/core-types": { + "injected": true + }, + "@warp-drive/build-config": { + "injected": true + }, + "@ember-data/legacy-compat": { + "injected": true } }, "devDependencies": { @@ -50,9 +71,17 @@ "@babel/runtime": "^7.24.4", "@ember/optional-features": "^2.1.0", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", + "@ember-data/request": "workspace:5.4.0-alpha.64", + "@ember-data/store": "workspace:5.4.0-alpha.64", + "@ember-data/model": "workspace:5.4.0-alpha.64", + "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", + "@ember-data/tracking": "workspace:5.4.0-alpha.64", + "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-cli": "~5.7.0", "ember-cli-babel": "^8.2.0", "ember-cli-dependency-checker": "^3.3.2", @@ -73,7 +102,7 @@ "typescript": "^5.4.5" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember": { "edition": "octane" diff --git a/tests/fastboot/testem.js b/tests/fastboot/testem.js index a9df5e60abb..34bdb125e60 100644 --- a/tests/fastboot/testem.js +++ b/tests/fastboot/testem.js @@ -1,6 +1,5 @@ -const customDotReporter = require('@ember-data/unpublished-test-infra/src/testem/custom-dot-reporter'); +const customDotReporter = require('@ember-data/unpublished-test-infra/testem/custom-dot-reporter'); -// eslint-disable-next-line no-console console.log(`\n\nLaunching with ${process.env.TESTEM_CI_LAUNCHER || 'Chrome'}\n\n`); module.exports = { diff --git a/tests/fastboot/tsconfig.json b/tests/fastboot/tsconfig.json index c5dd9bc183f..5a2bbbd3aa9 100644 --- a/tests/fastboot/tsconfig.json +++ b/tests/fastboot/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*", "types/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,24 +7,68 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "ember-data": ["../../packages/-ember-data/unstable-preview-types"], + "ember-data/*": ["../../packages/-ember-data/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"] + } }, - "references": [] + "references": [ + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/-ember-data" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/build-config" + }, + { + "path": "../../packages/legacy-compat" + } + ] } diff --git a/tests/full-data-asset-size-app/ember-cli-build.js b/tests/full-data-asset-size-app/ember-cli-build.js index 48fa8bb7d62..7da2fae3da6 100644 --- a/tests/full-data-asset-size-app/ember-cli-build.js +++ b/tests/full-data-asset-size-app/ember-cli-build.js @@ -1,9 +1,10 @@ -/* eslint-disable n/no-unpublished-require */ 'use strict'; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); const terserSettings = { enabled: true, exclude: ['assets/main-test-app.js', 'assets/tests.js', 'assets/test-support.js'], @@ -31,39 +32,28 @@ module.exports = function (defaults) { }, }; - let config = { - compatWith: '99', - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }; - let app = new EmberApp(defaults, { - emberData: config, + const app = new EmberApp(defaults, { babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [...require('@ember-data/private-build-infra/src/debug-macros')(config)], - }, - 'ember-cli-babel': { - throwUnlessParallelizable: true, - includeExternalHelpers: true, + plugins: [...macros()], }, fingerprint: { enabled: false, }, 'ember-cli-terser': terserSettings, - '@embroider/macros': { - setConfig: { - '@ember-data/store': { - polyfillUUID: false, - }, - }, + 'ember-cli-babel': { + throwUnlessParallelizable: true, + enableTypeScriptTransform: true, }, sourcemaps: { enabled: false, }, }); + setConfig(app, __dirname, { + compatWith: '99.0', + }); + return app.toTree(); }; diff --git a/tests/full-data-asset-size-app/package.json b/tests/full-data-asset-size-app/package.json index dd8acc70ac9..d76a412b43c 100644 --- a/tests/full-data-asset-size-app/package.json +++ b/tests/full-data-asset-size-app/package.json @@ -17,15 +17,12 @@ "scripts": { "build": "ember build", "start": "ember serve", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "ember-data": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember/string": { "injected": true } @@ -33,7 +30,6 @@ "devDependencies": { "@babel/core": "^7.24.4", "@babel/runtime": "^7.24.4", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@glimmer/component": "^1.1.2", @@ -45,6 +41,7 @@ "ember-cli-htmlbars": "^6.3.0", "ember-cli-terser": "^4.0.2", "ember-data": "workspace:5.4.0-alpha.64", + "@ember/test-waiters": "^3.1.0", "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^1.0.0", "ember-resolver": "^11.0.1", @@ -57,7 +54,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/main/.eslintrc.cjs b/tests/main/.eslintrc.cjs deleted file mode 100644 index 5a7003b89fe..00000000000 --- a/tests/main/.eslintrc.cjs +++ /dev/null @@ -1,77 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.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/application', '@ember/routing/route', '@ember/service'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - // files converted to strict must pass these rules before they can be removed from - // the files list here - // see https://github.com/emberjs/data/issues/6233#issuecomment-849279594 - typescript.defaults({ - files: [ - './tests/helpers/accessors.ts', - './tests/integration/identifiers/configuration-test.ts', - './tests/integration/identifiers/new-records-test.ts', - // './tests/integration/identifiers/polymorphic-scenarios-test.ts', - './tests/integration/identifiers/record-identifier-for-test.ts', - './tests/integration/identifiers/scenarios-test.ts', - './tests/integration/model-errors-test.ts', - './tests/integration/record-data/record-data-errors-test.ts', - './tests/integration/record-data/record-data-state-test.ts', - './tests/integration/record-data/store-wrapper-test.ts', - './tests/integration/relationships/rollback-test.ts', - './tests/integration/request-state-service-test.ts', - './tests/unit/custom-class-support/custom-class-model-test.ts', - ], - rules: { - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - }, - }), - qunit.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: [ - '@ember/application', - '@ember/array', - '@ember/array/proxy', - '@ember/component', - '@ember/component/helper', - '@ember/controller', - '@ember/object', - '@ember/object/computed', - '@ember/object/mixin', - '@ember/owner', - '@ember/service', - '@ember/string', - '@glimmer/component', - 'ember-inflector', - ], - }), - ], -}; diff --git a/tests/main/config/ember-try.js b/tests/main/config/ember-try.js index b5b96aa1674..4a1f8f6b186 100644 --- a/tests/main/config/ember-try.js +++ b/tests/main/config/ember-try.js @@ -35,10 +35,8 @@ module.exports = function () { name: 'ember-lts-3.28', npm: { devDependencies: { - 'ember-qunit': '^6.2.0', - '@ember/test-helpers': '^2.9.4', 'ember-source': '~3.28.0', - 'ember-cli': '~4.12.0', + 'ember-cli': '~4.12.2', }, }, }, diff --git a/tests/main/config/environment.js b/tests/main/config/environment.js index 24a4a629a80..019a72e058e 100644 --- a/tests/main/config/environment.js +++ b/tests/main/config/environment.js @@ -10,7 +10,6 @@ module.exports = function (environment) { EmberENV: { RAISE_ON_DEPRECATION: false, }, - ASSERT_ALL_DEPRECATIONS: process.env.ASSERT_ALL_DEPRECATIONS === 'true', APP: { // Here you can pass flags/options to your application instance diff --git a/tests/main/ember-cli-build.js b/tests/main/ember-cli-build.js index a5dbd5f2ca9..3cba8b6cfc9 100644 --- a/tests/main/ember-cli-build.js +++ b/tests/main/ember-cli-build.js @@ -2,10 +2,12 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const isTest = process.env.EMBER_CLI_TEST_COMMAND; const isProd = process.env.EMBER_ENV === 'production'; - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null; const terserSettings = { exclude: ['assets/main-test-app.js', 'assets/tests.js', 'assets/test-support.js'], @@ -37,52 +39,25 @@ module.exports = function (defaults) { terserSettings.enabled = false; } - const config = { - compatWith, - includeDataAdapterInProduction: true, - includeDataAdapter: true, - debug: { - LOG_PAYLOADS: process.env.DEBUG_DATA ? true : false, - LOG_OPERATIONS: process.env.DEBUG_DATA ? true : false, - LOG_MUTATIONS: process.env.DEBUG_DATA ? true : false, - LOG_NOTIFICATIONS: process.env.DEBUG_DATA ? true : false, - LOG_REQUESTS: process.env.DEBUG_DATA ? true : false, - LOG_REQUEST_STATUS: process.env.DEBUG_DATA ? true : false, - LOG_IDENTIFIERS: process.env.DEBUG_DATA ? true : false, - LOG_GRAPH: process.env.DEBUG_DATA ? true : false, - LOG_INSTANCE_CACHE: process.env.DEBUG_DATA ? true : false, - }, - deprecations: require('@ember-data/private-build-infra/src/deprecations')(compatWith || null), - features: require('@ember-data/private-build-infra/src/features')(isProd), - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }; - config.deprecations.DEPRECATE_STORE_EXTENDS_EMBER_OBJECT = false; - const app = new EmberApp(defaults, { - emberData: Object.assign({}, config), babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [...require('@ember-data/private-build-infra/src/debug-macros')(config)], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, - includeExternalHelpers: true, enableTypeScriptTransform: true, }, 'ember-cli-terser': terserSettings, - '@embroider/macros': { - // setConfig: { - // '@ember-data/store': { - // polyfillUUID: true, - // }, - // }, - setOwnConfig: config, - }, sourcemaps: { enabled: false, }, }); + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); + return app.toTree(); }; diff --git a/tests/main/eslint.config.mjs b/tests/main/eslint.config.mjs new file mode 100644 index 00000000000..c32729b4321 --- /dev/null +++ b/tests/main/eslint.config.mjs @@ -0,0 +1,92 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; + +const AllowedImports = [ + '@ember/application', + '@ember/array', + '@ember/array/proxy', + '@ember/component', + '@ember/component/helper', + '@ember/controller', + '@ember/object', + '@ember/object/computed', + '@ember/object/mixin', + '@ember/owner', + '@ember/routing/route', + '@ember/runloop', + '@ember/service', + '@ember/string', + '@ember/test-helpers', + '@ember/test-waiters', + '@glimmer/component', + 'ember-inflector', + 'qunit', +]; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js) ================ + js.browser({ + srcDirs: ['app', 'tests'], + allowedImports: AllowedImports, + globals: { gc: true }, + }), + + // browser (js/ts) ================ + typescript.browser({ + files: ['**/*.ts', '**/*.gts'], + srcDirs: ['app', 'tests'], + allowedImports: AllowedImports, + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + }, + }), + + // files converted to strict must pass these rules before they can be removed from + // the files list here + // see https://github.com/emberjs/data/issues/6233#issuecomment-849279594 + { + files: [ + 'tests/helpers/accessors.ts', + 'tests/integration/identifiers/configuration-test.ts', + 'tests/integration/identifiers/new-records-test.ts', + // 'tests/integration/identifiers/polymorphic-scenarios-test.ts', + 'tests/integration/identifiers/record-identifier-for-test.ts', + 'tests/integration/identifiers/scenarios-test.ts', + 'tests/integration/model-errors-test.ts', + 'tests/integration/record-data/record-data-errors-test.ts', + 'tests/integration/record-data/record-data-state-test.ts', + 'tests/integration/record-data/record-data-test.ts', + 'tests/integration/record-data/store-wrapper-test.ts', + 'tests/integration/relationships/rollback-test.ts', + 'tests/integration/request-state-service-test.ts', + 'tests/unit/custom-class-support/custom-class-model-test.ts', + ], + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + }, + }, + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + qunit.ember({ + allowedImports: AllowedImports, + }), +]; diff --git a/tests/main/package.json b/tests/main/package.json index b2c1bf5247c..87a4b829b44 100644 --- a/tests/main/package.json +++ b/tests/main/package.json @@ -15,7 +15,7 @@ "scripts": { "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", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "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", @@ -24,7 +24,7 @@ "test": "bun run examine", "test:production": "bun run examine", "typescript": "^5.2.2", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "author": "", "license": "MIT", @@ -59,15 +59,15 @@ "@ember-data/tracking": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/unpublished-test-infra": { "injected": true }, "@warp-drive/holodeck": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@warp-drive/core-types": { "injected": true }, @@ -94,7 +94,6 @@ "@ember-data/json-api": "workspace:5.4.0-alpha.64", "@ember-data/legacy-compat": "workspace:5.4.0-alpha.64", "@ember-data/model": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/serializer": "workspace:5.4.0-alpha.64", @@ -105,11 +104,13 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/macros": "^1.15.1", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/qunit": "^2.19.10", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "@warp-drive/holodeck": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "broccoli-concat": "^4.2.5", @@ -149,7 +150,7 @@ "webpack": "^5.91.0" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "ember": { "edition": "octane" diff --git a/tests/main/testem.js b/tests/main/testem.js index 900bc1252b7..792fa67528a 100644 --- a/tests/main/testem.js +++ b/tests/main/testem.js @@ -1,4 +1,4 @@ -const TestemConfig = require('@ember-data/unpublished-test-infra/src/testem/testem'); +const TestemConfig = require('@ember-data/unpublished-test-infra/testem/testem'); module.exports = async function () { const holodeck = (await import('@warp-drive/holodeck')).default; diff --git a/tests/main/tests/acceptance/record-array-test.js b/tests/main/tests/acceptance/record-array-test.js index a376098cccd..03e0f5d1305 100644 --- a/tests/main/tests/acceptance/record-array-test.js +++ b/tests/main/tests/acceptance/record-array-test.js @@ -13,7 +13,7 @@ class Person extends Model { @attr name; } -module('IdentifierArray | Classic Chains', function (hooks) { +module('LiveArray | Classic Chains', function (hooks) { setupRenderingTest(hooks); hooks.beforeEach(function () { diff --git a/tests/main/tests/helpers/accessors.ts b/tests/main/tests/helpers/accessors.ts index 37018fe809b..903f0282925 100644 --- a/tests/main/tests/helpers/accessors.ts +++ b/tests/main/tests/helpers/accessors.ts @@ -1,9 +1,8 @@ +import type { GraphEdge, ImplicitEdge } from '@ember-data/graph/-private'; import { graphFor } from '@ember-data/graph/-private'; -import type { ImplicitEdge } from '@ember-data/graph/-private/edges/implicit'; -import type { GraphEdge } from '@ember-data/graph/-private/graph'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; export function getRelationshipStateForRecord(record: { store: Store }, propertyName: string): GraphEdge { 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 6d45121a1f9..23972ef9168 100644 --- a/tests/main/tests/integration/adapter/build-url-mixin-test.js +++ b/tests/main/tests/integration/adapter/build-url-mixin-test.js @@ -8,7 +8,6 @@ import { setupTest } from 'ember-qunit'; import RESTAdapter from '@ember-data/adapter/rest'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import RESTSerializer from '@ember-data/serializer/rest'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; module('integration/adapter/build-url-mixin - BuildURLMixin with RESTAdapter', function (hooks) { setupTest(hooks); @@ -19,7 +18,7 @@ module('integration/adapter/build-url-mixin - BuildURLMixin with RESTAdapter', f adapter.ajax = function (url, verb, hash) { passedUrl = url; - return Promise.resolve(deepCopy(value)); + return Promise.resolve(structuredClone(value)); }; } diff --git a/tests/main/tests/integration/adapter/find-test.js b/tests/main/tests/integration/adapter/find-test.js index 9a1cafc372c..e45e47f1ef6 100644 --- a/tests/main/tests/integration/adapter/find-test.js +++ b/tests/main/tests/integration/adapter/find-test.js @@ -177,7 +177,7 @@ module('integration/adapter - Finding Records', function (hooks) { assert.ok(false, 'We expected to throw but did not'); } catch (e) { const expectedMessageRegex = - "Assertion Failed: You made a 'findRecord' request for a 'person' with id 'the-id', but the adapter's response did not have any data"; + "You made a 'findRecord' request for a 'person' with id 'the-id', but the adapter's response did not have any data"; assert.strictEqual(expectedMessageRegex, e.message, 'error has the correct error message'); } @@ -206,7 +206,7 @@ module('integration/adapter - Finding Records', function (hooks) { await Promise.all(promises); } catch (e) { const expectedMessageRegex = - "Assertion Failed: You made a 'findMany' request for 'person' records with ids '[1,2]', but the adapter's response did not have any data"; + "You made a 'findMany' request for 'person' records with ids '[1,2]', but the adapter's response did not have any data"; assert.strictEqual(expectedMessageRegex, e.message, 'error has the correct error message'); } diff --git a/tests/main/tests/integration/adapter/rest-adapter-test.js b/tests/main/tests/integration/adapter/rest-adapter-test.js index 931118c59e4..c237fcef190 100644 --- a/tests/main/tests/integration/adapter/rest-adapter-test.js +++ b/tests/main/tests/integration/adapter/rest-adapter-test.js @@ -20,7 +20,6 @@ import { Snapshot } from '@ember-data/legacy-compat/-private'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import RESTSerializer from '@ember-data/serializer/rest'; import { recordIdentifierFor } from '@ember-data/store'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; import { deprecatedTest } from '@ember-data/unpublished-test-infra/test-support/deprecated-test'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; import { DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE } from '@warp-drive/build-config/deprecations'; @@ -30,6 +29,10 @@ let store, adapter, SuperUser; let passedUrl, passedVerb, passedHash; let server; +function isSnapshot(snapshot) { + return snapshot instanceof Snapshot || snapshot.constructor.name === 'Snapshot'; +} + module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { setupTest(hooks); @@ -62,7 +65,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { passedVerb = passedHash.method; return Promise.resolve({ text() { - return Promise.resolve(JSON.stringify(deepCopy(value))); + return Promise.resolve(JSON.stringify(structuredClone(value))); }, ok: true, status: 200, @@ -74,7 +77,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { passedVerb = verb; passedHash = hash; - return Promise.resolve(deepCopy(value)); + return Promise.resolve(structuredClone(value)); }; } @@ -883,7 +886,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { assert.deepEqual(post2.getProperties('id', 'name'), { id: '2', name: 'The Parley Letter' }, 'Post 2 is loaded'); assert.strictEqual(posts.length, 2, 'The posts are in the array'); - assert.true(posts.isLoaded, 'The RecordArray is loaded'); + assert.true(posts.isLoaded, 'The LiveArray is loaded'); assert.deepEqual(posts.slice(), [post1, post2], 'The correct records are in the array'); }); @@ -998,7 +1001,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { assert.deepEqual(post2.getProperties('id', 'name'), { id: '2', name: 'The Parley Letter' }, 'Post 2 is loaded'); assert.strictEqual(posts.length, 2, 'The posts are in the array'); - assert.true(posts.isLoaded, 'The RecordArray is loaded'); + assert.true(posts.isLoaded, 'The LiveArray is loaded'); assert.deepEqual(posts.slice(), [post1, post2], 'The correct records are in the array'); }); @@ -1097,7 +1100,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { const len = sortedKeys.length; const newQueryParams = {}; - for (var i = 0; i < len; i++) { + for (let i = 0; i < len; i++) { newQueryParams[sortedKeys[i]] = obj[sortedKeys[i]]; } return newQueryParams; @@ -1192,7 +1195,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { assert.deepEqual(post2.getProperties('id', 'name'), { id: '2', name: 'The Parley Letter' }, 'Post 2 is loaded'); assert.strictEqual(posts.length, 2, 'The posts are in the array'); - assert.true(posts.isLoaded, 'The RecordArray is loaded'); + assert.true(posts.isLoaded, 'The LiveArray is loaded'); assert.deepEqual(posts.slice(), [post1, post2], 'The correct records are in the array'); }); @@ -1258,7 +1261,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { assert.deepEqual(post2.getProperties('id', 'name'), { id: '2', name: 'The Parley Letter' }, 'Post 2 is loaded'); assert.strictEqual(posts.length, 2, 'The posts are in the array'); - assert.true(posts.isLoaded, 'The RecordArray is loaded'); + assert.true(posts.isLoaded, 'The LiveArray is loaded'); assert.deepEqual(posts.slice(), [post1, post2], 'The correct records are in the array'); }); @@ -1367,7 +1370,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { assert.expectAssertion( () => store.queryRecord('post', { slug: 'rails-is-omakaze' }), - 'Assertion Failed: The adapter returned an array for the primary data of a `queryRecord` response. `queryRecord` should return a single record.' + 'The adapter returned an array for the primary data of a `queryRecord` response. `queryRecord` should return a single record.' ); }); @@ -1828,7 +1831,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { assert.expect(2); adapter.shouldBackgroundReloadRecord = () => false; adapter.buildURL = function (type, id, snapshot, requestType) { - assert.ok(snapshot instanceof Snapshot); + assert.ok(isSnapshot(snapshot)); assert.strictEqual(requestType, 'findHasMany'); }; @@ -2016,7 +2019,7 @@ module('integration/adapter/rest_adapter - REST Adapter', function (hooks) { assert.expect(2); adapter.shouldBackgroundReloadRecord = () => false; adapter.buildURL = function (type, id, snapshot, requestType) { - assert.ok(snapshot instanceof Snapshot); + assert.ok(isSnapshot(snapshot)); assert.strictEqual(requestType, 'findBelongsTo'); }; diff --git a/tests/main/tests/integration/adapter/rest-adapter/-ajax-mocks.js b/tests/main/tests/integration/adapter/rest-adapter/-ajax-mocks.js index 9f84c5ce8f6..27cf5bff835 100644 --- a/tests/main/tests/integration/adapter/rest-adapter/-ajax-mocks.js +++ b/tests/main/tests/integration/adapter/rest-adapter/-ajax-mocks.js @@ -1,5 +1,3 @@ -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; - /** * @description Helper function to mock the response of an adapter in order to * test its behavior. @@ -19,7 +17,7 @@ function ajaxResponse(adapter, value) { passedVerb = passedHash.method; return Promise.resolve({ text() { - return Promise.resolve(JSON.stringify(deepCopy(value))); + return Promise.resolve(JSON.stringify(structuredClone(value))); }, ok: true, status: 200, @@ -31,7 +29,7 @@ function ajaxResponse(adapter, value) { passedVerb = verb; passedHash = hash; - return Promise.resolve(deepCopy(value)); + return Promise.resolve(structuredClone(value)); }; return () => { diff --git a/tests/main/tests/integration/adapter/rest-adapter/find-record-test.js b/tests/main/tests/integration/adapter/rest-adapter/find-record-test.js index 24580a4704f..c026019d62d 100644 --- a/tests/main/tests/integration/adapter/rest-adapter/find-record-test.js +++ b/tests/main/tests/integration/adapter/rest-adapter/find-record-test.js @@ -173,7 +173,7 @@ module('integration/adapter/rest_adapter - REST Adapter - findRecord', function await assert.expectAssertion(async () => { await store.findRecord(identifier); - }, 'Assertion Failed: Attempted to schedule a fetch for a record without an id.'); + }, 'Attempted to schedule a fetch for a record without an id.'); } ); @@ -200,7 +200,7 @@ module('integration/adapter/rest_adapter - REST Adapter - findRecord', function await assert.expectAssertion(async () => { await store.findRecord(identifier, options); - }, 'Assertion Failed: Attempted to schedule a fetch for a record without an id.'); + }, 'Attempted to schedule a fetch for a record without an id.'); } ); }); diff --git a/tests/main/tests/integration/adapter/store-adapter-test.js b/tests/main/tests/integration/adapter/store-adapter-test.js index df76de13f06..263099a9309 100644 --- a/tests/main/tests/integration/adapter/store-adapter-test.js +++ b/tests/main/tests/integration/adapter/store-adapter-test.js @@ -14,6 +14,10 @@ import RESTSerializer from '@ember-data/serializer/rest'; import { recordIdentifierFor } from '@ember-data/store'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; +function isSnapshot(snapshot) { + return snapshot instanceof Snapshot || snapshot.constructor.name === 'Snapshot'; +} + function moveRecordOutOfInFlight(record) { // move record out of the inflight state so the tests can clean up // correctly @@ -1080,7 +1084,7 @@ module('integration/adapter/store-adapter - DS.Store and DS.Adapter integration const adapter = store.adapterFor('application'); adapter.createRecord = function (store, type, snapshot) { - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); return Promise.resolve(); }; @@ -1096,7 +1100,7 @@ module('integration/adapter/store-adapter - DS.Store and DS.Adapter integration const adapter = store.adapterFor('application'); adapter.updateRecord = function (store, type, snapshot) { - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); return Promise.resolve(); }; @@ -1122,7 +1126,7 @@ module('integration/adapter/store-adapter - DS.Store and DS.Adapter integration const adapter = store.adapterFor('application'); adapter.deleteRecord = function (store, type, snapshot) { - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); return Promise.resolve(); }; @@ -1148,7 +1152,7 @@ module('integration/adapter/store-adapter - DS.Store and DS.Adapter integration const adapter = store.adapterFor('application'); adapter.findRecord = function (store, type, id, snapshot) { - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); return Promise.resolve({ data: { id: '1', type: 'person' } }); }; @@ -1168,8 +1172,8 @@ module('integration/adapter/store-adapter - DS.Store and DS.Adapter integration adapter.coalesceFindRequests = true; adapter.findMany = function (store, type, ids, snapshots) { - assert.ok(snapshots[0] instanceof Snapshot, 'snapshots[0] is an instance of Snapshot'); - assert.ok(snapshots[1] instanceof Snapshot, 'snapshots[1] is an instance of Snapshot'); + assert.ok(isSnapshot(snapshots[0]), 'snapshots[0] is an instance of Snapshot'); + assert.ok(isSnapshot(snapshots[1]), 'snapshots[1] is an instance of Snapshot'); return Promise.resolve({ data: [ { id: '2', type: 'dog' }, @@ -1209,7 +1213,7 @@ module('integration/adapter/store-adapter - DS.Store and DS.Adapter integration this.owner.register('model:person', Person); adapter.findHasMany = function (store, snapshot, link, relationship) { - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); return Promise.resolve({ data: [ { id: '2', type: 'dog' }, @@ -1249,7 +1253,7 @@ module('integration/adapter/store-adapter - DS.Store and DS.Adapter integration this.owner.register('model:person', Person); adapter.findBelongsTo = function (store, snapshot, link, relationship) { - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); return Promise.resolve({ data: { id: '2', type: 'dog' } }); }; diff --git a/tests/main/tests/integration/cache-handler/lifetimes-test.ts b/tests/main/tests/integration/cache-handler/lifetimes-test.ts index 7a4e5905c88..18f26b8c0f8 100644 --- a/tests/main/tests/integration/cache-handler/lifetimes-test.ts +++ b/tests/main/tests/integration/cache-handler/lifetimes-test.ts @@ -8,13 +8,12 @@ import type { Snapshot } from '@ember-data/legacy-compat/-private'; import type { ImmutableRequestInfo, NextFn, RequestContext, ResponseInfo } from '@ember-data/request'; import RequestManager from '@ember-data/request'; import { LifetimesService } from '@ember-data/request-utils'; +import type { NotificationType } from '@ember-data/store'; import Store, { CacheHandler } 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 { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import type { Cache } from '@warp-drive/core-types/cache'; import type { StableDocumentIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { ResourceType } from '@warp-drive/core-types/symbols'; type FakeRecord = { [key: string]: unknown; destroy: () => void }; @@ -45,7 +44,7 @@ class BaseTestStore extends Store { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type, identifier } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, this.cache.peek(identifier)!.attributes); const token = this.notifications.subscribe( identifier, 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 bc51cb1a148..c473e290d45 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 @@ -6,30 +6,27 @@ import { setupTest } from 'ember-qunit'; import Cache from '@ember-data/json-api'; import { LegacyNetworkHandler } from '@ember-data/legacy-compat'; -import type { StructuredDataDocument, StructuredErrorDocument } from '@ember-data/request'; +import type { Future, NextFn, StructuredDataDocument, StructuredErrorDocument } from '@ember-data/request'; import RequestManager from '@ember-data/request'; -import type { Context } from '@ember-data/request/-private/context'; -import type { Future, NextFn } from '@ember-data/request/-private/types'; import Fetch from '@ember-data/request/fetch'; +import type { Document, NotificationType } from '@ember-data/store'; import Store, { CacheHandler, recordIdentifierFor } from '@ember-data/store'; -import type { Document } from '@ember-data/store/-private/document'; -import type { NotificationType } from '@ember-data/store/-private/managers/notification-manager'; -import type { Collection } from '@ember-data/store/-private/record-arrays/identifier-array'; -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 { OpaqueRecordInstance } from '@ember-data/store/-types/q/record-instance'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { CollectionRecordArray } from '@ember-data/store/-private'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import type { StableDocumentIdentifier, StableExistingRecordIdentifier, StableRecordIdentifier, } from '@warp-drive/core-types/identifier'; +import type { OpaqueRecordInstance } from '@warp-drive/core-types/record'; +import type { RequestContext } from '@warp-drive/core-types/request'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { CollectionResourceDataDocument, ResourceDataDocument, SingleResourceDataDocument, } from '@warp-drive/core-types/spec/document'; -import type { ResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; +import type { ExistingResourceObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; import type { ResourceType } from '@warp-drive/core-types/symbols'; type FakeRecord = { [key: string]: unknown; destroy: () => void }; @@ -77,7 +74,7 @@ class TestStore extends Store { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type, identifier } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, this.cache.peek(identifier)!.attributes); const token = this.notifications.subscribe( identifier, @@ -306,7 +303,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, this.cache.peek(identifier)!.attributes); const token = this.notifications.subscribe( identifier, @@ -404,7 +401,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, this.cache.peek(identifier)!.attributes); const token = this.notifications.subscribe( identifier, @@ -503,7 +500,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { override instantiateRecord(identifier: StableRecordIdentifier) { const { id, lid, type } = identifier; const record: FakeRecord = { id, lid, type } as unknown as FakeRecord; - Object.assign(record, (this.cache.peek(identifier) as JsonApiResource).attributes); + Object.assign(record, this.cache.peek(identifier)!.attributes); const token = this.notifications.subscribe( identifier, @@ -530,7 +527,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { owner.register('service:request', RequestManagerService); const store = owner.lookup('service:store') as unknown as TestStore; - const userDocument = await store.requestManager.request>({ + const userDocument = await store.requestManager.request>({ url: '/assets/users/1.json', }); @@ -1564,7 +1561,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager = new RequestManager(); store.requestManager.use([ { - request(context: Context) { + request(context: RequestContext) { assert.step('request'); context.setResponse( @@ -1602,7 +1599,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager = new RequestManager(); store.requestManager.use([ { - request(context: Context) { + request(context: RequestContext) { assert.step('request'); context.setResponse( @@ -1638,7 +1635,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager = new RequestManager(); store.requestManager.use([ { - request(context: Context) { + request(context: RequestContext) { assert.step('request'); context.setResponse( @@ -1674,7 +1671,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager = new RequestManager(); store.requestManager.use([ { - request(context: Context) { + request(context: RequestContext) { assert.step('request'); context.setResponse( @@ -1707,7 +1704,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager = new RequestManager(); store.requestManager.use([ { - request(context: Context) { + request(context: RequestContext) { assert.step('request'); context.setResponse( @@ -1742,7 +1739,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager.use([ LegacyNetworkHandler, { - request(context: Context, next: NextFn): Future { + request(context: RequestContext, next: NextFn): Future { if (handlerCalls > 0) { assert.ok(false, 'fetch handler should not be called again'); } @@ -1756,7 +1753,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { const docIdentifier = store.identifierCache.getOrCreateDocumentIdentifier({ url: '/assets/users/2.json' })!; try { - await store.request({ + await store.request({ url: '/assets/users/2.json', }); assert.ok(false, 'we should error'); @@ -1772,7 +1769,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { const doc = store.cache.peekRequest(docIdentifier) as unknown as StructuredErrorDocument; try { - await store.request({ + await store.request({ url: '/assets/users/2.json', }); assert.ok(false, 'we should error'); @@ -1856,7 +1853,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { })!; try { - await store.request({ + await store.request({ url: '/assets/users/2.json?include=author', }); assert.ok(false, 'we should error'); @@ -1874,7 +1871,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { const doc = store.cache.peekRequest(docIdentifier) as unknown as StructuredErrorDocument; try { - await store.request({ + await store.request({ url: '/assets/users/2.json?include=author', }); assert.ok(false, 'we should error'); @@ -1987,7 +1984,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { // First failed fetch try { - await store.request({ + await store.request({ url: '/assets/users/2.json?include=author', cacheOptions: { reload: true }, }); @@ -2010,7 +2007,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { // Replay of failed fetch try { - await store.request({ + await store.request({ url: '/assets/users/2.json?include=author', }); assert.ok(false, ' we should error'); @@ -2083,7 +2080,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager.use([ LegacyNetworkHandler, { - async request(_request: Context, _nextFn: NextFn): Promise { + async request(_request: RequestContext, _nextFn: NextFn): Promise { handlerCalls++; resolve(); await next; @@ -2139,7 +2136,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager.use([ LegacyNetworkHandler, { - async request(_request: Context, _nextFn: NextFn): Promise { + async request(_request: RequestContext, _nextFn: NextFn): Promise { handlerCalls++; return Promise.resolve({ data: { @@ -2152,7 +2149,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { }, ]); store.requestManager.useCache({ - async request(context: Context, next: NextFn): Promise { + async request(context: RequestContext, next: NextFn): Promise { const cacheComplete = await CacheHandler.request(context, next); resolve(); await nextPromise; @@ -2229,7 +2226,7 @@ module('Store | CacheHandler - @ember-data/store', function (hooks) { store.requestManager.use([ LegacyNetworkHandler, { - async request(_context: Context, _next: NextFn): Promise { + async request(_context: RequestContext, _next: NextFn): Promise { if (handlerCalls > 1) { assert.ok(false, 'fetch handler should not be called again'); throw new Error('fetch handler should not be called again'); diff --git a/tests/main/tests/integration/debug-adapter-test.js b/tests/main/tests/integration/debug-adapter-test.js index 483d91ee3c7..1eb1a1bf88f 100644 --- a/tests/main/tests/integration/debug-adapter-test.js +++ b/tests/main/tests/integration/debug-adapter-test.js @@ -7,10 +7,9 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import Adapter from '@ember-data/adapter'; -import Model, { attr } from '@ember-data/model'; - // TODO move these tests to the DEBUG package import DebugAdapter from '@ember-data/debug'; +import Model, { attr } from '@ember-data/model'; module('integration/debug-adapter - DebugAdapter', function (hooks) { setupTest(hooks); @@ -18,14 +17,14 @@ module('integration/debug-adapter - DebugAdapter', function (hooks) { let store; hooks.beforeEach(function () { - let { owner } = this; + const { owner } = this; class Post extends Model { @attr title; } owner.register('model:post', Post); store = owner.lookup('service:store'); - let _adapter = DebugAdapter.extend({ + const _adapter = DebugAdapter.extend({ getModelTypes() { return A([{ klass: store.modelFor('post'), name: 'post' }]); }, @@ -46,7 +45,7 @@ module('integration/debug-adapter - DebugAdapter', function (hooks) { }); await settled(); - let debugAdapter = this.owner.lookup('data-adapter:main'); + const debugAdapter = this.owner.lookup('data-adapter:main'); function added(types) { assert.strictEqual(types.length, 1, 'added one type'); assert.strictEqual(types[0].name, 'post', 'the type is post'); @@ -59,8 +58,8 @@ module('integration/debug-adapter - DebugAdapter', function (hooks) { test('Watching Model Types', async function (assert) { assert.expect(4); - let { owner } = this; - let debugAdapter = owner.lookup('data-adapter:main'); + const { owner } = this; + const debugAdapter = owner.lookup('data-adapter:main'); function added(types) { assert.strictEqual(types.length, 1, 'added one type'); @@ -84,8 +83,8 @@ module('integration/debug-adapter - DebugAdapter', function (hooks) { test('Watching Model Types On first-create', async function (assert) { assert.expect(4); - let { owner } = this; - let debugAdapter = owner.lookup('data-adapter:main'); + const { owner } = this; + const debugAdapter = owner.lookup('data-adapter:main'); function added(types) { assert.strictEqual(types.length, 1, 'added one type'); @@ -102,8 +101,8 @@ module('integration/debug-adapter - DebugAdapter', function (hooks) { }); test('Watching Records', async function (assert) { - let { owner } = this; - let debugAdapter = owner.lookup('data-adapter:main'); + const { owner } = this; + const debugAdapter = owner.lookup('data-adapter:main'); let addedRecords, updatedRecords, removedRecords; this.owner.register( @@ -125,13 +124,13 @@ module('integration/debug-adapter - DebugAdapter', function (hooks) { }, }); - let recordsAdded = function (wrappedRecords) { + const recordsAdded = function (wrappedRecords) { addedRecords = wrappedRecords; }; - let recordsUpdated = function (wrappedRecords) { + const recordsUpdated = function (wrappedRecords) { updatedRecords = wrappedRecords; }; - let recordsRemoved = function (...args) { + const recordsRemoved = function (...args) { // in 3.26 there is only 1 argument - the record removed // below 3.26, it is 2 arguments - the index and count removed // https://github.com/emberjs/ember.js/pull/19379 @@ -212,8 +211,8 @@ module('integration/debug-adapter - DebugAdapter', function (hooks) { }); test('Column names', function (assert) { - let { owner } = this; - let debugAdapter = owner.lookup('data-adapter:main'); + const { owner } = this; + const debugAdapter = owner.lookup('data-adapter:main'); class Person extends Model { @attr title; @attr firstOrLastName; diff --git a/tests/main/tests/integration/identifiers/cache-test.ts b/tests/main/tests/integration/identifiers/cache-test.ts index 581c8bcb797..ec626c3ae7f 100644 --- a/tests/main/tests/integration/identifiers/cache-test.ts +++ b/tests/main/tests/integration/identifiers/cache-test.ts @@ -3,7 +3,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import type Store from '@ember-data/store'; -import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; +import { test as testInDebug } from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; module('Integration | Identifiers - cache', function (hooks) { setupTest(hooks); diff --git a/tests/main/tests/integration/identifiers/configuration-test.ts b/tests/main/tests/integration/identifiers/configuration-test.ts index 2b895797000..4c9924b5505 100644 --- a/tests/main/tests/integration/identifiers/configuration-test.ts +++ b/tests/main/tests/integration/identifiers/configuration-test.ts @@ -17,8 +17,11 @@ import { setIdentifierResetMethod, setIdentifierUpdateMethod, } from '@ember-data/store'; -import type { GenerationMethod, ResourceData } from '@ember-data/store/-types/q/identifier'; import type { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { ExistingResourceObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; + +type ResourceData = ResourceIdentifierObject | ExistingResourceObject; +type GenerationMethod = Parameters[0]; module('Integration | Identifiers - configuration', function (hooks) { setupTest(hooks); diff --git a/tests/main/tests/integration/identifiers/polymorphic-scenarios-test.ts b/tests/main/tests/integration/identifiers/polymorphic-scenarios-test.ts index 76c1573a85f..294c80497e3 100644 --- a/tests/main/tests/integration/identifiers/polymorphic-scenarios-test.ts +++ b/tests/main/tests/integration/identifiers/polymorphic-scenarios-test.ts @@ -151,14 +151,12 @@ module('Integration | Identifiers - single-table-inheritance polymorphic scenari }, }); } - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment requests.push({ type, id }); // return the polymorphic type instead of 'car'; type = id === '1' ? 'ferrari' : 'bmw'; return Promise.resolve({ data: { id, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment type, attributes: { color: 'red', diff --git a/tests/main/tests/integration/identifiers/scenarios-test.ts b/tests/main/tests/integration/identifiers/scenarios-test.ts index e7a6915a83e..216dfe14966 100644 --- a/tests/main/tests/integration/identifiers/scenarios-test.ts +++ b/tests/main/tests/integration/identifiers/scenarios-test.ts @@ -14,8 +14,11 @@ import { setIdentifierResetMethod, setIdentifierUpdateMethod, } from '@ember-data/store'; -import type { GenerationMethod, ResourceData } from '@ember-data/store/-types/q/identifier'; import type { IdentifierBucket, StableIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; +import type { ExistingResourceObject, ResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; + +type ResourceData = ResourceIdentifierObject | ExistingResourceObject; +type GenerationMethod = Parameters[0]; function isNonEmptyString(str: unknown): str is string { return typeof str === 'string' && str.length > 0; diff --git a/tests/main/tests/integration/legacy-compat/find-record-test.ts b/tests/main/tests/integration/legacy-compat/find-record-test.ts index 57dc134862e..4754357cff6 100644 --- a/tests/main/tests/integration/legacy-compat/find-record-test.ts +++ b/tests/main/tests/integration/legacy-compat/find-record-test.ts @@ -5,7 +5,7 @@ import { setupTest } from 'ember-qunit'; import type { CompatStore } from '@ember-data/legacy-compat'; import { findRecord } from '@ember-data/legacy-compat/builders'; import Model, { attr } from '@ember-data/model'; -import type { FindRecordOptions } from '@ember-data/store/-types/q/store'; +import type { FindRecordOptions } from '@ember-data/store/types'; import { ResourceType } from '@warp-drive/core-types/symbols'; type FindRecordBuilderOptions = Exclude[1], undefined>; @@ -95,7 +95,7 @@ module('Integration - legacy-compat/builders/findRecord', function (hooks) { await assert.expectAssertion(() => { // @ts-expect-error TS knows the options are invalid findRecord('post', '1', invalidOptions); - }, 'Assertion Failed: findRecord builder does not support options.preload'); + }, 'findRecord builder does not support options.preload'); }); test('findRecord by identifier', function (assert) { @@ -144,6 +144,6 @@ module('Integration - legacy-compat/builders/findRecord', function (hooks) { await assert.expectAssertion(() => { // @ts-expect-error TS knows the options are invalid findRecord({ type: 'post', id: '1' }, invalidOptions); - }, 'Assertion Failed: findRecord builder does not support options.preload'); + }, 'findRecord builder does not support options.preload'); }); }); diff --git a/tests/main/tests/integration/record-array-manager-test.js b/tests/main/tests/integration/record-array-manager-test.js index bbda95bfb64..f2438725e71 100644 --- a/tests/main/tests/integration/record-array-manager-test.js +++ b/tests/main/tests/integration/record-array-manager-test.js @@ -101,7 +101,7 @@ module('integration/record_array_manager', function (hooks) { assert.true(adapterPopulated.isDestroyed, 'Collection is destroyed'); }); - test('#GH-4041 store#query AdapterPopulatedRecordArrays are removed from their managers instead of retained when #destroy is called', async function (assert) { + test('#GH-4041 store#query CollectionRecordArrays are removed from their managers instead of retained when #destroy is called', async function (assert) { store.push({ data: { type: 'car', diff --git a/tests/main/tests/integration/record-array-test.js b/tests/main/tests/integration/record-array-test.js index 136c650beac..398fe178d30 100644 --- a/tests/main/tests/integration/record-array-test.js +++ b/tests/main/tests/integration/record-array-test.js @@ -27,7 +27,7 @@ class Tool extends Model { person; } -module('integration/record-array - RecordArray', function (hooks) { +module('integration/live-array', function (hooks) { setupTest(hooks); hooks.beforeEach(function () { @@ -116,7 +116,7 @@ module('integration/record-array - RecordArray', function (hooks) { } ); - test('a loaded record is removed from a record array when it is deleted', async function (assert) { + test('a loaded record is removed from a live record array when it is deleted', async function (assert) { assert.expect(5); this.owner.register('model:tag', Tag); @@ -493,7 +493,7 @@ module('integration/record-array - RecordArray', function (hooks) { assert.strictEqual(recordArray.at(0).id, '1', 'should retrieve correct record at index 0'); }); - test("an AdapterPopulatedRecordArray knows if it's loaded or not", async function (assert) { + test("a CollectionRecordArray knows if it's loaded or not", async function (assert) { const store = this.owner.lookup('service:store'); assert.expect(2); diff --git a/tests/main/tests/integration/record-arrays/adapter-populated-record-array-test.js b/tests/main/tests/integration/record-arrays/adapter-populated-record-array-test.js index 1d41bea6a94..fda58f2a4b6 100644 --- a/tests/main/tests/integration/record-arrays/adapter-populated-record-array-test.js +++ b/tests/main/tests/integration/record-arrays/adapter-populated-record-array-test.js @@ -16,7 +16,7 @@ const Person = Model.extend({ }, }); -module('integration/record-arrays/adapter_populated_record_array - AdapterPopulatedRecordArray', function (hooks) { +module('integration/record-arrays/collection', function (hooks) { setupTest(hooks); hooks.beforeEach(function () { @@ -162,7 +162,7 @@ module('integration/record-arrays/adapter_populated_record_array - AdapterPopula () => { recordArray.splice(0, 1); }, - 'Assertion Failed: Mutating this array of records via splice is not allowed.', + 'Mutating this array of records via splice is not allowed.', 'throws error' ); }); @@ -177,7 +177,7 @@ module('integration/record-arrays/adapter_populated_record_array - AdapterPopula () => { recordArray.splice(0, 1); }, - 'Assertion Failed: Mutating this array of records via splice is not allowed.', + 'Mutating this array of records via splice is not allowed.', 'throws error' ); }); diff --git a/tests/main/tests/integration/record-data/store-wrapper-test.ts b/tests/main/tests/integration/record-data/cache-capabilities-manager-test.ts similarity index 78% rename from tests/main/tests/integration/record-data/store-wrapper-test.ts rename to tests/main/tests/integration/record-data/cache-capabilities-manager-test.ts index 5e3d9ae124f..695daa7bff1 100644 --- a/tests/main/tests/integration/record-data/store-wrapper-test.ts +++ b/tests/main/tests/integration/record-data/cache-capabilities-manager-test.ts @@ -7,10 +7,10 @@ import { setupTest } from 'ember-qunit'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import { recordIdentifierFor } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import publicProps from '@ember-data/unpublished-test-infra/test-support/public-props'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { ExistingResourceObject } from '@warp-drive/core-types/spec/raw'; +import type { LegacyRelationshipSchema } from '@warp-drive/core-types/schema/fields'; +import type { ExistingResourceObject } from '@warp-drive/core-types/spec/json-api-raw'; class Person extends Model { @attr('string', {}) @@ -39,73 +39,6 @@ class House extends Model { tenants; } -// TODO: this should work -// class TestRecordData implements RecordData -class TestRecordData { - _isNew = false; - pushData(data, calculateChange?: boolean) {} - upsert() {} - clientDidCreate() { - this._isNew = true; - } - - willCommit() {} - - commitWasRejected() {} - - isDeletionCommitted() { - return false; - } - isDeleted() { - return false; - } - - unloadRecord() {} - rollbackAttributes() {} - changedAttributes(): void {} - - hasChangedAttributes(): boolean { - return false; - } - - setDirtyAttribute(key: string, value: unknown) {} - - getAttr(identifier: StableRecordIdentifier, key: string): unknown { - return 'test'; - } - - getHasMany(key: string) { - return {}; - } - - addToHasMany(key: string, recordDatas: this[], idx?: number) {} - removeFromHasMany(key: string, recordDatas: this[]) {} - setDirtyHasMany(key: string, recordDatas: this[]) {} - - getBelongsTo(key: string) {} - - setDirtyBelongsTo(name: string, recordData: this | null) {} - - didCommit(data) {} - - isNew() { - return this._isNew; - } - - isEmpty() { - return false; - } - - _initRecordCreateOptions(options) {} -} - -class CustomStore extends Store { - // @ts-expect-error - createRecordDataFor(identifier: StableRecordIdentifier, wrapper: CacheCapabilitiesManager) { - return new TestRecordData(); - } -} - let houseHash: ExistingResourceObject; let houseHash2: ExistingResourceObject; @@ -133,9 +66,6 @@ module('integration/store-wrapper - RecordData StoreWrapper tests', function (ho owner.register('model:person', Person); owner.register('model:house', House); owner.register('model:car', Car); - // @ts-expect-error missing type - owner.unregister('service:store'); - owner.register('service:store', CustomStore); }); test('Relationship definitions', function (assert) { @@ -211,11 +141,14 @@ module('integration/store-wrapper - RecordData StoreWrapper tests', function (ho }, }; const schema = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor({ type: 'house' }); - const result = publicProps(['key', 'kind', 'name', 'type', 'options'], schema) as Record; // Retrieve only public values from the result // This should go away once we put private things in symbols/weakmaps - assert.deepEqual(houseRelationships, result, 'can lookup relationship definitions'); + assert.deepEqual( + houseRelationships as Record, + schema, + 'can lookup relationship definitions' + ); }); test('setRecordId', function (assert) { 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 76268a90c06..86e1cf011d0 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 @@ -9,12 +9,11 @@ import { InvalidError } from '@ember-data/adapter/error'; import Model, { attr } from '@ember-data/model'; import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; import { recordIdentifierFor } from '@ember-data/store'; -import type { Cache, MergeOperation } from '@ember-data/store/-types/q/cache'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; -import type { ChangedAttributesHash, RelationshipDiff } from '@warp-drive/core-types/cache'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; +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 { MergeOperation } from '@warp-drive/core-types/cache/operations'; import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; import type { @@ -30,18 +29,20 @@ import type { ResourceMetaDocument, SingleResourceDataDocument, } from '@warp-drive/core-types/spec/document'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; import type { CollectionResourceDocument, + ExistingResourceObject, JsonApiDocument, SingleResourceDocument, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; class Person extends Model { @attr declare firstName: string; @attr declare lastName: string; } -class TestRecordData implements Cache { +class TestCache implements Cache { wrapper: CacheCapabilitiesManager; _data: Map = new Map(); constructor(wrapper: CacheCapabilitiesManager) { @@ -67,7 +68,7 @@ class TestRecordData implements Cache { put(doc: StructuredDocument): ResourceDocument { if ('content' in doc && !('error' in doc)) { const identifier = this.wrapper.identifierCache.getOrCreateRecordIdentifier(doc.content.data as RecordIdentifier); - this.upsert(identifier, doc.content.data as JsonApiResource, this.wrapper.hasRecord(identifier)); + this.upsert(identifier, doc.content.data as ExistingResourceObject, this.wrapper.hasRecord(identifier)); return { data: identifier } as SingleResourceDataDocument; } else if ('error' in doc) { throw typeof doc.error === 'string' ? new Error(doc.error) : (doc.error as Error); @@ -104,12 +105,12 @@ class TestRecordData implements Cache { } version = '2' as const; - _errors?: JsonApiError[]; + _errors?: ApiError[]; _isNew = false; upsert( identifier: StableRecordIdentifier, - data: JsonApiResource, + data: ExistingResourceObject, calculateChanges?: boolean | undefined ): void | string[] { if (!this._data.has(identifier)) { @@ -133,7 +134,7 @@ class TestRecordData implements Cache { ): SingleResourceDataDocument { return { data: identifier as StableExistingRecordIdentifier }; } - commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[] | undefined): void { + commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[] | undefined): void { this._errors = errors; } unloadRecord(identifier: StableRecordIdentifier): void {} @@ -173,7 +174,7 @@ class TestRecordData implements Cache { throw new Error('Method not implemented.'); } - getErrors(identifier: StableRecordIdentifier): JsonApiError[] { + getErrors(identifier: StableRecordIdentifier): ApiError[] { return this._errors || []; } isEmpty(identifier: StableRecordIdentifier): boolean { @@ -198,8 +199,8 @@ module('integration/record-data Custom RecordData (v2) Errors', function (hooks) const { owner } = this; - class LifecycleRecordData extends TestRecordData { - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]) { + class LifecycleRecordData extends TestCache { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]) { super.commitWasRejected(identifier, errors); assert.strictEqual(errors?.[0]?.detail, 'is a generally unsavoury character', 'received the error'); assert.strictEqual(errors?.[0]?.source?.pointer, '/data/attributes/name', 'pointer is correct'); @@ -260,8 +261,8 @@ module('integration/record-data Custom RecordData (v2) Errors', function (hooks) const { owner } = this; - class LifecycleRecordData extends TestRecordData { - override commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]) { + class LifecycleRecordData extends TestCache { + override commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[]) { super.commitWasRejected(identifier, errors); assert.strictEqual(errors, undefined, 'Did not pass adapter errors'); } @@ -307,11 +308,11 @@ module('integration/record-data Custom RecordData (v2) Errors', function (hooks) test('RecordData Invalid Errors Can Be Reflected On The Record', function (assert) { const { owner } = this; - let errorsToReturn: JsonApiError[] | undefined; + let errorsToReturn: ApiError[] | undefined; let storeWrapper!: CacheCapabilitiesManager; - class LifecycleRecordData extends TestRecordData { - override getErrors(): JsonApiError[] { + class LifecycleRecordData extends TestCache { + override getErrors(): ApiError[] { return errorsToReturn || []; } } 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 c265e20a1c8..c283397d49e 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 @@ -10,12 +10,11 @@ import Model, { attr } from '@ember-data/model'; import type { StructuredDataDocument, StructuredDocument } from '@ember-data/request'; import JSONAPISerializer from '@ember-data/serializer/json-api'; import { recordIdentifierFor } from '@ember-data/store'; -import type { Cache, MergeOperation } from '@ember-data/store/-types/q/cache'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; -import type { ChangedAttributesHash, RelationshipDiff } from '@warp-drive/core-types/cache'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; +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 { MergeOperation } from '@warp-drive/core-types/cache/operations'; import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; import type { @@ -30,11 +29,13 @@ import type { ResourceMetaDocument, SingleResourceDataDocument, } from '@warp-drive/core-types/spec/document'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; import type { CollectionResourceDocument, + ExistingResourceObject, JsonApiDocument, SingleResourceDocument, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; class Person extends Model { // TODO fix the typing for naked attrs @@ -89,7 +90,7 @@ class TestRecordData implements Cache { const identifier = this._storeWrapper.identifierCache.getOrCreateRecordIdentifier( doc.content.data ) as StableExistingRecordIdentifier; - this.upsert(identifier, doc.content.data as JsonApiResource, this._storeWrapper.hasRecord(identifier)); + this.upsert(identifier, doc.content.data!, this._storeWrapper.hasRecord(identifier)); return { data: identifier } as SingleResourceDataDocument; } } else if ('error' in doc) { @@ -124,7 +125,7 @@ class TestRecordData implements Cache { upsert( identifier: StableRecordIdentifier, - data: JsonApiResource, + data: ExistingResourceObject, calculateChanges?: boolean | undefined ): void | string[] { if (!this._data.has(identifier)) { @@ -139,7 +140,7 @@ class TestRecordData implements Cache { } version = '2' as const; - _errors?: JsonApiError[]; + _errors?: ApiError[]; _isNew = false; clientDidCreate( @@ -154,7 +155,7 @@ class TestRecordData implements Cache { didCommit(identifier: StableRecordIdentifier, result: StructuredDataDocument): SingleResourceDataDocument { return { data: identifier as StableExistingRecordIdentifier }; } - commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[] | undefined): void { + commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[] | undefined): void { this._errors = errors; } unloadRecord(identifier: StableRecordIdentifier): void {} @@ -194,7 +195,7 @@ class TestRecordData implements Cache { throw new Error('Method not implemented.'); } - getErrors(identifier: StableRecordIdentifier): JsonApiError[] { + getErrors(identifier: StableRecordIdentifier): ApiError[] { return this._errors || []; } isEmpty(identifier: StableRecordIdentifier): boolean { @@ -219,7 +220,6 @@ module('integration/record-data - Record Data State', function (hooks) { owner.register('model:person', Person); // @ts-expect-error missing type - owner.unregister('service:store'); owner.register('service:store', Store); owner.register('serializer:application', JSONAPISerializer); 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 98fd4f5fa1f..570f8e39d97 100644 --- a/tests/main/tests/integration/record-data/record-data-test.ts +++ b/tests/main/tests/integration/record-data/record-data-test.ts @@ -10,12 +10,11 @@ import JSONAPIAdapter from '@ember-data/adapter/json-api'; 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'; -import type { Cache, MergeOperation } from '@ember-data/store/-types/q/cache'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; -import type { JsonApiError, JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; -import type { ChangedAttributesHash, RelationshipDiff } from '@warp-drive/core-types/cache'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; +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 { MergeOperation } from '@warp-drive/core-types/cache/operations'; import type { CollectionRelationship, ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; import type { LocalRelationshipOperation } from '@warp-drive/core-types/graph'; import type { @@ -31,11 +30,13 @@ import type { ResourceMetaDocument, SingleResourceDataDocument, } from '@warp-drive/core-types/spec/document'; +import type { ApiError } from '@warp-drive/core-types/spec/error'; import type { CollectionResourceDocument, + ExistingResourceObject, JsonApiDocument, SingleResourceDocument, -} from '@warp-drive/core-types/spec/raw'; +} from '@warp-drive/core-types/spec/json-api-raw'; import { ResourceType } from '@warp-drive/core-types/symbols'; class Person extends Model { @@ -61,7 +62,7 @@ class House extends Model { class TestRecordData implements Cache { version = '2' as const; - _errors?: JsonApiError[]; + _errors?: ApiError[]; _isNew = false; _storeWrapper: CacheCapabilitiesManager; _identifier: StableRecordIdentifier; @@ -103,7 +104,7 @@ class TestRecordData implements Cache { const identifier = this._storeWrapper.identifierCache.getOrCreateRecordIdentifier( doc.content.data as RecordIdentifier ); - this.upsert(identifier, doc.content.data as JsonApiResource, this._storeWrapper.hasRecord(identifier)); + this.upsert(identifier, doc.content.data!, this._storeWrapper.hasRecord(identifier)); return { data: identifier } as SingleResourceDataDocument; } } else if ('error' in doc) { @@ -138,7 +139,7 @@ class TestRecordData implements Cache { upsert( identifier: StableRecordIdentifier, - data: JsonApiResource, + data: ExistingResourceObject, calculateChanges?: boolean | undefined ): void | string[] { if (!this._data.has(identifier)) { @@ -160,7 +161,7 @@ class TestRecordData implements Cache { didCommit(identifier: StableRecordIdentifier, result: StructuredDataDocument): SingleResourceDataDocument { return { data: identifier as StableExistingRecordIdentifier }; } - commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[] | undefined): void { + commitWasRejected(identifier: StableRecordIdentifier, errors?: ApiError[] | undefined): void { this._errors = errors; } unloadRecord(identifier: StableRecordIdentifier): void {} @@ -192,7 +193,7 @@ class TestRecordData implements Cache { throw new Error('Method not implemented.'); } - getErrors(identifier: StableRecordIdentifier): JsonApiError[] { + getErrors(identifier: StableRecordIdentifier): ApiError[] { return this._errors || []; } isEmpty(identifier: StableRecordIdentifier): boolean { @@ -218,10 +219,10 @@ module('integration/record-data - Custom RecordData Implementations', function ( owner.register('model:person', Person); owner.register('model:house', House); // @ts-expect-error missing type - // eslint-disable-next-line @typescript-eslint/no-unsafe-call + owner.unregister('service:store'); owner.register('service:store', Store); - owner.register('adapter:application', JSONAPIAdapter.extend()); + owner.register('adapter:application', class extends JSONAPIAdapter {}); owner.register('serializer:application', class extends JSONAPISerializer {}); }); @@ -306,7 +307,7 @@ module('integration/record-data - Custom RecordData Implementations', function ( calledWillCommit++; } - override commitWasRejected(identifier: StableRecordIdentifier, errors: JsonApiError[] | undefined) { + override commitWasRejected(identifier: StableRecordIdentifier, errors: ApiError[] | undefined) { super.commitWasRejected(identifier, errors); calledWasRejected++; } diff --git a/tests/main/tests/integration/records/load-test.js b/tests/main/tests/integration/records/load-test.js index f45b2e04910..7a860e6583a 100644 --- a/tests/main/tests/integration/records/load-test.js +++ b/tests/main/tests/integration/records/load-test.js @@ -153,7 +153,7 @@ module('integration/load - Loading Records', function (hooks) { } catch (e) { assert.strictEqual( e.message, - `Assertion Failed: The 'findRecord' request for person:1 resolved indicating success but contained no primary data. To indicate a 404 not found you should either reject the promise returned by the adapter's findRecord method or throw a NotFoundError.`, + `The 'findRecord' request for person:1 resolved indicating success but contained no primary data. To indicate a 404 not found you should either reject the promise returned by the adapter's findRecord method or throw a NotFoundError.`, 'we throw a meaningful error' ); } diff --git a/tests/main/tests/integration/records/rematerialize-test.js b/tests/main/tests/integration/records/rematerialize-test.js index fdcd86153f3..7b07502e41e 100644 --- a/tests/main/tests/integration/records/rematerialize-test.js +++ b/tests/main/tests/integration/records/rematerialize-test.js @@ -5,7 +5,6 @@ import { setupTest } from 'ember-qunit'; import JSONAPIAdapter from '@ember-data/adapter/json-api'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import JSONAPISerializer from '@ember-data/serializer/json-api'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; module('integration/unload - Rematerializing Unloaded Records', function (hooks) { setupTest(hooks); @@ -162,9 +161,9 @@ module('integration/unload - Rematerializing Unloaded Records', function (hooks) let data; if (param === '1') { - data = deepCopy(BOAT_ONE); + data = structuredClone(BOAT_ONE); } else if (param === '2') { - data = deepCopy(BOAT_TWO); + data = structuredClone(BOAT_TWO); } else { throw new Error(`404: no such boat with id=${param}`); } @@ -193,7 +192,7 @@ module('integration/unload - Rematerializing Unloaded Records', function (hooks) }); const [boaty] = store.push({ - data: [deepCopy(BOAT_ONE), deepCopy(BOAT_TWO)], + data: [structuredClone(BOAT_ONE), structuredClone(BOAT_TWO)], }); // assert our initial cache state diff --git a/tests/main/tests/integration/references/autotracking-test.js b/tests/main/tests/integration/references/autotracking-test.js index 12702162d04..9e95ab31add 100644 --- a/tests/main/tests/integration/references/autotracking-test.js +++ b/tests/main/tests/integration/references/autotracking-test.js @@ -312,7 +312,7 @@ module('integration/references/autotracking', function (hooks) { } catch (e) { assert.strictEqual( e.message, - "Assertion Failed: Expected the ID received for the primary 'user' resource being saved to match the current id '6' but received '7'.", + "Expected the ID received for the primary 'user' resource being saved to match the current id '6' but received '7'.", 'threw error' ); } diff --git a/tests/main/tests/integration/relationships/belongs-to-test.js b/tests/main/tests/integration/relationships/belongs-to-test.js index 06c103d564b..8b945fbb8d6 100644 --- a/tests/main/tests/integration/relationships/belongs-to-test.js +++ b/tests/main/tests/integration/relationships/belongs-to-test.js @@ -91,7 +91,7 @@ module('integration/relationship/belongs-to BelongsTo Relationships (new-style)' } catch (e) { assert.strictEqual( e.message, - `Assertion Failed: fetched the belongsTo relationship 'parentCompany' for company:1 with link '"company/1/parent-company"', but no data member is present in the response. If no data exists, the response should set { data: null }`, + `fetched the belongsTo relationship 'parentCompany' for company:1 with link '"company/1/parent-company"', but no data member is present in the response. If no data exists, the response should set { data: null }`, 'We error appropriately' ); } @@ -533,7 +533,7 @@ module('integration/relationship/belongs_to Belongs-To Relationships', function }, }); post.user; - }, /Assertion Failed: Encountered a relationship identifier without an id for the belongsTo relationship 'user' on , expected an identifier but found/); + }, /Encountered a relationship identifier without an id for the belongsTo relationship 'user' on , expected an identifier but found/); }); testInDebug('Invalid belongsTo relationship identifiers throw errors for null type', function (assert) { @@ -558,7 +558,7 @@ module('integration/relationship/belongs_to Belongs-To Relationships', function }, }); post.user; - }, /Assertion Failed: Encountered a relationship identifier without a type for the belongsTo relationship 'user' on , expected an identifier with type 'user' but found/); + }, /Encountered a relationship identifier without a type for the belongsTo relationship 'user' on , expected an identifier with type 'user' but found/); }); testInDebug( @@ -698,7 +698,7 @@ module('integration/relationship/belongs_to Belongs-To Relationships', function adapter.findBelongsTo = function (store, snapshot, link, relationship) { assert.strictEqual(relationship.type, 'group'); - assert.strictEqual(relationship.key, 'group'); + assert.strictEqual(relationship.name, 'group'); assert.strictEqual(link, '/people/1/group'); return Promise.resolve({ diff --git a/tests/main/tests/integration/relationships/collection/mutating-has-many-test.ts b/tests/main/tests/integration/relationships/collection/mutating-has-many-test.ts index cc99366b85b..92f5084f28c 100644 --- a/tests/main/tests/integration/relationships/collection/mutating-has-many-test.ts +++ b/tests/main/tests/integration/relationships/collection/mutating-has-many-test.ts @@ -8,7 +8,7 @@ import Model, { attr, hasMany } from '@ember-data/model'; import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; import { DEPRECATE_MANY_ARRAY_DUPLICATES } from '@warp-drive/build-config/deprecations'; -import type { ExistingResourceIdentifierObject } from '@warp-drive/core-types/spec/raw'; +import type { ExistingResourceIdentifierObject } from '@warp-drive/core-types/spec/json-api-raw'; import { ResourceType } from '@warp-drive/core-types/symbols'; import type { ReactiveContext } from '../../../helpers/reactive-context'; diff --git a/tests/main/tests/integration/relationships/has-many-test.js b/tests/main/tests/integration/relationships/has-many-test.js index 856c9ab6ecf..948bef0f0be 100644 --- a/tests/main/tests/integration/relationships/has-many-test.js +++ b/tests/main/tests/integration/relationships/has-many-test.js @@ -139,7 +139,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( } catch (e) { assert.strictEqual( e.message, - `Assertion Failed: fetched the hasMany relationship 'employees' for company:1 with link '"company/1/employees"', but no data member is present in the response. If no data exists, the response should set { data: [] }`, + `fetched the hasMany relationship 'employees' for company:1 with link '"company/1/employees"', but no data member is present in the response. If no data exists, the response should set { data: [] }`, 'We error appropriately' ); } @@ -166,7 +166,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( }); post.comments; - }, /Assertion Failed: Encountered a relationship identifier without an id for the hasMany relationship 'comments' on , expected an identifier but found/); + }, /Encountered a relationship identifier without an id for the hasMany relationship 'comments' on , expected an identifier but found/); }); testInDebug('Invalid hasMany relationship identifiers throw errors for missing type', function (assert) { @@ -188,7 +188,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( }, }); post.comments; - }, /Assertion Failed: Encountered a relationship identifier without a type for the hasMany relationship 'comments' on , expected an identifier with type 'comment' but found/); + }, /Encountered a relationship identifier without a type for the hasMany relationship 'comments' on , expected an identifier with type 'comment' but found/); }); test('A record with an async hasMany relationship can safely be saved and later access the relationship', async function (assert) { @@ -930,7 +930,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( adapter.findHasMany = function (store, snapshot, link, relationship) { assert.strictEqual(relationship.type, 'comment', 'findHasMany relationship type was Comment'); - assert.strictEqual(relationship.key, 'comments', 'findHasMany relationship key was comments'); + assert.strictEqual(relationship.name, 'comments', 'findHasMany relationship key was comments'); assert.strictEqual(link, '/posts/1/comments', 'findHasMany link was /posts/1/comments'); return Promise.resolve({ @@ -948,7 +948,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( adapter.findHasMany = function (store, snapshot, link, relationship) { assert.strictEqual(relationship.type, 'comment', 'findHasMany relationship type was Comment'); - assert.strictEqual(relationship.key, 'comments', 'findHasMany relationship key was comments'); + assert.strictEqual(relationship.name, 'comments', 'findHasMany relationship key was comments'); assert.strictEqual(link, '/posts/1/comments', 'findHasMany link was /posts/1/comments'); return Promise.resolve({ @@ -1700,7 +1700,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( } catch (e) { assert.strictEqual( e.message, - "Assertion Failed: The 'post' type does not implement 'comment' and thus cannot be assigned to the 'comments' relationship in 'post'. If this relationship should be polymorphic, mark post.comments as `polymorphic: true` and post.message as implementing it via `as: 'comment'`.", + "The 'post' type does not implement 'comment' and thus cannot be assigned to the 'comments' relationship in 'post'. If this relationship should be polymorphic, mark post.comments as `polymorphic: true` and post.message as implementing it via `as: 'comment'`.", 'should throw' ); } @@ -1775,7 +1775,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( function () { user.messages.push(anotherUser); }, - `Assertion Failed: The schema for the relationship 'user' on 'user' type does not correctly implement 'message' and thus cannot be assigned to the 'messages' relationship in 'user'. If using this record in this polymorphic relationship is desired, correct the errors in the schema shown below: + `The schema for the relationship 'user' on 'user' type does not correctly implement 'message' and thus cannot be assigned to the 'messages' relationship in 'user'. If using this record in this polymorphic relationship is desired, correct the errors in the schema shown below: \`\`\` { @@ -1907,7 +1907,7 @@ module('integration/relationships/has_many - Has-Many Relationships', function ( function () { user.messages.push(anotherUser); }, - `Assertion Failed: No 'user' field exists on 'user'. To use this type in the polymorphic relationship 'user.messages' the relationships schema definition for user should include: + `No 'user' field exists on 'user'. To use this type in the polymorphic relationship 'user.messages' the relationships schema definition for user should include: \`\`\` { @@ -2063,7 +2063,7 @@ If using this relationship in a polymorphic manner is desired, the relationships } catch (e) { assert.strictEqual( e.message, - `Assertion Failed: The '.messages' relationship cannot be used polymorphically because '.user is not a polymorphic relationship. To use this relationship in a polymorphic manner, fix the following schema issues on the relationships schema for 'message': + `The '.messages' relationship cannot be used polymorphically because '.user is not a polymorphic relationship. To use this relationship in a polymorphic manner, fix the following schema issues on the relationships schema for 'message': \`\`\` { @@ -3949,7 +3949,7 @@ If using this relationship in a polymorphic manner is desired, the relationships let hasManyCounter = 0; adapter.findHasMany = function (store, snapshot, link, relationship) { assert.strictEqual(relationship.type, 'comment', 'findHasMany relationship type was Comment'); - assert.strictEqual(relationship.key, 'comments', 'findHasMany relationship key was comments'); + assert.strictEqual(relationship.name, 'comments', 'findHasMany relationship key was comments'); assert.strictEqual(link, '/posts/1/comments', 'findHasMany link was /posts/1/comments'); hasManyCounter++; diff --git a/tests/main/tests/integration/relationships/inverse-relationships-test.js b/tests/main/tests/integration/relationships/inverse-relationships-test.js index 0b79d509739..6ad758ca038 100644 --- a/tests/main/tests/integration/relationships/inverse-relationships-test.js +++ b/tests/main/tests/integration/relationships/inverse-relationships-test.js @@ -39,7 +39,7 @@ module('integration/relationships/inverse_relationships - Inverse Relationships' assert.expectAssertion(function () { post = store.createRecord('post'); post.comments; - }, /Assertion Failed: Expected a relationship schema for 'comment.testPost' to match the inverse of 'post.comments', but no relationship schema was found./); + }, /Expected a relationship schema for 'comment.testPost' to match the inverse of 'post.comments', but no relationship schema was found./); }); testInDebug("Inverse relationships that don't exist throw a nice error for a belongsTo", async function (assert) { diff --git a/tests/main/tests/integration/relationships/json-api-links-test.js b/tests/main/tests/integration/relationships/json-api-links-test.js index 95bcd08fe1a..b5693aee6f1 100644 --- a/tests/main/tests/integration/relationships/json-api-links-test.js +++ b/tests/main/tests/integration/relationships/json-api-links-test.js @@ -8,7 +8,6 @@ import Adapter from '@ember-data/adapter'; import JSONAPIAdapter from '@ember-data/adapter/json-api'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import JSONAPISerializer from '@ember-data/serializer/json-api'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; module('integration/relationship/json-api-links | Relationship state updates', function (hooks) { setupTest(hooks); @@ -690,11 +689,11 @@ module('integration/relationship/json-api-links | Relationship fetching', functi payloads.user.data.relationships.pets.links.related, 'We fetched the appropriate link' ); - return Promise.resolve(deepCopy(payloads.pets)); + return Promise.resolve(structuredClone(payloads.pets)); }; // setup user - const user = store.push(deepCopy(payloads.user)); + const user = store.push(structuredClone(payloads.user)); const pets = await user.pets; assert.ok(!!pets, 'We found our pets'); @@ -732,11 +731,11 @@ module('integration/relationship/json-api-links | Relationship fetching', functi 'We fetched the appropriate link' ); } - return Promise.resolve(deepCopy(payloads.pets)); + return Promise.resolve(structuredClone(payloads.pets)); }; // setup user - const user = store.push(deepCopy(payloads.user)); + const user = store.push(structuredClone(payloads.user)); const pets = await user.pets; assert.ok(!!pets, 'We found our pets'); @@ -780,11 +779,11 @@ module('integration/relationship/json-api-links | Relationship fetching', functi 'We fetched the appropriate link' ); } - return Promise.resolve(deepCopy(payloads.home)); + return Promise.resolve(structuredClone(payloads.home)); }; // setup user - const user = store.push(deepCopy(payloads.user)); + const user = store.push(structuredClone(payloads.user)); const home = user.home; await home; @@ -819,11 +818,11 @@ module('integration/relationship/json-api-links | Relationship fetching', functi !homeRelWasEmpty && link === payloads.user.data.relationships.home.links.related, 'We fetched the appropriate link' ); - return Promise.resolve(deepCopy(payloads.home)); + return Promise.resolve(structuredClone(payloads.home)); }; // setup user - const user = store.push(deepCopy(payloads.user)); + const user = store.push(structuredClone(payloads.user)); const home = await user.home; assert.ok(!!home, 'We found our home'); @@ -991,12 +990,12 @@ module('integration/relationship/json-api-links | Relationship fetching', functi payloads.user.data.relationships.pets.links.related, 'We fetched the appropriate link' ); - return Promise.resolve(deepCopy(payloads.pets)); + return Promise.resolve(structuredClone(payloads.pets)); }; // setup user and pets - const user = store.push(deepCopy(payloads.user)); - store.push(deepCopy(payloads.pets)); + const user = store.push(structuredClone(payloads.user)); + store.push(structuredClone(payloads.pets)); const pets = await user.pets; assert.ok(!!pets, 'We found our pets'); @@ -1023,12 +1022,12 @@ module('integration/relationship/json-api-links | Relationship fetching', functi payloads.user.data.relationships.pets.links.related, 'We fetched the appropriate link' ); - return Promise.resolve(deepCopy(payloads.pets)); + return Promise.resolve(structuredClone(payloads.pets)); }; // setup user and pets - const user = store.push(deepCopy(payloads.user)); - store.push(deepCopy(payloads.pets)); + const user = store.push(structuredClone(payloads.user)); + store.push(structuredClone(payloads.pets)); const pets = await user.pets; assert.ok(!!pets, 'We found our pets'); @@ -1058,12 +1057,12 @@ module('integration/relationship/json-api-links | Relationship fetching', functi payloads.user.data.relationships.home.links.related, 'We fetched the appropriate link' ); - return Promise.resolve(deepCopy(payloads.home)); + return Promise.resolve(structuredClone(payloads.home)); }; // setup user and home - const user = store.push(deepCopy(payloads.user)); - store.push(deepCopy(payloads.home)); + const user = store.push(structuredClone(payloads.user)); + store.push(structuredClone(payloads.home)); await settled(); const home = user.home; @@ -1093,12 +1092,12 @@ module('integration/relationship/json-api-links | Relationship fetching', functi payloads.user.data.relationships.home.links.related, 'We fetched the appropriate link' ); - return Promise.resolve(deepCopy(payloads.home)); + return Promise.resolve(structuredClone(payloads.home)); }; // setup user - const user = store.push(deepCopy(payloads.user)); - store.push(deepCopy(payloads.home)); + const user = store.push(structuredClone(payloads.user)); + store.push(structuredClone(payloads.home)); await settled(); const home = await user.home; @@ -1949,8 +1948,8 @@ module('integration/relationship/json-api-links | Relationship fetching', functi }; // setup users - const user1 = store.push(deepCopy(user1Payload)); - const user2 = store.push(deepCopy(user2Payload)); + const user1 = store.push(structuredClone(user1Payload)); + const user2 = store.push(structuredClone(user2Payload)); // should not fire a request requestedUser = null; diff --git a/tests/main/tests/integration/serializers/embedded-records-mixin-test.js b/tests/main/tests/integration/serializers/embedded-records-mixin-test.js index 35d2cb5dc76..711bef5efd5 100644 --- a/tests/main/tests/integration/serializers/embedded-records-mixin-test.js +++ b/tests/main/tests/integration/serializers/embedded-records-mixin-test.js @@ -1636,7 +1636,7 @@ module('integration/embedded-records-mixin', function (hooks) { serializeHasMany(snapshot, json, relationship) { calledSerializeHasMany = true; - const key = relationship.key; + const key = relationship.name; const payloadKey = this.keyForRelationship ? this.keyForRelationship(key, 'hasMany') : key; const schema = this.store.modelFor(snapshot.modelName); const relationshipType = schema.determineRelationshipType(relationship, store); diff --git a/tests/main/tests/integration/serializers/json-serializer-test.js b/tests/main/tests/integration/serializers/json-serializer-test.js index 8df9c892aef..fb46cff7328 100644 --- a/tests/main/tests/integration/serializers/json-serializer-test.js +++ b/tests/main/tests/integration/serializers/json-serializer-test.js @@ -371,7 +371,7 @@ module('integration/serializer/json - JSONSerializer', function (hooks) { var snapshot = post._createSnapshot(); var relationship = snapshot.record.relationshipFor('comments'); - var key = relationship.key; + var key = relationship.name; var shouldSerialize = store.serializerFor('post').shouldSerializeHasMany(snapshot, key, relationship); @@ -423,9 +423,9 @@ module('integration/serializer/json - JSONSerializer', function (hooks) { 'serializer:comment', JSONSerializer.extend({ serializePolymorphicType(record, json, relationship) { - const key = relationship.key; + const key = relationship.name; const belongsTo = record.belongsTo(key); - json[relationship.key + 'TYPE'] = belongsTo.modelName; + json[relationship.name + 'TYPE'] = belongsTo.modelName; assert.ok(true, 'serializePolymorphicType is called when serialize a polymorphic belongsTo'); }, @@ -1213,7 +1213,7 @@ module('integration/serializer/json - JSONSerializer', function (hooks) { 'serializer:favorite', JSONSerializer.extend({ serializePolymorphicType(snapshot, json, relationship) { - var key = relationship.key; + var key = relationship.name; json[key + 'TYPE'] = snapshot.belongsTo(key).modelName; }, }) diff --git a/tests/main/tests/integration/snapshot-test.js b/tests/main/tests/integration/snapshot-test.js index 504ac3cfe2a..191e9d66891 100644 --- a/tests/main/tests/integration/snapshot-test.js +++ b/tests/main/tests/integration/snapshot-test.js @@ -9,6 +9,10 @@ import JSONAPISerializer from '@ember-data/serializer/json-api'; let owner, store; +function isSnapshot(snapshot) { + return snapshot instanceof Snapshot || snapshot.constructor.name === 'Snapshot'; +} + module('integration/snapshot - Snapshot', function (hooks) { setupTest(hooks); hooks.beforeEach(function () { @@ -61,7 +65,7 @@ module('integration/snapshot - Snapshot', function (hooks) { street: undefined, }; - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); assert.deepEqual(snapshot.attributes(), expected, 'We generated attributes with default values'); store.destroy(); @@ -82,7 +86,7 @@ module('integration/snapshot - Snapshot', function (hooks) { const post = store.peekRecord('post', 1); const snapshot = post._createSnapshot(); - assert.ok(snapshot instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(snapshot), 'snapshot is an instance of Snapshot'); }); test('snapshot.id, and snapshot.modelName returns correctly', function (assert) { @@ -339,7 +343,7 @@ module('integration/snapshot - Snapshot', function (hooks) { const snapshot = comment._createSnapshot(); const relationship = snapshot.belongsTo('post'); - assert.ok(relationship instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(relationship), 'snapshot is an instance of Snapshot'); assert.strictEqual(relationship.id, '1', 'post id is correct'); assert.strictEqual(relationship.attr('title'), 'Hello World', 'post title is correct'); }); @@ -376,7 +380,7 @@ module('integration/snapshot - Snapshot', function (hooks) { const snapshot = comment._createSnapshot(); const relationship = snapshot.belongsTo('post'); - assert.ok(relationship instanceof Snapshot, 'snapshot is an instance of Snapshot'); + assert.ok(isSnapshot(relationship), 'snapshot is an instance of Snapshot'); assert.deepEqual(relationship.changedAttributes(), {}, 'changedAttributes are correct'); }); @@ -557,7 +561,7 @@ module('integration/snapshot - Snapshot', function (hooks) { assert.ok(hasManyRelationship instanceof Array, 'hasMany relationship is an instance of Array'); assert.strictEqual(hasManyRelationship.length, 1, 'hasMany relationship contains related object'); - assert.ok(belongsToRelationship instanceof Snapshot, 'belongsTo relationship is an instance of Snapshot'); + assert.ok(isSnapshot(belongsToRelationship), 'belongsTo relationship is an instance of Snapshot'); assert.strictEqual( belongsToRelationship.attr('title'), 'Hello World', @@ -601,7 +605,7 @@ module('integration/snapshot - Snapshot', function (hooks) { assert.ok(hasManyRelationship instanceof Array, 'hasMany relationship is an instance of Array'); assert.strictEqual(hasManyRelationship.length, 1, 'hasMany relationship contains related object'); - assert.ok(belongsToRelationship instanceof Snapshot, 'belongsTo relationship is an instance of Snapshot'); + assert.ok(isSnapshot(belongsToRelationship), 'belongsTo relationship is an instance of Snapshot'); assert.strictEqual( belongsToRelationship.attr('title'), 'Hello World', @@ -644,7 +648,7 @@ module('integration/snapshot - Snapshot', function (hooks) { assert.ok(hasManyRelationship instanceof Array, 'hasMany relationship is an instance of Array'); assert.strictEqual(hasManyRelationship.length, 1, 'hasMany relationship contains related object'); - assert.ok(belongsToRelationship instanceof Snapshot, 'belongsTo relationship is an instance of Snapshot'); + assert.ok(isSnapshot(belongsToRelationship), 'belongsTo relationship is an instance of Snapshot'); assert.strictEqual( belongsToRelationship.attr('title'), 'Hello World', @@ -811,7 +815,7 @@ module('integration/snapshot - Snapshot', function (hooks) { const relationship1 = relationship[0]; - assert.ok(relationship1 instanceof Snapshot, 'relationship item is an instance of Snapshot'); + assert.ok(isSnapshot(relationship1), 'relationship item is an instance of Snapshot'); assert.strictEqual(relationship1.id, '1', 'relationship item id is correct'); assert.strictEqual(relationship1.attr('body'), 'This is the first comment', 'relationship item body is correct'); }); diff --git a/tests/main/tests/integration/store-extension-test.ts b/tests/main/tests/integration/store-extension-test.ts index b939191c224..0e19d59bd8f 100644 --- a/tests/main/tests/integration/store-extension-test.ts +++ b/tests/main/tests/integration/store-extension-test.ts @@ -16,10 +16,7 @@ module('Integration | Store Extension', function (hooks) { owner.register('service:store', CustomStore); const store = owner.lookup('service:store') as CustomStore; - assert.true( - store.requestManager instanceof RequestManager, - 'We create a request manager for the store automatically' - ); + assert.true(typeof store.requestManager !== 'undefined', 'We create a request manager for the store automatically'); }); test('We can create a store with a custom request manager injected as a service', function (assert) { @@ -40,7 +37,7 @@ module('Integration | Store Extension', function (hooks) { const { owner } = this; const requestManager = new RequestManager(); class CustomStore extends Store { - override requestManager = requestManager; + requestManager = requestManager; } owner.register('service:store', CustomStore); diff --git a/tests/main/tests/integration/store-test.js b/tests/main/tests/integration/store-test.js index 3351f125baf..3de4d68a3db 100644 --- a/tests/main/tests/integration/store-test.js +++ b/tests/main/tests/integration/store-test.js @@ -10,7 +10,6 @@ import RESTAdapter from '@ember-data/adapter/rest'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; import JSONAPISerializer from '@ember-data/serializer/json-api'; import RESTSerializer from '@ember-data/serializer/rest'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; class Person extends Model { @@ -34,7 +33,7 @@ class Car extends Model { function ajaxResponse(value) { return function (url, verb, hash) { - return Promise.resolve(deepCopy(value)); + return Promise.resolve(structuredClone(value)); }; } @@ -173,7 +172,7 @@ module('integration/store - destroy', function (hooks) { await requestPromise; assert.ok(false, 'We should reject with a meaningful error'); } catch (e) { - assert.strictEqual(e.message, 'Assertion Failed: Async Leak Detected: Expected the store to not be destroyed'); + assert.strictEqual(e.message, 'Async Leak Detected: Expected the store to not be destroyed'); } }); @@ -678,7 +677,7 @@ module('integration/store - findRecord', function (hooks) { adapter.ajax = async function () { await promise; - return deepCopy({ + return structuredClone({ cars: [ { id: '1', @@ -733,7 +732,7 @@ module('integration/store - findRecord', function (hooks) { adapter.ajax = async function () { await Promise.resolve(); - return deepCopy({ + return structuredClone({ cars: [ { id: '1', diff --git a/tests/main/tests/integration/store/adapter-for-test.js b/tests/main/tests/integration/store/adapter-for-test.js index efd9587f4e5..d5573ba97d0 100644 --- a/tests/main/tests/integration/store/adapter-for-test.js +++ b/tests/main/tests/integration/store/adapter-for-test.js @@ -46,7 +46,7 @@ module('integration/store - adapterFor', function (hooks) { return lookup.call(owner, registrationName); }; store.adapterFor('person'); - }, /Assertion Failed: No adapter was found for 'person' and no 'application' adapter was found as a fallback/); + }, /No adapter was found for 'person' and no 'application' adapter was found as a fallback/); }); test('we find and instantiate the application adapter', async function (assert) { diff --git a/tests/main/tests/test-helper.js b/tests/main/tests/test-helper.js index 592e17b9154..a28ce2366a6 100644 --- a/tests/main/tests/test-helper.js +++ b/tests/main/tests/test-helper.js @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-restricted-imports import { _backburner } from '@ember/runloop'; import { getSettledState, isSettled, registerHook, setApplication } from '@ember/test-helpers'; import { getPendingWaiterState } from '@ember/test-waiters'; @@ -9,7 +8,7 @@ import { setup } from 'qunit-dom'; import start from 'ember-exam/test-support/start'; import { setBuildURLConfig } from '@ember-data/request-utils'; -import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts'; +import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts/index'; import { setConfig, setTestId } from '@warp-drive/holodeck'; import Application from '../app'; @@ -127,7 +126,6 @@ function setupMemoryTracking() { } // if the gc is exposed, use it if (typeof gc !== 'undefined') { - // eslint-disable-next-line no-undef gc(); } diff --git a/tests/main/tests/unit/adapter-errors-test.js b/tests/main/tests/unit/adapter-errors-test.js index 721814ad482..a5db6d55b6c 100644 --- a/tests/main/tests/unit/adapter-errors-test.js +++ b/tests/main/tests/unit/adapter-errors-test.js @@ -16,80 +16,80 @@ module('unit/adapter-errors - AdapterError', function () { test('AdapterError', function (assert) { const error = new AdapterError(); - assert.ok(error instanceof Error); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'Adapter operation failed'); }); test('InvalidError', function (assert) { const error = new InvalidError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter rejected the commit because it was invalid'); }); test('TimeoutError', function (assert) { const error = new TimeoutError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter operation timed out'); }); test('AbortError', function (assert) { const error = new AbortError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter operation was aborted'); }); test('UnauthorizedError', function (assert) { const error = new UnauthorizedError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter operation is unauthorized'); }); test('ForbiddenError', function (assert) { const error = new ForbiddenError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter operation is forbidden'); }); test('NotFoundError', function (assert) { const error = new NotFoundError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter could not find the resource'); }); test('ConflictError', function (assert) { const error = new ConflictError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter operation failed due to a conflict'); }); test('ServerError', function (assert) { const error = new ServerError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'The adapter operation failed due to a server error'); }); @@ -97,9 +97,9 @@ module('unit/adapter-errors - AdapterError', function () { const CustomAdapterError = AdapterError.extend(); const error = new CustomAdapterError(); - assert.ok(error instanceof Error); - assert.ok(error instanceof AdapterError); - assert.ok(error.isAdapterError); + assert.true(error instanceof Error, 'error is instanceof Error'); + assert.true(error instanceof AdapterError, 'error is instanceof AdapterError'); + assert.true(error.isAdapterError, 'error.isAdapterError'); assert.strictEqual(error.message, 'Adapter operation failed'); }); 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 1da8146e40d..8e904882056 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 @@ -6,14 +6,15 @@ import { setupTest } from 'ember-qunit'; 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 type { Cache } from '@ember-data/store/-types/q/cache'; -import type { FieldSchema, SchemaService } from '@ember-data/store/-types/q/schema-service'; +import type { SchemaService } from '@ember-data/store/types'; +import type { Cache } from '@warp-drive/core-types/cache'; import type { RecordIdentifier, StableRecordIdentifier } from '@warp-drive/core-types/identifier'; -import type { AttributesSchema, RelationshipsSchema } from '@warp-drive/core-types/schema'; +import type { FieldSchema, LegacyAttributeField } from '@warp-drive/core-types/schema/fields'; module('unit/model - Custom Class Model', function (hooks: NestedHooks) { class Person { - constructor(public store: Store) { + declare store: Store; + constructor(store: Store) { this.store = store; } // these types aren't correct but we don't have a registry to help @@ -24,8 +25,8 @@ module('unit/model - Custom Class Model', function (hooks: NestedHooks) { } class TestSchema { - attributesDefinitionFor(identifier: { type: T }): AttributesSchema { - const schema: AttributesSchema = {}; + attributesDefinitionFor(identifier: { type: T }): Record { + const schema: Record = {}; schema.name = { kind: 'attribute', options: {}, @@ -60,7 +61,7 @@ module('unit/model - Custom Class Model', function (hooks: NestedHooks) { return fieldDefs; } - relationshipsDefinitionFor(identifier: { type: T }): RelationshipsSchema { + relationshipsDefinitionFor(identifier: { type: T }): ReturnType { return {}; } @@ -239,7 +240,9 @@ module('unit/model - Custom Class Model', function (hooks: NestedHooks) { this.owner.register('service:store', CustomStore); const store = this.owner.lookup('service:store') as Store; class TestSchema2 { - attributesDefinitionFor(identifier: RecordIdentifier | { type: string }): AttributesSchema { + attributesDefinitionFor( + identifier: RecordIdentifier | { type: string } + ): ReturnType { assert.step('Schema:attributesDefinitionFor'); if (typeof identifier === 'string') { assert.strictEqual(identifier, 'person', 'type passed in to the schema hooks'); @@ -289,7 +292,9 @@ module('unit/model - Custom Class Model', function (hooks: NestedHooks) { return fieldDefs; } - relationshipsDefinitionFor(identifier: RecordIdentifier | { type: string }): RelationshipsSchema { + relationshipsDefinitionFor( + identifier: RecordIdentifier | { type: string } + ): ReturnType { assert.step('Schema:relationshipsDefinitionFor'); if (typeof identifier === 'string') { assert.strictEqual(identifier, 'person', 'type passed in to the schema hooks'); @@ -422,7 +427,9 @@ module('unit/model - Custom Class Model', function (hooks: NestedHooks) { this.owner.register('service:store', CustomStore); const store = this.owner.lookup('service:store') as Store; class TestSchema2 { - attributesDefinitionFor(identifier: RecordIdentifier | { type: string }): AttributesSchema { + attributesDefinitionFor( + identifier: RecordIdentifier | { type: string } + ): ReturnType { const modelName = (identifier as RecordIdentifier).type || identifier; if (modelName === 'person') { return { @@ -472,7 +479,9 @@ module('unit/model - Custom Class Model', function (hooks: NestedHooks) { return fieldDefs; } - relationshipsDefinitionFor(identifier: RecordIdentifier | { type: string }): RelationshipsSchema { + relationshipsDefinitionFor( + identifier: RecordIdentifier | { type: string } + ): ReturnType { const modelName = (identifier as RecordIdentifier).type || identifier; if (modelName === 'person') { return { diff --git a/tests/main/tests/unit/debug-test.js b/tests/main/tests/unit/debug-test.js index db35fe8cac0..02cd743f6c6 100644 --- a/tests/main/tests/unit/debug-test.js +++ b/tests/main/tests/unit/debug-test.js @@ -31,9 +31,9 @@ module('Debug', function (hooks) { this.owner.register('model:post', Post); this.owner.register('model:user', User); - let record = this.owner.lookup('service:store').createRecord('user'); + const record = this.owner.lookup('service:store').createRecord('user'); - let propertyInfo = record._debugInfo().propertyInfo; + const propertyInfo = record._debugInfo().propertyInfo; assert.strictEqual(propertyInfo.groups.length, 4); assert.strictEqual(propertyInfo.groups[0].name, 'Attributes'); diff --git a/tests/main/tests/unit/legacy-compat/formatted-id-test.js b/tests/main/tests/unit/legacy-compat/formatted-id-test.js index 09e5e9fed0a..6e76d942d9e 100644 --- a/tests/main/tests/unit/legacy-compat/formatted-id-test.js +++ b/tests/main/tests/unit/legacy-compat/formatted-id-test.js @@ -13,42 +13,42 @@ module('Unit | Data Utils | ID | formattedId (util)', function () { test('it throws an error when the id is undefined', function (assert) { assert.throws(() => { formattedId(); - }, /Error: Assertion Failed: formattedId: id must not be undefined/); + }, /Error: formattedId: id must not be undefined/); }); test('it throws an error when the id is empty', function (assert) { assert.throws(() => { formattedId(''); - }, /Error: Assertion Failed: formattedId: id must not be empty/); + }, /Error: formattedId: id must not be empty/); }); test('it throws an error when the id is 0', function (assert) { assert.throws(() => { formattedId(0); - }, /Error: Assertion Failed: formattedId: id must not be 0/); + }, /Error: formattedId: id must not be 0/); }); test('it throws an error when the id is "0"', function (assert) { assert.throws(() => { formattedId('0'); - }, /Error: Assertion Failed: formattedId: id must not be 0/); + }, /Error: formattedId: id must not be 0/); }); test('it throws an error when the id is not a string', function (assert) { assert.throws(() => { formattedId(new Date()); - }, /Error: Assertion Failed: formattedId: id must be a number, string or null/); + }, /Error: formattedId: id must be a number, string or null/); assert.throws(() => { formattedId([]); - }, /Error: Assertion Failed: formattedId: id must be a number, string or null/); + }, /Error: formattedId: id must be a number, string or null/); assert.throws(() => { formattedId(true); - }, /Error: Assertion Failed: formattedId: id must be a number, string or null/); + }, /Error: formattedId: id must be a number, string or null/); assert.throws(() => { formattedId(false); - }, /Error: Assertion Failed: formattedId: id must be a number, string or null/); + }, /Error: formattedId: id must be a number, string or null/); }); }); diff --git a/tests/main/tests/unit/legacy-compat/formatted-type-test.js b/tests/main/tests/unit/legacy-compat/formatted-type-test.js index 356bc34ab99..efab87a8109 100644 --- a/tests/main/tests/unit/legacy-compat/formatted-type-test.js +++ b/tests/main/tests/unit/legacy-compat/formatted-type-test.js @@ -25,28 +25,28 @@ module('Unit | Data Utils | Type | formattedType (util)', function () { test('it throws an error when the type is null', function (assert) { assert.throws(() => { formattedType(null); - }, /Error: Assertion Failed: formattedType: type must not be null/); + }, /Error: formattedType: type must not be null/); }); test('it throws an error when the type is undefined', function (assert) { assert.throws(() => { formattedType(); - }, /Error: Assertion Failed: formattedType: type must not be undefined/); + }, /Error: formattedType: type must not be undefined/); }); test('it throws an error when the type is empty', function (assert) { assert.throws(() => { formattedType(''); - }, /Error: Assertion Failed: formattedType: type must not be empty/); + }, /Error: formattedType: type must not be empty/); }); test('it throws an error when the type is not a string', function (assert) { assert.throws(() => { formattedType(new Date()); - }, /Error: Assertion Failed: formattedType: type must be a string/); + }, /Error: formattedType: type must be a string/); assert.throws(() => { formattedType([]); - }, /Error: Assertion Failed: formattedType: type must be a string/); + }, /Error: formattedType: type must be a string/); }); }); diff --git a/tests/main/tests/unit/legacy-compat/is-equiv-id-test.js b/tests/main/tests/unit/legacy-compat/is-equiv-id-test.js index ff59417c0df..f85166058e4 100644 --- a/tests/main/tests/unit/legacy-compat/is-equiv-id-test.js +++ b/tests/main/tests/unit/legacy-compat/is-equiv-id-test.js @@ -18,57 +18,57 @@ module('Unit | Data Utils | ID | isEquivId (util)', function () { test('it throws an error when expected id is null', function (assert) { assert.throws(() => { isEquivId(null, '1'); - }, /Error: Assertion Failed: isEquivId: Expected id must not be null/); + }, /Error: isEquivId: Expected id must not be null/); }); test('it throws an error when id is undefined', function (assert) { assert.throws(() => { isEquivId(undefined, '1'); - }, /Error: Assertion Failed: isEquivId: Expected id must not be undefined/); + }, /Error: isEquivId: Expected id must not be undefined/); assert.throws(() => { isEquivId('post', undefined); - }, /Error: Assertion Failed: isEquivId: Actual id must not be undefined/); + }, /Error: isEquivId: Actual id must not be undefined/); }); test('it throws an error when the id is empty', function (assert) { assert.throws(() => { isEquivId('', '1'); - }, /Error: Assertion Failed: isEquivId: Expected id must not be empty/); + }, /Error: isEquivId: Expected id must not be empty/); assert.throws(() => { isEquivId('1', ''); - }, /Error: Assertion Failed: isEquivId: Actual id must not be empty/); + }, /Error: isEquivId: Actual id must not be empty/); }); test('it throws an error when the id is 0', function (assert) { assert.throws(() => { isEquivId(0, '1'); - }, /Error: Assertion Failed: isEquivId: Expected id must not be 0/); + }, /Error: isEquivId: Expected id must not be 0/); assert.throws(() => { isEquivId('0', '1'); - }, /Error: Assertion Failed: isEquivId: Expected id must not be 0/); + }, /Error: isEquivId: Expected id must not be 0/); assert.throws(() => { isEquivId('1', 0); - }, /Error: Assertion Failed: isEquivId: Actual id must not be 0/); + }, /Error: isEquivId: Actual id must not be 0/); assert.throws(() => { isEquivId('1', '0'); - }, /Error: Assertion Failed: isEquivId: Actual id must not be 0/); + }, /Error: isEquivId: Actual id must not be 0/); }); test('it throws an error when the id is not a string', function (assert) { assert.throws(() => { isEquivId(new Date(), '1'); - }, /Error: Assertion Failed: isEquivId: Expected id must be a number or string/); + }, /Error: isEquivId: Expected id must be a number or string/); assert.throws(() => { isEquivId([], '1'); - }, /Error: Assertion Failed: isEquivId: Expected id must be a number or string/); + }, /Error: isEquivId: Expected id must be a number or string/); assert.throws(() => { isEquivId('1', new Date()); - }, /Error: Assertion Failed: isEquivId: Actual id must be a number, string or null/); + }, /Error: isEquivId: Actual id must be a number, string or null/); assert.throws(() => { isEquivId('1', []); - }, /Error: Assertion Failed: isEquivId: Actual id must be a number, string or null/); + }, /Error: isEquivId: Actual id must be a number, string or null/); }); }); diff --git a/tests/main/tests/unit/legacy-compat/is-equiv-type-test.js b/tests/main/tests/unit/legacy-compat/is-equiv-type-test.js index c919ee87161..243ba3065b4 100644 --- a/tests/main/tests/unit/legacy-compat/is-equiv-type-test.js +++ b/tests/main/tests/unit/legacy-compat/is-equiv-type-test.js @@ -42,45 +42,45 @@ module('Unit | Data Utils | Type | isEquivType (util)', function () { test('it throws an error when type is null', function (assert) { assert.throws(() => { isEquivType(null, 'post'); - }, /Error: Assertion Failed: isEquivType: Expected type must not be null/); + }, /Error: isEquivType: Expected type must not be null/); assert.throws(() => { isEquivType('post', null); - }, /Error: Assertion Failed: isEquivType: Actual type must not be null/); + }, /Error: isEquivType: Actual type must not be null/); }); test('it throws an error when type is undefined', function (assert) { assert.throws(() => { isEquivType(undefined, 'post'); - }, /Error: Assertion Failed: isEquivType: Expected type must not be undefined/); + }, /Error: isEquivType: Expected type must not be undefined/); assert.throws(() => { isEquivType('post', undefined); - }, /Error: Assertion Failed: isEquivType: Actual type must not be undefined/); + }, /Error: isEquivType: Actual type must not be undefined/); }); test('it throws an error when the type is empty', function (assert) { assert.throws(() => { isEquivType('', 'post'); - }, /Error: Assertion Failed: isEquivType: Expected type must not be empty/); + }, /Error: isEquivType: Expected type must not be empty/); assert.throws(() => { isEquivType('post', ''); - }, /Error: Assertion Failed: isEquivType: Actual type must not be empty/); + }, /Error: isEquivType: Actual type must not be empty/); }); test('it throws an error when the type is not a string', function (assert) { assert.throws(() => { isEquivType(new Date(), 'post'); - }, /Error: Assertion Failed: isEquivType: Expected type must be a string/); + }, /Error: isEquivType: Expected type must be a string/); assert.throws(() => { isEquivType([], 'post'); - }, /Error: Assertion Failed: isEquivType: Expected type must be a string/); + }, /Error: isEquivType: Expected type must be a string/); assert.throws(() => { isEquivType('post', new Date()); - }, /Error: Assertion Failed: isEquivType: Actual type must be a string/); + }, /Error: isEquivType: Actual type must be a string/); assert.throws(() => { isEquivType('post', []); - }, /Error: Assertion Failed: isEquivType: Actual type must be a string/); + }, /Error: isEquivType: Actual type must be a string/); }); }); diff --git a/tests/main/tests/unit/model-test.js b/tests/main/tests/unit/model-test.js index 0d5db5636de..b5ca7af2b87 100644 --- a/tests/main/tests/unit/model-test.js +++ b/tests/main/tests/unit/model-test.js @@ -1313,7 +1313,7 @@ module('unit/model - Model', function (hooks) { assert.expectAssertion(() => { person.attr(); - }, /Assertion Failed: The `attr` method is not available on Model, a Snapshot was probably expected\. Are you passing a Model instead of a Snapshot to your serializer\?/); + }, /The `attr` method is not available on Model, a Snapshot was probably expected\. Are you passing a Model instead of a Snapshot to your serializer\?/); }); }); }); diff --git a/tests/main/tests/unit/model/relationships/has-many-test.js b/tests/main/tests/unit/model/relationships/has-many-test.js index 42eb0600340..a5e76f97a2c 100644 --- a/tests/main/tests/unit/model/relationships/has-many-test.js +++ b/tests/main/tests/unit/model/relationships/has-many-test.js @@ -6,7 +6,7 @@ import { setupTest } from 'ember-qunit'; import Adapter from '@ember-data/adapter'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; -import { LEGACY_SUPPORT, PromiseManyArray } from '@ember-data/model/-private'; +import { LEGACY_SUPPORT } from '@ember-data/model/-private'; import JSONAPISerializer from '@ember-data/serializer/json-api'; import { recordIdentifierFor } from '@ember-data/store'; import { deprecatedTest } from '@ember-data/unpublished-test-infra/test-support/deprecated-test'; @@ -2287,7 +2287,7 @@ module('unit/model/relationships - hasMany', function (hooks) { const store = this.owner.lookup('service:store'); const tag = store.createRecord('tag'); - assert.ok(tag.people instanceof PromiseManyArray, 'people should be an async relationship'); + assert.ok(typeof tag.people.then === 'function', 'people should be an async relationship'); }); test('PromiseHasMany is stable', async function (assert) { @@ -2655,7 +2655,7 @@ module('unit/model/relationships - hasMany', function (hooks) { const adapter = store.adapterFor('application'); adapter.findHasMany = function (store, snapshot, url, relationship) { - assert.strictEqual(relationship.key, 'tags', 'relationship should be tags'); + assert.strictEqual(relationship.name, 'tags', 'relationship should be tags'); return { data: [ diff --git a/tests/main/tests/unit/model/relationships/record-array-test.js b/tests/main/tests/unit/model/relationships/record-array-test.js index 6120d4c7ff4..ae664cf5af9 100644 --- a/tests/main/tests/unit/model/relationships/record-array-test.js +++ b/tests/main/tests/unit/model/relationships/record-array-test.js @@ -6,7 +6,7 @@ import { setupTest } from 'ember-qunit'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; -module('unit/model/relationships - RecordArray', function (hooks) { +module('unit/model/relationships - ManyArray', function (hooks) { setupTest(hooks); test('can create child record from a hasMany relationship', async function (assert) { diff --git a/tests/main/tests/unit/record-arrays/adapter-populated-record-array-test.js b/tests/main/tests/unit/record-arrays/adapter-populated-record-array-test.js index 00e748de10b..e062ef640ab 100644 --- a/tests/main/tests/unit/record-arrays/adapter-populated-record-array-test.js +++ b/tests/main/tests/unit/record-arrays/adapter-populated-record-array-test.js @@ -4,7 +4,7 @@ import { setupTest } from 'ember-qunit'; import Model, { attr } from '@ember-data/model'; import { createDeferred } from '@ember-data/request'; -import { AdapterPopulatedRecordArray, RecordArrayManager, SOURCE } from '@ember-data/store/-private'; +import { CollectionRecordArray, RecordArrayManager, SOURCE } from '@ember-data/store/-private'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; class Tag extends Model { @@ -12,11 +12,11 @@ class Tag extends Model { name; } -module('unit/record-arrays/adapter-populated-record-array - DS.AdapterPopulatedRecordArray', function (hooks) { +module('unit/record-arrays/collection', function (hooks) { setupTest(hooks); test('default initial state', async function (assert) { - const recordArray = new AdapterPopulatedRecordArray({ + const recordArray = new CollectionRecordArray({ type: 'recordType', isLoaded: false, identifiers: [], @@ -33,7 +33,7 @@ module('unit/record-arrays/adapter-populated-record-array - DS.AdapterPopulatedR test('custom initial state', async function (assert) { const store = {}; - const recordArray = new AdapterPopulatedRecordArray({ + const recordArray = new CollectionRecordArray({ type: 'apple', isLoaded: true, identifiers: ['1'], @@ -51,13 +51,13 @@ module('unit/record-arrays/adapter-populated-record-array - DS.AdapterPopulatedR }); testInDebug('mutation throws error', function (assert) { - const recordArray = new AdapterPopulatedRecordArray({ type: 'recordType', identifiers: [] }); + const recordArray = new CollectionRecordArray({ type: 'recordType', identifiers: [] }); assert.throws( () => { recordArray.splice(0, 1); }, - Error('Assertion Failed: Mutating this array of records via splice is not allowed.'), + Error('Mutating this array of records via splice is not allowed.'), 'throws error' ); }); @@ -77,7 +77,7 @@ module('unit/record-arrays/adapter-populated-record-array - DS.AdapterPopulatedR }, }; - const recordArray = new AdapterPopulatedRecordArray({ + const recordArray = new CollectionRecordArray({ type: 'recordType', store, identifiers: [], @@ -114,7 +114,7 @@ module('unit/record-arrays/adapter-populated-record-array - DS.AdapterPopulatedR const manager = new RecordArrayManager({ store, }); - const recordArray = new AdapterPopulatedRecordArray({ + const recordArray = new CollectionRecordArray({ query: 'some-query', manager, identifiers: [], diff --git a/tests/main/tests/unit/record-arrays/record-array-test.js b/tests/main/tests/unit/record-arrays/record-array-test.js index efaa640bed4..bd24c73088f 100644 --- a/tests/main/tests/unit/record-arrays/record-array-test.js +++ b/tests/main/tests/unit/record-arrays/record-array-test.js @@ -6,7 +6,7 @@ import { FetchManager, SnapshotRecordArray } from '@ember-data/legacy-compat/-pr import Model, { attr } from '@ember-data/model'; import { createDeferred } from '@ember-data/request'; import { recordIdentifierFor } from '@ember-data/store'; -import { RecordArray, SOURCE } from '@ember-data/store/-private'; +import { LiveArray, SOURCE } from '@ember-data/store/-private'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; class Tag extends Model { @@ -14,11 +14,11 @@ class Tag extends Model { name; } -module('unit/record-arrays/record-array - DS.RecordArray', function (hooks) { +module('unit/record-arrays/live-array - LiveArray', function (hooks) { setupTest(hooks); test('default initial state', async function (assert) { - const recordArray = new RecordArray({ type: 'recordType', identifiers: [], store: null }); + const recordArray = new LiveArray({ type: 'recordType', identifiers: [], store: null }); assert.false(recordArray.isUpdating, 'record is not updating'); assert.strictEqual(recordArray.modelName, 'recordType', 'has modelName'); @@ -28,7 +28,7 @@ module('unit/record-arrays/record-array - DS.RecordArray', function (hooks) { test('custom initial state', async function (assert) { const store = {}; - const recordArray = new RecordArray({ + const recordArray = new LiveArray({ type: 'apple', identifiers: [], store, @@ -40,13 +40,13 @@ module('unit/record-arrays/record-array - DS.RecordArray', function (hooks) { }); testInDebug('Mutation throws error', async function (assert) { - const recordArray = new RecordArray({ identifiers: [], type: 'recordType' }); + const recordArray = new LiveArray({ identifiers: [], type: 'recordType' }); assert.throws( () => { recordArray.splice(0, 1); }, - Error('Assertion Failed: Mutating this array of records via splice is not allowed.'), + Error('Mutating this array of records via splice is not allowed.'), 'throws error' ); }); @@ -72,7 +72,7 @@ module('unit/record-arrays/record-array - DS.RecordArray', function (hooks) { ], }); - const recordArray = new RecordArray({ + const recordArray = new LiveArray({ type: 'recordType', identifiers: records.map(recordIdentifierFor), store, @@ -98,7 +98,7 @@ module('unit/record-arrays/record-array - DS.RecordArray', function (hooks) { }, }; - const recordArray = new RecordArray({ + const recordArray = new LiveArray({ type: 'recordType', identifiers: [], store, @@ -132,7 +132,7 @@ module('unit/record-arrays/record-array - DS.RecordArray', function (hooks) { }, }; - const recordArray = new RecordArray({ + const recordArray = new LiveArray({ type: 'recordType', identifiers: [], store, @@ -178,7 +178,7 @@ module('unit/record-arrays/record-array - DS.RecordArray', function (hooks) { data: [model1, model2], }); const identifiers = [recordIdentifierFor(record1), recordIdentifierFor(record2)]; - const recordArray = new RecordArray({ + const recordArray = new LiveArray({ identifiers, store, }); diff --git a/tests/main/tests/unit/system/relationships/polymorphic-relationship-payloads-test.js b/tests/main/tests/unit/system/relationships/polymorphic-relationship-payloads-test.js index 803fd2a63da..bd2a7860989 100644 --- a/tests/main/tests/unit/system/relationships/polymorphic-relationship-payloads-test.js +++ b/tests/main/tests/unit/system/relationships/polymorphic-relationship-payloads-test.js @@ -3,7 +3,6 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import Model, { attr, belongsTo, hasMany } from '@ember-data/model'; -import deepCopy from '@ember-data/unpublished-test-infra/test-support/deep-copy'; import testInDebug from '@ember-data/unpublished-test-infra/test-support/test-in-debug'; module('unit/relationships/relationship-payloads-manager (polymorphic)', function (hooks) { @@ -31,7 +30,7 @@ module('unit/relationships/relationship-payloads-manager (polymorphic)', functio let id = 1; function makeHat(type, props) { - const resource = deepCopy(props); + const resource = structuredClone(props); resource.id = `${id++}`; resource.type = type; resource.attributes.type = type; @@ -85,7 +84,7 @@ module('unit/relationships/relationship-payloads-manager (polymorphic)', functio let id = 1; function makeHat(type, props) { - const resource = deepCopy(props); + const resource = structuredClone(props); resource.id = `${id++}`; resource.type = type; resource.attributes.type = type; @@ -140,7 +139,7 @@ module('unit/relationships/relationship-payloads-manager (polymorphic)', functio let id = 1; function makeHat(type, props) { - const resource = deepCopy(props); + const resource = structuredClone(props); resource.id = `${id++}`; resource.type = type; resource.attributes.type = type; @@ -197,7 +196,7 @@ module('unit/relationships/relationship-payloads-manager (polymorphic)', functio let id = 1; function makeHat(type, props) { - const resource = deepCopy(props); + const resource = structuredClone(props); resource.id = `${id++}`; resource.type = type; resource.attributes.type = type; diff --git a/tests/main/tsconfig.json b/tests/main/tsconfig.json index a6148bd45bf..57f2cffe68d 100644 --- a/tests/main/tsconfig.json +++ b/tests/main/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*", "../../@types/ember-data-qunit-asserts"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,29 +7,105 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, // TODO: Reenable this "noImplicitAny": false, - "experimentalDecorators": true, - "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], "paths": { - "@warp-drive/build-config/deprecations": ["../../packages/private-build-infra/virtual-packages/deprecations.d.ts"] + "@ember-data/adapter": ["../../packages/adapter/unstable-preview-types"], + "@ember-data/adapter/*": ["../../packages/adapter/unstable-preview-types/*"], + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/serializer": ["../../packages/serializer/unstable-preview-types"], + "@ember-data/serializer/*": ["../../packages/serializer/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"], + "@warp-drive/holodeck": ["../../packages/holodeck/unstable-preview-types"], + "@warp-drive/holodeck/*": ["../../packages/holodeck/unstable-preview-types/*"], + "ember-data": ["../../packages/-ember-data/unstable-preview-types"], + "ember-data/*": ["../../packages/-ember-data/unstable-preview-types/*"] } }, - "references": [] + "references": [ + { + "path": "../../packages/build-config" + }, + { + "path": "../../packages/adapter" + }, + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/serializer" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/holodeck" + }, + { + "path": "../../packages/-ember-data" + } + ] } diff --git a/tests/performance/.eslintrc.cjs b/tests/performance/.eslintrc.cjs deleted file mode 100644 index 1d0e93d70fb..00000000000 --- a/tests/performance/.eslintrc.cjs +++ /dev/null @@ -1,31 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.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/application', '@ember/object', '@ember/routing/route', '@ember/service'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults({ - files: ['./server/**/*.{js,ts}', './fixtures/**/*.{js,ts}'], - }), - ], -}; diff --git a/tests/performance/ember-cli-build.js b/tests/performance/ember-cli-build.js index 691305f1420..7896757c1ef 100644 --- a/tests/performance/ember-cli-build.js +++ b/tests/performance/ember-cli-build.js @@ -1,5 +1,3 @@ -/* eslint n/no-unpublished-require: 'off' */ - 'use strict'; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); diff --git a/tests/performance/eslint.config.mjs b/tests/performance/eslint.config.mjs new file mode 100644 index 00000000000..58117e3da50 --- /dev/null +++ b/tests/performance/eslint.config.mjs @@ -0,0 +1,24 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as js from '@warp-drive/internal-config/eslint/browser.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + js.browser({ + srcDirs: ['app'], + allowedImports: ['@ember/application', '@ember/object', '@ember/routing/route', '@ember/service'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs({ + files: ['server/**/*.js', 'fixtures/**/*.js'], + }), +]; diff --git a/tests/performance/fixtures/index.js b/tests/performance/fixtures/index.js index 2365b7ee723..ee190736ec2 100644 --- a/tests/performance/fixtures/index.js +++ b/tests/performance/fixtures/index.js @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ const fs = require('fs'); const zlib = require('zlib'); diff --git a/tests/performance/package.json b/tests/performance/package.json index 21cddc1289a..b8e79f9d3a1 100644 --- a/tests/performance/package.json +++ b/tests/performance/package.json @@ -17,8 +17,8 @@ "scripts": { "build": "ember build", "start": "ember serve", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependencies": { "@ember/string": "3.1.1", @@ -40,6 +40,7 @@ "@babel/runtime": "^7.24.4", "@ember/optional-features": "^2.1.0", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@embroider/compat": "^3.4.7", "@embroider/core": "^3.4.7", "@embroider/webpack": "^3.2.3", @@ -63,7 +64,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/schema/output/.gitkeep b/tests/schema/output/.gitkeep deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/warp-drive__ember/.eslintrc.cjs b/tests/warp-drive__ember/.eslintrc.cjs deleted file mode 100644 index 0b970ad9538..00000000000 --- a/tests/warp-drive__ember/.eslintrc.cjs +++ /dev/null @@ -1,37 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const diagnostic = require('@warp-drive/internal-config/eslint/diagnostic.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/application', '@ember/object', '@ember/owner'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - diagnostic.config(), - diagnostic.defaults({ - files: ['tests/**/*.{js,ts,gts}'], - allowedImports: ['@glimmer/tracking', '@glimmer/component', '@ember/object', '@ember/owner'], - }), - ], -}; diff --git a/tests/warp-drive__ember/app/services/store.ts b/tests/warp-drive__ember/app/services/store.ts index 4161c2d7788..07c322a36fa 100644 --- a/tests/warp-drive__ember/app/services/store.ts +++ b/tests/warp-drive__ember/app/services/store.ts @@ -2,7 +2,7 @@ import JSONAPICache from '@ember-data/json-api'; import RequestManager from '@ember-data/request'; import Fetch from '@ember-data/request/fetch'; import DataStore, { CacheHandler } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; import type { Cache } from '@warp-drive/core-types/cache'; import { instantiateRecord, teardownRecord } from '@warp-drive/schema-record/hooks'; diff --git a/tests/warp-drive__ember/ember-cli-build.js b/tests/warp-drive__ember/ember-cli-build.js index d0bdec11262..436ede741f6 100644 --- a/tests/warp-drive__ember/ember-cli-build.js +++ b/tests/warp-drive__ember/ember-cli-build.js @@ -2,41 +2,27 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null; +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - emberData: { - compatWith, - }, babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith, - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, - 'ember-cli-terser': { - exclude: ['assets/dummy.js', 'assets/tests.js', 'assets/test-support.js'], - }, }); - /* - This build file specifies the options for the dummy test app of this - addon, located in `/tests/dummy` - This build file does *not* influence how the addon or the app using it - behave. You most likely want to be modifying `./index.js` or app's build file - */ + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); app.import('node_modules/@warp-drive/diagnostic/dist/styles/dom-reporter.css'); + return app.toTree(); }; diff --git a/tests/warp-drive__ember/eslint.config.mjs b/tests/warp-drive__ember/eslint.config.mjs new file mode 100644 index 00000000000..940c3432dc4 --- /dev/null +++ b/tests/warp-drive__ember/eslint.config.mjs @@ -0,0 +1,45 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as diagnostic from '@warp-drive/internal-config/eslint/diagnostic.js'; +import * as gts from '@warp-drive/internal-config/eslint/gts.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application', '@ember/object', '@ember/owner'], + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + }, + }), + + // gts + gts.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application', '@ember/object', '@ember/owner'], + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + }, + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + diagnostic.browser({ + allowedImports: ['@glimmer/tracking', '@glimmer/component', '@ember/object', '@ember/owner'], + }), +]; diff --git a/tests/warp-drive__ember/package.json b/tests/warp-drive__ember/package.json index 534caf4a183..be1dc9feec5 100644 --- a/tests/warp-drive__ember/package.json +++ b/tests/warp-drive__ember/package.json @@ -1,6 +1,6 @@ { "name": "warp-drive__ember", - "version": "5.4.0-alpha.63", + "version": "5.4.0-alpha.64", "description": "Provides tests for @warp-drive/ember", "private": true, "keywords": [], @@ -17,12 +17,12 @@ "scripts": { "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", "_build:production": "bun run build:tests -e production", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "glint", "start": "bun run build:tests --watch", "test": "bun ./diagnostic.js", "_test:production": "bun ./diagnostic.js", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/ember": { @@ -58,15 +58,15 @@ "@ember-data/graph": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/request-utils": { "injected": true }, "@warp-drive/core-types": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@ember-data/unpublished-test-infra": { "injected": true }, @@ -86,7 +86,6 @@ "@ember-data/debug": "workspace:5.4.0-alpha.64", "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/json-api": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", @@ -98,6 +97,7 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@glint/environment-ember-loose": "^1.4.0", @@ -108,6 +108,7 @@ "@warp-drive/schema-record": "workspace:0.0.0-alpha.50", "@warp-drive/ember": "workspace:0.0.0-alpha.26", "@warp-drive/diagnostic": "workspace:0.0.0-alpha.50", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "@warp-drive/holodeck": "workspace:0.0.0-alpha.50", "ember-auto-import": "^2.7.2", "ember-cli": "~5.7.0", @@ -133,7 +134,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/warp-drive__ember/tests/integration/await-component-test.gts b/tests/warp-drive__ember/tests/integration/await-component-test.gts index ebdd15c1883..a46a32dfe80 100644 --- a/tests/warp-drive__ember/tests/integration/await-component-test.gts +++ b/tests/warp-drive__ember/tests/integration/await-component-test.gts @@ -1,17 +1,9 @@ import { rerender, settled } from '@ember/test-helpers'; -import { setPromiseResult, type Awaitable } from '@ember-data/request'; +import { type Awaitable, setPromiseResult } from '@ember-data/request'; import type { RenderingTestContext } from '@warp-drive/diagnostic/ember'; import { module, setupRenderingTest, test } from '@warp-drive/diagnostic/ember'; import { Await, getPromiseState } from '@warp-drive/ember'; -import { assert } from '@ember/debug'; - -function asError(x: Exclude): never; -function asError(x: T): Error; -function asError(x: T | null) { - assert(`Expected an instance of an error, but got ${typeof x}`, x instanceof Error); - return x; -} module('Integration | ', function (hooks) { setupRenderingTest(hooks); @@ -35,11 +27,11 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!.result, null); + assert.equal(state.result, null); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Loading...Count: 1'); await rerender(); - assert.equal(state!.result, 'Our Data'); + assert.equal(state.result, 'Our Data'); assert.equal(counter, 2); assert.equal(this.element.textContent?.trim(), 'Our DataCount: 2'); }); @@ -47,8 +39,8 @@ module('Integration | ', function (hooks) { test('it renders only once when the promise already has a result cached', async function (this: RenderingTestContext, assert) { const promise: Awaitable = Promise.resolve().then(() => 'Our Data'); - const result = await promise; - setPromiseResult(promise, { result, isError: false }); + const result1 = await promise; + setPromiseResult(promise, { result: result1, isError: false }); let counter = 0; function countFor(_result: unknown) { @@ -92,14 +84,14 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!.result, null); - assert.equal(state!.error, null); + assert.equal(state.result, null); + assert.equal(state.error, null); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Loading...Count: 1'); await rerender(); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state.result, null); + assert.true(state.error instanceof Error); + assert.equal((state.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 2); assert.equal(this.element.textContent?.trim(), 'Our ErrorCount: 2'); }); @@ -132,15 +124,15 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state.result, null); + assert.true(state.error instanceof Error); + assert.equal((state.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Our ErrorCount: 1'); await rerender(); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state.result, null); + assert.true(state.error instanceof Error); + assert.equal((state.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Our ErrorCount: 1'); }); diff --git a/tests/warp-drive__ember/tests/integration/get-promise-state-test.gts b/tests/warp-drive__ember/tests/integration/get-promise-state-test.gts index 6e431b58d9b..a73d4946eef 100644 --- a/tests/warp-drive__ember/tests/integration/get-promise-state-test.gts +++ b/tests/warp-drive__ember/tests/integration/get-promise-state-test.gts @@ -1,6 +1,6 @@ import { rerender, settled } from '@ember/test-helpers'; -import { createDeferred, setPromiseResult, type Awaitable } from '@ember-data/request'; +import { type Awaitable, createDeferred, setPromiseResult } from '@ember-data/request'; import type { RenderingTestContext } from '@warp-drive/diagnostic/ember'; import { module, setupRenderingTest, test } from '@warp-drive/diagnostic/ember'; import { getPromiseState } from '@warp-drive/ember'; @@ -8,6 +8,7 @@ import { getPromiseState } from '@warp-drive/ember'; type PromiseState = ReturnType>; const SecretSymbol = Symbol.for('LegacyPromiseProxy'); +// eslint-disable-next-line @typescript-eslint/no-unused-vars interface PromiseProxy extends Promise {} class PromiseProxy { [SecretSymbol]: true; @@ -40,10 +41,10 @@ module('Integration | get-promise-state', function (hooks) { test('it renders each stage of a promise resolving in a new microtask queue', async function (this: RenderingTestContext, assert) { const defer = createDeferred(); - let state: PromiseState; - function _getPromiseState(p: Promise): PromiseState { - state = getPromiseState(p) as PromiseState; - return state as PromiseState; + let state1: PromiseState; + function _getPromiseState(p: Promise): PromiseState { + state1 = getPromiseState(p); + return state1; } let counter = 0; function countFor(_result: unknown) { @@ -58,14 +59,14 @@ module('Integration | get-promise-state', function (hooks) { {{/let}} ); - assert.equal(state!.result, null); + assert.equal(state1!.result, null); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Count:\n 1'); defer.resolve('Our Data'); await defer.promise; await rerender(); - assert.equal(state!, getPromiseState(defer.promise)); - assert.equal(state!.result, 'Our Data'); + assert.equal(state1!, getPromiseState(defer.promise)); + assert.equal(state1!.result, 'Our Data'); assert.equal(counter, 2); assert.equal(this.element.textContent?.trim(), 'Our DataCount:\n 2'); }); @@ -73,10 +74,10 @@ module('Integration | get-promise-state', function (hooks) { test('it renders each stage of a promise resolving in the same microtask queue', async function (this: RenderingTestContext, assert) { const promise = Promise.resolve().then(() => 'Our Data'); - let state: PromiseState; - function _getPromiseState(p: Promise): PromiseState { - state = getPromiseState(p) as PromiseState; - return state as PromiseState; + let state1: PromiseState; + function _getPromiseState(p: Promise): PromiseState { + state1 = getPromiseState(p); + return state1; } let counter = 0; function countFor(_result: unknown) { @@ -91,12 +92,12 @@ module('Integration | get-promise-state', function (hooks) { {{/let}} ); - assert.equal(state!, getPromiseState(promise)); - assert.equal(state!.result, null); + assert.equal(state1!, getPromiseState(promise)); + assert.equal(state1!.result, null); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Count:\n 1'); await rerender(); - assert.equal(state!.result, 'Our Data'); + assert.equal(state1!.result, 'Our Data'); assert.equal(counter, 2); assert.equal(this.element.textContent?.trim(), 'Our DataCount:\n 2'); }); @@ -107,10 +108,10 @@ module('Integration | get-promise-state', function (hooks) { const result = await promise; setPromiseResult(promise, { result, isError: false }); - let state: PromiseState; - function _getPromiseState(p: Promise): PromiseState { - state = getPromiseState(p) as PromiseState; - return state as PromiseState; + let state1: PromiseState; + function _getPromiseState(p: Promise): PromiseState { + state1 = getPromiseState(p); + return state1; } let counter = 0; function countFor(_result: unknown) { @@ -137,10 +138,10 @@ module('Integration | get-promise-state', function (hooks) { throw new Error('Our Error'); }); - let state: PromiseState; - function _getPromiseState(p: Promise): PromiseState { - state = getPromiseState(p) as PromiseState; - return state as PromiseState; + let state1: PromiseState; + function _getPromiseState(p: Promise): PromiseState { + state1 = getPromiseState(p); + return state1; } let counter = 0; function countFor(_result: unknown, _error: unknown) { @@ -162,15 +163,15 @@ module('Integration | get-promise-state', function (hooks) { ); - assert.equal(state!, getPromiseState(promise)); - assert.equal(state!.result, null); - assert.equal(state!.error, null); + assert.equal(state1!, getPromiseState(promise)); + assert.equal(state1!.result, null); + assert.equal(state1!.error, null); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Pending\n Count:\n 1'); await rerender(); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state1!.result, null); + assert.true(state1!.error instanceof Error); + assert.equal((state1!.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 2); assert.equal(this.element.textContent?.trim(), 'Our Error\n Count:\n 2'); }); @@ -186,10 +187,10 @@ module('Integration | get-promise-state', function (hooks) { setPromiseResult(promise, { result: e, isError: true }); } - let state: PromiseState; - function _getPromiseState(p: Promise): PromiseState { - state = getPromiseState(p) as PromiseState; - return state as PromiseState; + let state1: PromiseState; + function _getPromiseState(p: Promise): PromiseState { + state1 = getPromiseState(p); + return state1; } let counter = 0; function countFor(_result: unknown, _error: unknown) { @@ -211,15 +212,15 @@ module('Integration | get-promise-state', function (hooks) { ); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state1!.result, null); + assert.true(state1!.error instanceof Error); + assert.equal((state1!.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Our Error\n Count:\n 1'); await rerender(); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state1!.result, null); + assert.true(state1!.error instanceof Error); + assert.equal((state1!.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Our Error\n Count:\n 1'); }); @@ -237,10 +238,10 @@ module('Integration | get-promise-state', function (hooks) { // do nothing } - let state: PromiseState; - function _getPromiseState(p: Promise): PromiseState { - state = getPromiseState(p) as PromiseState; - return state as PromiseState; + let state1: PromiseState; + function _getPromiseState(p: Promise): PromiseState { + state1 = getPromiseState(p); + return state1; } let counter = 0; function countFor(_result: unknown, _error: unknown) { @@ -262,18 +263,18 @@ module('Integration | get-promise-state', function (hooks) { ); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state1!.result, null); + assert.true(state1!.error instanceof Error); + assert.equal((state1!.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Our Error\n Count:\n 1'); await rerender(); - assert.equal(state!.result, null); - assert.true(state!.error instanceof Error); - assert.equal((state!.error as Error | undefined)?.message, 'Our Error'); + assert.equal(state1!.result, null); + assert.true(state1!.error instanceof Error); + assert.equal((state1!.error as Error | undefined)?.message, 'Our Error'); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Our Error\n Count:\n 1'); - assert.equal(state!, getPromiseState(_promise)); + assert.equal(state1!, getPromiseState(_promise)); }); test('it unwraps promise-proxies that utilize the secret symbol for success states', async function (this: RenderingTestContext, assert) { @@ -282,10 +283,10 @@ module('Integration | get-promise-state', function (hooks) { getPromiseState(promise); await promise; - let state: PromiseState; - function _getPromiseState(p: Promise): PromiseState { - state = getPromiseState(p) as PromiseState; - return state as PromiseState; + let state1: PromiseState; + function _getPromiseState(p: Promise): PromiseState { + state1 = getPromiseState(p); + return state1; } let counter = 0; function countFor(_result: unknown) { @@ -305,6 +306,6 @@ module('Integration | get-promise-state', function (hooks) { await settled(); assert.equal(this.element.textContent?.trim(), 'Our DataCount:\n 1'); - assert.equal(state!, getPromiseState(_promise)); + assert.equal(state1!, getPromiseState(_promise)); }); }); diff --git a/tests/warp-drive__ember/tests/integration/get-request-state-test.gts b/tests/warp-drive__ember/tests/integration/get-request-state-test.gts index e8de7d779da..17067aa0471 100644 --- a/tests/warp-drive__ember/tests/integration/get-request-state-test.gts +++ b/tests/warp-drive__ember/tests/integration/get-request-state-test.gts @@ -280,10 +280,10 @@ module('Integration | get-request-state', function (hooks) { const url = await mockGETSuccess(this); const request = this.manager.request({ url, method: 'GET' }); - let state: RequestState; - function _getRequestState(p: Future): RequestState { - state = getRequestState(p) as RequestState; - return state as RequestState; + let state1: RequestState; + function _getRequestState(p: Future): RequestState { + state1 = getRequestState(p) as RequestState; + return state1 as RequestState; } let counter = 0; function countFor(_result: unknown) { @@ -299,13 +299,13 @@ module('Integration | get-request-state', function (hooks) { ); - assert.equal(state!.result, null); + assert.equal(state1!.result, null); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'Count:\n 1'); await request; await rerender(); - assert.equal(state!, getRequestState(request)); - assert.deepEqual(state!.result, { + assert.equal(state1!, getRequestState(request)); + assert.deepEqual(state1!.result, { data: { id: '1', type: 'user', @@ -322,10 +322,10 @@ module('Integration | get-request-state', function (hooks) { const url = await mockGETSuccess(this); const request = this.manager.request({ url, method: 'GET' }); - let state: RequestState; - function _getRequestState(p: Future): RequestState { - state = getRequestState(p) as RequestState; - return state as RequestState; + let state1: RequestState; + function _getRequestState(p: Future): RequestState { + state1 = getRequestState(p) as RequestState; + return state1 as RequestState; } let counter = 0; function countFor(_result: unknown) { @@ -342,7 +342,7 @@ module('Integration | get-request-state', function (hooks) { ); - assert.deepEqual(state!.result, { + assert.deepEqual(state1!.result, { data: { id: '1', type: 'user', @@ -356,7 +356,7 @@ module('Integration | get-request-state', function (hooks) { await settled(); - assert.deepEqual(state!.result, { + assert.deepEqual(state1!.result, { data: { id: '1', type: 'user', @@ -373,10 +373,10 @@ module('Integration | get-request-state', function (hooks) { const url = await mockGETFailure(this); const request = this.manager.request({ url, method: 'GET' }); - let state: RequestState; - function _getRequestState(p: Future): RequestState { - state = getRequestState(p) as RequestState; - return state as RequestState; + let state1: RequestState; + function _getRequestState(p: Future): RequestState { + state1 = getRequestState(p) as RequestState; + return state1 as RequestState; } let counter = 0; function countFor(_result: unknown, _error: unknown) { @@ -399,9 +399,9 @@ module('Integration | get-request-state', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state1!, getRequestState(request), 'state is a stable reference'); + assert.equal(state1!.result, null, 'result is null'); + assert.equal(state1!.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'Pending\n Count:\n 1'); try { @@ -410,10 +410,10 @@ module('Integration | get-request-state', function (hooks) { // ignore the error } await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state1!.result, null, 'after rerender result is still null'); + assert.true(state1!.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state1!.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); @@ -433,10 +433,10 @@ module('Integration | get-request-state', function (hooks) { } catch (e) { // ignore the error } - let state: RequestState; - function _getRequestState(p: Future): RequestState { - state = getRequestState(p) as RequestState; - return state as RequestState; + let state1: RequestState; + function _getRequestState(p: Future): RequestState { + state1 = getRequestState(p) as RequestState; + return state1 as RequestState; } let counter = 0; function countFor(_result: unknown, _error: unknown) { @@ -459,10 +459,10 @@ module('Integration | get-request-state', function (hooks) { ); - assert.equal(state!.result, null, 'after render result is null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state1!.result, null, 'after render result is null'); + assert.true(state1!.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state1!.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); @@ -472,10 +472,10 @@ module('Integration | get-request-state', function (hooks) { '[404 Not Found] GET (cors) - https://localhost:1135/users/2\n Count:\n 1' ); await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state1!.result, null, 'after rerender result is still null'); + assert.true(state1!.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state1!.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); diff --git a/tests/warp-drive__ember/tests/integration/request-component-test.gts b/tests/warp-drive__ember/tests/integration/request-component-test.gts index 1b8865c1c3e..7be5d238751 100644 --- a/tests/warp-drive__ember/tests/integration/request-component-test.gts +++ b/tests/warp-drive__ember/tests/integration/request-component-test.gts @@ -1,15 +1,17 @@ -import { click, rerender, settled } from '@ember/test-helpers'; -import { on } from '@ember/modifier'; +/* eslint-disable no-console */ import { fn } from '@ember/helper'; +import { on } from '@ember/modifier'; +import { click, rerender, settled } from '@ember/test-helpers'; + import type { CacheHandler, Future, NextFn, RequestContext, StructuredDataDocument } from '@ember-data/request'; import RequestManager from '@ember-data/request'; import Fetch from '@ember-data/request/fetch'; +import type Store from '@ember-data/store'; import type { RenderingTestContext } from '@warp-drive/diagnostic/ember'; import { module, setupRenderingTest, test as _test } from '@warp-drive/diagnostic/ember'; import { getRequestState, Request } from '@warp-drive/ember'; import { mock, MockServerHandler } from '@warp-drive/holodeck'; import { GET } from '@warp-drive/holodeck/mock'; -import type Store from '@ember-data/store'; // our tests use a rendering test context and add manager to it interface LocalTestContext extends RenderingTestContext { @@ -22,13 +24,14 @@ function test(name: string, callback: DiagnosticTest): void { function setupOnError(cb: (message: Error | string) => void) { const originalLog = console.error; + // eslint-disable-next-line prefer-const let cleanup!: () => void; const handler = function (e: ErrorEvent | (Event & { reason: Error | string })) { if (e instanceof ErrorEvent || e instanceof Event) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); - cb('error' in e ? e.error : e.reason); + cb('error' in e ? (e.error as string | Error) : e.reason); } else { cb(e); } @@ -185,13 +188,13 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!.result, null); + assert.equal(state.result, null); assert.equal(counter, 1); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); await request; await rerender(); - assert.equal(state!, getRequestState(request)); - assert.deepEqual(state!.result, { + assert.equal(state, getRequestState(request)); + assert.deepEqual(state.result, { data: { id: '1', type: 'user', @@ -226,7 +229,7 @@ module('Integration | ', function (hooks) { ); - assert.deepEqual(state!.result, { + assert.deepEqual(state.result, { data: { id: '1', type: 'user', @@ -240,7 +243,7 @@ module('Integration | ', function (hooks) { await settled(); - assert.deepEqual(state!.result, { + assert.deepEqual(state.result, { data: { id: '1', type: 'user', @@ -273,9 +276,9 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state, getRequestState(request), 'state is a stable reference'); + assert.equal(state.result, null, 'result is null'); + assert.equal(state.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); try { @@ -284,10 +287,10 @@ module('Integration | ', function (hooks) { // ignore the error } await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state.result, null, 'after rerender result is still null'); + assert.true(state.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); @@ -305,15 +308,15 @@ module('Integration | ', function (hooks) { const url = await mockGETFailure(this); await mockRetrySuccess(this); const request = this.manager.request({ url, method: 'GET' }); - const state = getRequestState(request); + const state2 = getRequestState(request); let counter = 0; function countFor(_result: unknown) { return ++counter; } - function retry(state: { retry: () => void }) { + function retry(state1: { retry: () => void }) { assert.step('retry'); - return state.retry(); + return state1.retry(); } await this.render( @@ -329,9 +332,9 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state2, getRequestState(request), 'state is a stable reference'); + assert.equal(state2.result, null, 'result is null'); + assert.equal(state2.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); try { @@ -340,10 +343,10 @@ module('Integration | ', function (hooks) { // ignore the error } await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state2.result, null, 'after rerender result is still null'); + assert.true(state2.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state2.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); @@ -379,9 +382,9 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state, getRequestState(request), 'state is a stable reference'); + assert.equal(state.result, null, 'result is null'); + assert.equal(state.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); const cleanup = setupOnError((message) => { @@ -399,10 +402,10 @@ module('Integration | ', function (hooks) { await rerender(); cleanup(); assert.verifySteps(['render-error']); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state.result, null, 'after rerender result is still null'); + assert.true(state.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); @@ -431,9 +434,9 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state, getRequestState(request), 'state is a stable reference'); + assert.equal(state.result, null, 'result is null'); + assert.equal(state.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); @@ -445,10 +448,10 @@ module('Integration | ', function (hooks) { // ignore the error } await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state.result, null, 'after rerender result is still null'); + assert.true(state.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state.error as Error | undefined)?.message, 'The user aborted a request.', 'error message is correct' ); @@ -463,15 +466,15 @@ module('Integration | ', function (hooks) { const url = await mockGETFailure(this); await mockRetrySuccess(this); const request = this.manager.request({ url, method: 'GET' }); - const state = getRequestState(request); + const state1 = getRequestState(request); let counter = 0; function countFor(_result: unknown) { return ++counter; } - function retry(state: { retry: () => void }) { + function retry(state2: { retry: () => void }) { assert.step('retry'); - return state.retry(); + return state2.retry(); } await this.render( @@ -489,9 +492,9 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state1, getRequestState(request), 'state is a stable reference'); + assert.equal(state1.result, null, 'result is null'); + assert.equal(state1.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); @@ -503,10 +506,10 @@ module('Integration | ', function (hooks) { // ignore the error } await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state1.result, null, 'after rerender result is still null'); + assert.true(state1.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state1.error as Error | undefined)?.message, 'The user aborted a request.', 'error message is correct' ); @@ -540,9 +543,9 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state, getRequestState(request), 'state is a stable reference'); + assert.equal(state.result, null, 'result is null'); + assert.equal(state.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); @@ -554,10 +557,10 @@ module('Integration | ', function (hooks) { // ignore the error } await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state.result, null, 'after rerender result is still null'); + assert.true(state.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state.error as Error | undefined)?.message, 'The user aborted a request.', 'error message is correct' ); @@ -584,9 +587,9 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!, getRequestState(request), 'state is a stable reference'); - assert.equal(state!.result, null, 'result is null'); - assert.equal(state!.error, null, 'error is null'); + assert.equal(state, getRequestState(request), 'state is a stable reference'); + assert.equal(state.result, null, 'result is null'); + assert.equal(state.error, null, 'error is null'); assert.equal(counter, 1, 'counter is 1'); assert.equal(this.element.textContent?.trim(), 'PendingCount: 1'); @@ -602,10 +605,10 @@ module('Integration | ', function (hooks) { } await rerender(); cleanup(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state.result, null, 'after rerender result is still null'); + assert.true(state.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state.error as Error | undefined)?.message, 'The user aborted a request.', 'error message is correct' ); @@ -640,10 +643,10 @@ module('Integration | ', function (hooks) { ); - assert.equal(state!.result, null, 'after render result is null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state.result, null, 'after render result is null'); + assert.true(state.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); @@ -653,10 +656,10 @@ module('Integration | ', function (hooks) { '[404 Not Found] GET (cors) - https://localhost:1135/users/2Count: 1' ); await rerender(); - assert.equal(state!.result, null, 'after rerender result is still null'); - assert.true(state!.error instanceof Error, 'error is an instance of Error'); + assert.equal(state.result, null, 'after rerender result is still null'); + assert.true(state.error instanceof Error, 'error is an instance of Error'); assert.equal( - (state!.error as Error | undefined)?.message, + (state.error as Error | undefined)?.message, '[404 Not Found] GET (cors) - https://localhost:1135/users/2', 'error message is correct' ); diff --git a/tests/warp-drive__ember/tests/test-helper.ts b/tests/warp-drive__ember/tests/test-helper.ts index dc75f247c67..96ce2839701 100644 --- a/tests/warp-drive__ember/tests/test-helper.ts +++ b/tests/warp-drive__ember/tests/test-helper.ts @@ -1,7 +1,7 @@ import { setApplication } from '@ember/test-helpers'; import { setBuildURLConfig } from '@ember-data/request-utils'; -import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts'; +import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts/index'; import { setupGlobalHooks } from '@warp-drive/diagnostic'; import { configure } from '@warp-drive/diagnostic/ember'; import { start } from '@warp-drive/diagnostic/runners/dom'; diff --git a/tests/warp-drive__ember/tsconfig.json b/tests/warp-drive__ember/tsconfig.json index 77f1ea0f9f2..872cfd31a16 100644 --- a/tests/warp-drive__ember/tsconfig.json +++ b/tests/warp-drive__ember/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*", "../../@types/@glimmer"], - "baseUrl": ".", "glint": { "environment": ["ember-loose", "ember-template-imports"] }, @@ -11,6 +10,7 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, @@ -19,30 +19,99 @@ "allowJs": true, "experimentalDecorators": true, "verbatimModuleSyntax": true, - - "noImplicitOverride": true, + "baseUrl": ".", + "noImplicitOverride": false, "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], // "baseUrl": ".", "paths": { "warp-drive__ember/*": ["./app/*"], - "warp-drive__ember/tests/*": ["./tests/*"] + "warp-drive__ember/tests/*": ["./tests/*"], + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/schema-record": ["../../packages/schema-record/unstable-preview-types"], + "@warp-drive/schema-record/*": ["../../packages/schema-record/unstable-preview-types/*"], + "@warp-drive/ember": ["../../packages/ember/unstable-preview-types"], + "@warp-drive/ember/*": ["../../packages/ember/unstable-preview-types/*"], + "@warp-drive/diagnostic": ["../../packages/diagnostic/unstable-preview-types"], + "@warp-drive/diagnostic/*": ["../../packages/diagnostic/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"], + "@warp-drive/holodeck": ["../../packages/holodeck/unstable-preview-types"], + "@warp-drive/holodeck/*": ["../../packages/holodeck/unstable-preview-types/*"] }, - "allowImportingTsExtensions": true }, "references": [ - { "path": "../../packages/diagnostic" }, - { "path": "../../packages/ember" }, - { "path": "../../packages/schema-record" }, - { "path": "../../packages/core-types" }, - { "path": "../../packages/store" }, - { "path": "../../packages/request" }, - { "path": "../../packages/legacy-compat" }, - { "path": "../../packages/model" } + { + "path": "../../packages/diagnostic" + }, + { + "path": "../../packages/ember" + }, + { + "path": "../../packages/schema-record" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/build-config" + }, + { + "path": "../../packages/holodeck" + } ] } diff --git a/tests/warp-drive__schema-record/.eslintrc.cjs b/tests/warp-drive__schema-record/.eslintrc.cjs deleted file mode 100644 index d6e11b177dc..00000000000 --- a/tests/warp-drive__schema-record/.eslintrc.cjs +++ /dev/null @@ -1,36 +0,0 @@ -const base = require('@warp-drive/internal-config/eslint/base.cjs'); -const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs'); -const imports = require('@warp-drive/internal-config/eslint/imports.cjs'); -const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs'); -const node = require('@warp-drive/internal-config/eslint/node.cjs'); -const parser = require('@warp-drive/internal-config/eslint/parser.cjs'); -const qunit = require('@warp-drive/internal-config/eslint/qunit.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/application', '@ember/object', '@ember/owner'], - }), - {} - ), - - ignorePatterns: ignore.ignoreRules(), - - overrides: [ - node.config(), - node.defaults(), - typescript.defaults(), - qunit.defaults({ - files: ['tests/**/*.{js,ts}'], - allowedImports: ['@glimmer/component', '@ember/object', '@ember/owner'], - }), - ], -}; diff --git a/tests/warp-drive__schema-record/app/services/store.ts b/tests/warp-drive__schema-record/app/services/store.ts index 4161c2d7788..81faa38cd29 100644 --- a/tests/warp-drive__schema-record/app/services/store.ts +++ b/tests/warp-drive__schema-record/app/services/store.ts @@ -2,9 +2,8 @@ import JSONAPICache from '@ember-data/json-api'; import RequestManager from '@ember-data/request'; import Fetch from '@ember-data/request/fetch'; import DataStore, { CacheHandler } from '@ember-data/store'; -import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper'; +import type { CacheCapabilitiesManager } from '@ember-data/store/types'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; -import type { Cache } from '@warp-drive/core-types/cache'; import { instantiateRecord, teardownRecord } from '@warp-drive/schema-record/hooks'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; @@ -17,7 +16,7 @@ export default class Store extends DataStore { manager.useCache(CacheHandler); } - override createCache(capabilities: CacheCapabilitiesManager): Cache { + override createCache(capabilities: CacheCapabilitiesManager) { return new JSONAPICache(capabilities); } diff --git a/tests/warp-drive__schema-record/ember-cli-build.js b/tests/warp-drive__schema-record/ember-cli-build.js index a5bb4bec913..b4f794466fe 100644 --- a/tests/warp-drive__schema-record/ember-cli-build.js +++ b/tests/warp-drive__schema-record/ember-cli-build.js @@ -2,40 +2,25 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); -module.exports = function (defaults) { - const compatWith = process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null; +module.exports = async function (defaults) { + const { setConfig } = await import('@warp-drive/build-config'); + const { macros } = await import('@warp-drive/build-config/babel-macros'); + const app = new EmberApp(defaults, { - emberData: { - compatWith, - }, babel: { // this ensures that the same build-time code stripping that is done // for library packages is also done for our tests and dummy app - plugins: [ - ...require('@ember-data/private-build-infra/src/debug-macros')({ - compatWith, - debug: {}, - features: {}, - deprecations: {}, - env: require('@ember-data/private-build-infra/src/utilities/get-env')(), - }), - ], + plugins: [...macros()], }, 'ember-cli-babel': { throwUnlessParallelizable: true, enableTypeScriptTransform: true, }, - 'ember-cli-terser': { - exclude: ['assets/dummy.js', 'assets/tests.js', 'assets/test-support.js'], - }, }); - /* - This build file specifies the options for the dummy test app of this - addon, located in `/tests/dummy` - This build file does *not* influence how the addon or the app using it - behave. You most likely want to be modifying `./index.js` or app's build file - */ + setConfig(app, __dirname, { + compatWith: process.env.EMBER_DATA_FULL_COMPAT ? '99.0' : null, + }); return app.toTree(); }; diff --git a/tests/warp-drive__schema-record/eslint.config.mjs b/tests/warp-drive__schema-record/eslint.config.mjs new file mode 100644 index 00000000000..5847fddbd7b --- /dev/null +++ b/tests/warp-drive__schema-record/eslint.config.mjs @@ -0,0 +1,28 @@ +// @ts-check +import { globalIgnores } from '@warp-drive/internal-config/eslint/ignore.js'; +import * as node from '@warp-drive/internal-config/eslint/node.js'; +import * as typescript from '@warp-drive/internal-config/eslint/typescript.js'; +import * as qunit from '@warp-drive/internal-config/eslint/qunit.js'; + +/** @type {import('eslint').Linter.FlatConfig[]} */ +export default [ + // all ================ + globalIgnores(), + + // browser (js/ts) ================ + typescript.browser({ + srcDirs: ['app', 'tests'], + allowedImports: ['@ember/application', '@ember/object', '@ember/owner'], + }), + + // node (module) ================ + node.esm(), + + // node (script) ================ + node.cjs(), + + // Test Support ================ + qunit.ember({ + allowedImports: ['@ember/application', '@ember/object', '@ember/owner', '@glimmer/component'], + }), +]; diff --git a/tests/warp-drive__schema-record/package.json b/tests/warp-drive__schema-record/package.json index 9daf92e54b0..c06ecdc693c 100644 --- a/tests/warp-drive__schema-record/package.json +++ b/tests/warp-drive__schema-record/package.json @@ -16,11 +16,11 @@ }, "scripts": { "build:tests": "IS_TESTING=true EMBER_CLI_TEST_COMMAND=true ember build --output-path=dist-test --suppress-sizes", - "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives", + "lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives", "check:types": "tsc --noEmit", "start": "ember test --port=0 --serve --no-launch", "test": "ember test --test-port=0 --path=dist-test", - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "dependenciesMeta": { "@warp-drive/schema-record": { @@ -47,15 +47,15 @@ "@ember-data/graph": { "injected": true }, - "@ember-data/private-build-infra": { - "injected": true - }, "@ember-data/request-utils": { "injected": true }, "@warp-drive/core-types": { "injected": true }, + "@warp-drive/build-config": { + "injected": true + }, "@ember-data/unpublished-test-infra": { "injected": true }, @@ -75,7 +75,6 @@ "@ember-data/debug": "workspace:5.4.0-alpha.64", "@ember-data/graph": "workspace:5.4.0-alpha.64", "@ember-data/json-api": "workspace:5.4.0-alpha.64", - "@ember-data/private-build-infra": "workspace:5.4.0-alpha.64", "@ember-data/request": "workspace:5.4.0-alpha.64", "@ember-data/request-utils": "workspace:5.4.0-alpha.64", "@ember-data/store": "workspace:5.4.0-alpha.64", @@ -87,12 +86,14 @@ "@ember/optional-features": "^2.1.0", "@ember/string": "3.1.1", "@ember/test-helpers": "^3.3.0", + "@ember/test-waiters": "^3.1.0", "@glimmer/component": "^1.1.2", "@glimmer/tracking": "^1.1.2", "@types/qunit": "^2.19.10", "@warp-drive/core-types": "workspace:0.0.0-alpha.50", "@warp-drive/internal-config": "workspace:5.4.0-alpha.64", "@warp-drive/schema-record": "workspace:0.0.0-alpha.50", + "@warp-drive/build-config": "workspace:0.0.0-alpha.1", "ember-auto-import": "^2.7.2", "ember-cli": "~5.7.0", "ember-cli-babel": "^8.2.0", @@ -120,7 +121,7 @@ "edition": "octane" }, "engines": { - "node": ">= 18.20.2" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tests/warp-drive__schema-record/testem.js b/tests/warp-drive__schema-record/testem.js index 491eb29ca44..5ddb8e6ce1a 100644 --- a/tests/warp-drive__schema-record/testem.js +++ b/tests/warp-drive__schema-record/testem.js @@ -1,6 +1,5 @@ -const customDotReporter = require('@ember-data/unpublished-test-infra/src/testem/custom-dot-reporter'); +const customDotReporter = require('@ember-data/unpublished-test-infra/testem/custom-dot-reporter'); -// eslint-disable-next-line no-console console.log(`\n\nLaunching with ${process.env.TESTEM_CI_LAUNCHER || 'Chrome'}\n\n`); module.exports = { diff --git a/tests/warp-drive__schema-record/tests/-utils/normalize-payload.ts b/tests/warp-drive__schema-record/tests/-utils/normalize-payload.ts index 537e1b55ba9..ed3744d080f 100644 --- a/tests/warp-drive__schema-record/tests/-utils/normalize-payload.ts +++ b/tests/warp-drive__schema-record/tests/-utils/normalize-payload.ts @@ -2,7 +2,7 @@ import type Owner from '@ember/owner'; import type Store from '@ember-data/store'; import type { Value } from '@warp-drive/core-types/json/raw'; -import type { SingleResourceDocument } from '@warp-drive/core-types/spec/raw'; +import type { SingleResourceDocument } from '@warp-drive/core-types/spec/json-api-raw'; export function simplePayloadNormalize(owner: Owner, payload: SingleResourceDocument): SingleResourceDocument { const store = owner.lookup('service:store') as Store; diff --git a/tests/warp-drive__schema-record/tests/-utils/reactive-context.ts b/tests/warp-drive__schema-record/tests/-utils/reactive-context.ts index 24b0937e257..ec19480e05d 100644 --- a/tests/warp-drive__schema-record/tests/-utils/reactive-context.ts +++ b/tests/warp-drive__schema-record/tests/-utils/reactive-context.ts @@ -4,9 +4,9 @@ import Component from '@glimmer/component'; import { hbs } from 'ember-cli-htmlbars'; -import type { OpaqueRecordInstance } from '@ember-data/store/-types/q/record-instance'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; import type { ResourceRelationship } from '@warp-drive/core-types/cache/relationship'; +import type { OpaqueRecordInstance } from '@warp-drive/core-types/record'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; export async function reactiveContext( this: TestContext, diff --git a/tests/warp-drive__schema-record/tests/legacy/mode-test.ts b/tests/warp-drive__schema-record/tests/legacy/mode-test.ts index 924332a0971..57f6f77d4c9 100644 --- a/tests/warp-drive__schema-record/tests/legacy/mode-test.ts +++ b/tests/warp-drive__schema-record/tests/legacy/mode-test.ts @@ -4,8 +4,7 @@ import { setupRenderingTest } from 'ember-qunit'; import { adapterFor, LegacyNetworkHandler, serializeRecord, serializerFor } from '@ember-data/legacy-compat'; import type { Snapshot } from '@ember-data/legacy-compat/-private'; -import type Errors from '@ember-data/model/-private/errors'; -import type RecordState from '@ember-data/model/-private/record-state'; +import type Model from '@ember-data/model'; import { registerDerivations as registerLegacyDerivations, withFields as withLegacyFields, @@ -17,6 +16,9 @@ import type { ResourceType } from '@warp-drive/core-types/symbols'; import { Editable, Legacy } from '@warp-drive/schema-record/record'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; +type Errors = Model['errors']; +type RecordState = Model['currentState']; + interface User { [Legacy]: boolean; [Editable]: boolean; @@ -108,7 +110,6 @@ module('Legacy Mode', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, ]), @@ -183,7 +184,6 @@ module('Legacy Mode', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, ]), @@ -214,7 +214,6 @@ module('Legacy Mode', function (hooks) { fields: withLegacyFields([ { name: 'name', - type: null, kind: 'field', }, ]), @@ -236,7 +235,7 @@ module('Legacy Mode', function (hooks) { } catch (e) { assert.strictEqual( (e as Error).message, - "Assertion Failed: SchemaRecord.name is not available in legacy mode because it has type 'field'", + "SchemaRecord.name is not available in legacy mode because it has type 'field'", 'record.name throws' ); } @@ -302,7 +301,7 @@ module('Legacy Mode', function (hooks) { } catch (e) { assert.strictEqual( (e as Error).message, - "Assertion Failed: SchemaRecord.bestFriend is not available in legacy mode because it has type 'resource'", + "SchemaRecord.bestFriend is not available in legacy mode because it has type 'resource'", 'record.bestFriend throws' ); } diff --git a/tests/warp-drive__schema-record/tests/legacy/reactivity/basic-fields-test.ts b/tests/warp-drive__schema-record/tests/legacy/reactivity/basic-fields-test.ts index a9d4dd5924b..ef7d6b33a71 100644 --- a/tests/warp-drive__schema-record/tests/legacy/reactivity/basic-fields-test.ts +++ b/tests/warp-drive__schema-record/tests/legacy/reactivity/basic-fields-test.ts @@ -10,8 +10,8 @@ import { withFields as withLegacyFields, } from '@ember-data/model/migration-support'; import type Store from '@ember-data/store'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; 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-record/tests/legacy/reads/basic-fields-test.ts b/tests/warp-drive__schema-record/tests/legacy/reads/basic-fields-test.ts index 2e3369d70f1..0d3004bb91f 100644 --- a/tests/warp-drive__schema-record/tests/legacy/reads/basic-fields-test.ts +++ b/tests/warp-drive__schema-record/tests/legacy/reads/basic-fields-test.ts @@ -8,14 +8,14 @@ import { registerDerivations as registerLegacyDerivations, withFields as withLegacyFields, } from '@ember-data/model/migration-support'; -import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; 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'; +import type Store from 'warp-drive__schema-record/services/store'; + interface User { id: string | null; $type: 'user'; @@ -167,7 +167,7 @@ module('Legacy | Reads | basic fields', function (hooks) { // @ts-expect-error intentionally have not typed the property on the record assert.strictEqual(record.lastName, undefined, 'lastName is accessible even though its transform does not exist'); - const resource = store.cache.peek(identifier) as JsonApiResource; + const resource = store.cache.peek(identifier)!; assert.strictEqual(store.cache.getAttr(identifier, 'name'), 'Rey Skybarker', 'cache value for name is correct'); assert.strictEqual(store.cache.getAttr(identifier, 'age'), 42, 'cache value for age is correct'); diff --git a/tests/warp-drive__schema-record/tests/reactivity/array-test.ts b/tests/warp-drive__schema-record/tests/reactivity/array-test.ts index 1b2df449f62..3dd3a97f7c6 100644 --- a/tests/warp-drive__schema-record/tests/reactivity/array-test.ts +++ b/tests/warp-drive__schema-record/tests/reactivity/array-test.ts @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import type Store from '@ember-data/store'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; import { reactiveContext } from '../-utils/reactive-context'; @@ -34,7 +34,6 @@ module('Reactivity | array fields can receive remote updates', function (hooks) fields: withFields([ { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), 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 308f312c4eb..386fec74a07 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 @@ -5,8 +5,8 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import type Store from '@ember-data/store'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; import type { StableRecordIdentifier } from '@warp-drive/core-types'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; import type { Transform } from '@warp-drive/schema-record/schema'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; @@ -36,7 +36,6 @@ module('Reactivity | basic fields can receive remote updates', function (hooks) fields: withFields([ { name: 'name', - type: null, kind: 'field', }, ]), @@ -117,7 +116,6 @@ module('Reactivity | basic fields can receive remote updates', function (hooks) fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { diff --git a/tests/warp-drive__schema-record/tests/reactivity/derivation-test.ts b/tests/warp-drive__schema-record/tests/reactivity/derivation-test.ts index 109667b9a17..f722a54b61e 100644 --- a/tests/warp-drive__schema-record/tests/reactivity/derivation-test.ts +++ b/tests/warp-drive__schema-record/tests/reactivity/derivation-test.ts @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import type Store from '@ember-data/store'; -import type { FieldSchema } from '@ember-data/store/-types/q/schema-service'; +import type { FieldSchema } from '@warp-drive/core-types/schema/fields'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; @@ -44,12 +44,10 @@ module('Reactivity | derivation', function (hooks) { fields: withFields([ { name: 'firstName', - type: null, kind: 'field', }, { name: 'lastName', - type: null, kind: 'field', }, { @@ -146,17 +144,14 @@ module('Reactivity | derivation', function (hooks) { fields: withFields([ { name: 'age', - type: null, kind: 'field', }, { name: 'firstName', - type: null, kind: 'field', }, { name: 'lastName', - type: null, kind: 'field', }, { diff --git a/tests/warp-drive__schema-record/tests/reactivity/resource-test.ts b/tests/warp-drive__schema-record/tests/reactivity/resource-test.ts index 38284b30341..04f22cc51e6 100644 --- a/tests/warp-drive__schema-record/tests/reactivity/resource-test.ts +++ b/tests/warp-drive__schema-record/tests/reactivity/resource-test.ts @@ -3,7 +3,7 @@ import { module, skip as test } from 'qunit'; import { setupTest } from 'ember-qunit'; import type Store from '@ember-data/store'; -import type { Document } from '@ember-data/store/-private/document'; +import type { Document } from '@ember-data/store'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; import { SchemaService } from '@warp-drive/schema-record/schema'; @@ -38,7 +38,6 @@ module('Reactivity | resource', function (hooks) { fields: [ { name: 'name', - type: null, kind: 'field', }, { diff --git a/tests/warp-drive__schema-record/tests/reads/array-test.ts b/tests/warp-drive__schema-record/tests/reads/array-test.ts index b7034b63446..b44cff82b8e 100644 --- a/tests/warp-drive__schema-record/tests/reads/array-test.ts +++ b/tests/warp-drive__schema-record/tests/reads/array-test.ts @@ -2,13 +2,13 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; import type { ResourceType } from '@warp-drive/core-types/symbols'; import type { Transform } from '@warp-drive/schema-record/schema'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; +import type Store from 'warp-drive__schema-record/services/store'; + interface CreateUserType { id: string | null; $type: 'user'; @@ -30,12 +30,10 @@ module('Reads | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -54,7 +52,7 @@ module('Reads | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.notStrictEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -78,7 +76,6 @@ module('Reads | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -117,7 +114,7 @@ module('Reads | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.notStrictEqual( cachedResourceData?.attributes?.favoriteNumbers, 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 b0917849878..13b0afa16bb 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 @@ -2,14 +2,14 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; 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 { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; +import type Store from 'warp-drive__schema-record/services/store'; + interface User { id: string | null; $type: 'user'; @@ -33,7 +33,6 @@ module('Reads | basic fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, ]), @@ -89,7 +88,6 @@ module('Reads | basic fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -151,7 +149,7 @@ module('Reads | basic fields', function (hooks) { ); } - const resource = store.cache.peek(identifier) as JsonApiResource; + const resource = store.cache.peek(identifier)!; assert.strictEqual(store.cache.getAttr(identifier, 'name'), 'Rey Skybarker', 'cache value for name is correct'); assert.strictEqual(store.cache.getAttr(identifier, 'age'), '42', 'cache value for age is correct'); diff --git a/tests/warp-drive__schema-record/tests/reads/derivation-test.ts b/tests/warp-drive__schema-record/tests/reads/derivation-test.ts index ee13b55a518..b398af90484 100644 --- a/tests/warp-drive__schema-record/tests/reads/derivation-test.ts +++ b/tests/warp-drive__schema-record/tests/reads/derivation-test.ts @@ -39,12 +39,10 @@ module('Reads | derivation', function (hooks) { fields: withFields([ { name: 'firstName', - type: null, kind: 'field', }, { name: 'lastName', - type: null, kind: 'field', }, { diff --git a/tests/warp-drive__schema-record/tests/reads/object-test.ts b/tests/warp-drive__schema-record/tests/reads/object-test.ts index bdcc51427de..2932be8aa31 100644 --- a/tests/warp-drive__schema-record/tests/reads/object-test.ts +++ b/tests/warp-drive__schema-record/tests/reads/object-test.ts @@ -2,13 +2,13 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; import type { ResourceType } from '@warp-drive/core-types/symbols'; import type { Transform } from '@warp-drive/schema-record/schema'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; +import type Store from 'warp-drive__schema-record/services/store'; + type address = { street: string; city: string; @@ -37,12 +37,10 @@ module('Reads | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'address', - type: null, kind: 'object', }, ]), @@ -69,7 +67,7 @@ module('Reads | object fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.notStrictEqual( cachedResourceData?.attributes?.address, @@ -97,7 +95,6 @@ module('Reads | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -157,7 +154,7 @@ module('Reads | object fields', function (hooks) { assert.notStrictEqual(record.address, sourceAddress); // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.notStrictEqual( cachedResourceData?.attributes?.address, sourceAddress, diff --git a/tests/warp-drive__schema-record/tests/reads/resource-test.ts b/tests/warp-drive__schema-record/tests/reads/resource-test.ts index 806da2b542d..0eb60756d3a 100644 --- a/tests/warp-drive__schema-record/tests/reads/resource-test.ts +++ b/tests/warp-drive__schema-record/tests/reads/resource-test.ts @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import type Store from '@ember-data/store'; -import type { Document } from '@ember-data/store/-private/document'; +import type { Document } from '@ember-data/store'; import type { SchemaRecord } from '@warp-drive/schema-record/record'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; @@ -41,7 +41,6 @@ module('Reads | resource', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { diff --git a/tests/warp-drive__schema-record/tests/test-helper.js b/tests/warp-drive__schema-record/tests/test-helper.js index fc2a97a47d2..0d02a5538eb 100644 --- a/tests/warp-drive__schema-record/tests/test-helper.js +++ b/tests/warp-drive__schema-record/tests/test-helper.js @@ -5,7 +5,7 @@ import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; -import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts'; +import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts/index'; import Application from '../app'; import config from '../config/environment'; diff --git a/tests/warp-drive__schema-record/tests/writes/array-test.ts b/tests/warp-drive__schema-record/tests/writes/array-test.ts index da7b89005b3..d40ede40e1b 100644 --- a/tests/warp-drive__schema-record/tests/writes/array-test.ts +++ b/tests/warp-drive__schema-record/tests/writes/array-test.ts @@ -2,13 +2,13 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; import type { ResourceType } from '@warp-drive/core-types/symbols'; import type { Transform } from '@warp-drive/schema-record/schema'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; +import type Store from 'warp-drive__schema-record/services/store'; + interface User { id: string; $type: 'user'; @@ -37,12 +37,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -69,7 +67,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier)!; assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -88,12 +86,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -118,7 +114,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -139,12 +135,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -166,7 +160,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -185,12 +179,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -217,7 +209,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -236,12 +228,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -269,7 +259,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual(cachedResourceData?.attributes?.favoriteNumbers, ['1'], 'the cache values are correctly updated'); }); @@ -284,12 +274,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -316,7 +304,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -335,12 +323,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -368,7 +354,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual(cachedResourceData?.attributes?.favoriteNumbers, ['2'], 'the cache values are correctly updated'); }); @@ -383,12 +369,10 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'favoriteNumbers', - type: null, kind: 'array', }, ]), @@ -426,7 +410,7 @@ module('Writes | array fields', function (hooks) { assert.notStrictEqual(favoriteNumbers, record2.favoriteNumbers, 'This is weird'); // test that the data entered the cache properly const identifier = recordIdentifierFor(record2); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -445,7 +429,6 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -491,7 +474,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -511,7 +494,6 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -557,7 +539,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -577,7 +559,6 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -623,7 +604,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, @@ -643,7 +624,6 @@ module('Writes | array fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -690,7 +670,7 @@ module('Writes | array fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.favoriteNumbers, diff --git a/tests/warp-drive__schema-record/tests/writes/object-test.ts b/tests/warp-drive__schema-record/tests/writes/object-test.ts index 22d33b32722..0ff4fd179a7 100644 --- a/tests/warp-drive__schema-record/tests/writes/object-test.ts +++ b/tests/warp-drive__schema-record/tests/writes/object-test.ts @@ -2,13 +2,13 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import type Store from '@ember-data/store'; import { recordIdentifierFor } from '@ember-data/store'; -import type { JsonApiResource } from '@ember-data/store/-types/q/record-data-json-api'; import type { ResourceType } from '@warp-drive/core-types/symbols'; import type { Transform } from '@warp-drive/schema-record/schema'; import { registerDerivations, SchemaService, withFields } from '@warp-drive/schema-record/schema'; +import type Store from 'warp-drive__schema-record/services/store'; + type address = { street: string; city: string; @@ -44,12 +44,10 @@ module('Writes | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'address', - type: null, kind: 'object', }, ]), @@ -90,7 +88,7 @@ module('Writes | object fields', function (hooks) { // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.address, @@ -108,12 +106,10 @@ module('Writes | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'address', - type: null, kind: 'object', }, ]), @@ -150,7 +146,7 @@ module('Writes | object fields', function (hooks) { assert.strictEqual(record.address, null, 'The object is correctly set to null'); // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual(cachedResourceData?.attributes?.address, null, 'the cache values are correctly updated'); record.address = { street: '123 Main Street', @@ -179,12 +175,10 @@ module('Writes | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'address', - type: null, kind: 'object', }, ]), @@ -224,7 +218,7 @@ module('Writes | object fields', function (hooks) { assert.strictEqual(address, record.address, 'Object reference does not change'); // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.address, { street: '123 Main Street', city: 'Anytown', state: 'NJ', zip: '12345' }, @@ -241,12 +235,10 @@ module('Writes | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { name: 'address', - type: null, kind: 'object', }, ]), @@ -307,7 +299,7 @@ module('Writes | object fields', function (hooks) { assert.notStrictEqual(address, record2.address, 'We have a new object reference'); // test that the data entered the cache properly const identifier = recordIdentifierFor(record2); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.address, { @@ -329,7 +321,6 @@ module('Writes | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -409,7 +400,7 @@ module('Writes | object fields', function (hooks) { assert.strictEqual(address, record.address, 'object reference does not change'); // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.address, { @@ -441,7 +432,6 @@ module('Writes | object fields', function (hooks) { fields: withFields([ { name: 'name', - type: null, kind: 'field', }, { @@ -517,7 +507,7 @@ module('Writes | object fields', function (hooks) { assert.strictEqual(address, record.address, 'object reference does not change'); // test that the data entered the cache properly const identifier = recordIdentifierFor(record); - const cachedResourceData = store.cache.peek(identifier); + const cachedResourceData = store.cache.peek(identifier); assert.deepEqual( cachedResourceData?.attributes?.address, { diff --git a/tests/warp-drive__schema-record/tsconfig.json b/tests/warp-drive__schema-record/tsconfig.json index 69a7a140d56..17944ceef99 100644 --- a/tests/warp-drive__schema-record/tsconfig.json +++ b/tests/warp-drive__schema-record/tsconfig.json @@ -1,6 +1,5 @@ { "include": ["app/**/*", "config/**/*", "tests/**/*"], - "baseUrl": ".", "compilerOptions": { "lib": ["DOM", "ESNext"], "module": "esnext", @@ -8,28 +7,88 @@ "moduleResolution": "bundler", "moduleDetection": "force", "strict": true, + "pretty": true, "exactOptionalPropertyTypes": false, "downlevelIteration": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "allowJs": true, - - "noImplicitOverride": true, - + "baseUrl": ".", + "noImplicitOverride": false, "incremental": true, - "noEmit": true, "declaration": false, - "types": ["ember-source/types"], - "paths": {} + "paths": { + "warp-drive__schema-record/*": ["./app/*"], + "@ember-data/debug": ["../../packages/debug/unstable-preview-types"], + "@ember-data/debug/*": ["../../packages/debug/unstable-preview-types/*"], + "@ember-data/graph": ["../../packages/graph/unstable-preview-types"], + "@ember-data/graph/*": ["../../packages/graph/unstable-preview-types/*"], + "@ember-data/json-api": ["../../packages/json-api/unstable-preview-types"], + "@ember-data/json-api/*": ["../../packages/json-api/unstable-preview-types/*"], + "@ember-data/request": ["../../packages/request/unstable-preview-types"], + "@ember-data/request/*": ["../../packages/request/unstable-preview-types/*"], + "@ember-data/request-utils": ["../../packages/request-utils/unstable-preview-types"], + "@ember-data/request-utils/*": ["../../packages/request-utils/unstable-preview-types/*"], + "@ember-data/store": ["../../packages/store/unstable-preview-types"], + "@ember-data/store/*": ["../../packages/store/unstable-preview-types/*"], + "@ember-data/tracking": ["../../packages/tracking/unstable-preview-types"], + "@ember-data/tracking/*": ["../../packages/tracking/unstable-preview-types/*"], + "@ember-data/unpublished-test-infra": ["../../packages/unpublished-test-infra/unstable-preview-types"], + "@ember-data/unpublished-test-infra/*": ["../../packages/unpublished-test-infra/unstable-preview-types/*"], + "@ember-data/model": ["../../packages/model/unstable-preview-types"], + "@ember-data/model/*": ["../../packages/model/unstable-preview-types/*"], + "@ember-data/legacy-compat": ["../../packages/legacy-compat/unstable-preview-types"], + "@ember-data/legacy-compat/*": ["../../packages/legacy-compat/unstable-preview-types/*"], + "@warp-drive/core-types": ["../../packages/core-types/unstable-preview-types"], + "@warp-drive/core-types/*": ["../../packages/core-types/unstable-preview-types/*"], + "@warp-drive/schema-record": ["../../packages/schema-record/unstable-preview-types"], + "@warp-drive/schema-record/*": ["../../packages/schema-record/unstable-preview-types/*"], + "@warp-drive/build-config": ["../../packages/build-config/unstable-preview-types"], + "@warp-drive/build-config/*": ["../../packages/build-config/unstable-preview-types/*"] + } }, "references": [ - { "path": "../../packages/schema-record" }, - { "path": "../../packages/core-types" }, - { "path": "../../packages/store" }, - { "path": "../../packages/legacy-compat" }, - { "path": "../../packages/model" } + { + "path": "../../packages/schema-record" + }, + { + "path": "../../packages/core-types" + }, + { + "path": "../../packages/store" + }, + { + "path": "../../packages/legacy-compat" + }, + { + "path": "../../packages/model" + }, + { + "path": "../../packages/debug" + }, + { + "path": "../../packages/graph" + }, + { + "path": "../../packages/json-api" + }, + { + "path": "../../packages/request" + }, + { + "path": "../../packages/request-utils" + }, + { + "path": "../../packages/tracking" + }, + { + "path": "../../packages/unpublished-test-infra" + }, + { + "path": "../../packages/build-config" + } ] } diff --git a/tests/warp-drive__schema/package.json b/tests/warp-drive__schema/package.json index af139a968bf..1d21d05bf21 100644 --- a/tests/warp-drive__schema/package.json +++ b/tests/warp-drive__schema/package.json @@ -11,14 +11,14 @@ }, "license": "MIT", "author": "", - "dependencies": { + "devDependencies": { "pnpm-sync-dependencies-meta-injected": "0.0.10" }, "scripts": { - "_syncPnpm": "bun run sync-dependencies-meta-injected" + "sync-hardlinks": "bun run sync-dependencies-meta-injected" }, "engines": { - "node": ">= 18.20.1" + "node": ">= 22.1.0" }, "volta": { "extends": "../../package.json" diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000000..6ac9313484d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "files": [], + "include": [], + "references": [ + { "path": "./packages/-ember-data" }, + { "path": "./packages/active-record" }, + { "path": "./packages/adapter" }, + { "path": "./packages/build-config" }, + { "path": "./packages/core-types" }, + { "path": "./packages/debug" }, + { "path": "./packages/diagnostic" }, + // { "path": "./packages/ember" }, + { "path": "./packages/graph" }, + { "path": "./packages/holodeck" }, + { "path": "./packages/json-api" }, + { "path": "./packages/legacy-compat" }, + { "path": "./packages/model" }, + { "path": "./packages/request" }, + { "path": "./packages/request-utils" }, + { "path": "./packages/rest" }, + { "path": "./packages/schema-record" }, + { "path": "./packages/serializer" }, + { "path": "./packages/store" }, + { "path": "./packages/tracking" }, + { "path": "./packages/unpublished-test-infra" } + ] +} diff --git a/turbo.json b/turbo.json index aacf840a0c3..ab2fa36344b 100644 --- a/turbo.json +++ b/turbo.json @@ -3,78 +3,138 @@ // // https://turbo.build/repo/docs/core-concepts/caching/file-inputs#specifying-additional-inputs "globalDependencies": ["pnpm-lock.yaml", "patches/*", ".github/*"], + "pipeline": { ///////////////////////////////////////////////// ///////////////////////////////////////////////// // - // Local Dev + // Initial Setup // ///////////////////////////////////////////////// ///////////////////////////////////////////////// - "start": { - "dependsOn": ["_syncPnpm", "^_build"], - "outputs": [], - "cache": false, - "persistent": true + "build:infra": { + "inputs": [ + // + V2-Addon convention + "src/**", + "cjs-src/**", + "addon-main.*", + "tsconfig.json", + "babel.*", + "vite.config-cjs.*", + "vite.config.*", + "../../config/**" + ], + "outputs": [ + // V1-Addon convention + "addon-test-support/**", + // V2-Addon convention + "dist/**", + "unstable-preview-types/**", + "tsconfig.tsbuildinfo" + ], + "dependsOn": [], + // https://turbo.build/repo/docs/reference/configuration#outputmode + "outputMode": "new-only" }, - ///////////////////////////////////////////////// - ///////////////////////////////////////////////// - // - // C.I. / C.D. - // - ///////////////////////////////////////////////// - ///////////////////////////////////////////////// - "_build": { + // run build in all library packages + // these do not require any associated packages + // to have been built to build other than + // the build:infra packages + "build:pkg": { "inputs": [ // + V2-Addon convention "src/**", "addon-main.*", "tsconfig.json", "babel.*", - "rollup-config.*" + "vite.config.*", + "../../config/**" ], "outputs": [ // V1-Addon convention - "addon/**", "addon-test-support/**", // V2-Addon convention "dist/**", - "declarations/**", - "unstable-preview-types/**" + "unstable-preview-types/**", + "tsconfig.tsbuildinfo" ], - "dependsOn": ["_syncPnpm"] + "dependsOn": ["^build:infra", "^build:pkg"], + // https://turbo.build/repo/docs/reference/configuration#outputmode + "outputMode": "new-only" }, - "build": { + + // run build in all library packages + // that ship gts files + // these do not require any associated packages + // to have been built to build other than + // the build:infra packages + "build:glint": { "inputs": [ // + V2-Addon convention "src/**", - "tests/**", "addon-main.*", "tsconfig.json", "babel.*", - "rollup-config.*" + "vite.config.*", + "../../config/**", + "tsconfig.tsbuildinfo" ], "outputs": [ // V1-Addon convention - "addon/**", "addon-test-support/**", // V2-Addon convention "dist/**", - "dist-test/**", - "declarations/**", "unstable-preview-types/**" ], - "dependsOn": ["_syncPnpm"] + "dependsOn": [], + "cache": false, + // https://turbo.build/repo/docs/reference/configuration#outputmode + "outputMode": "new-only" + }, + + // virtual task + "crawl-graph": { + "dependsOn": ["^crawl-graph"], + "cache": false + }, + + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + // + // Local Dev + // + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + "start": { + // "dependsOn": ["_task:sync-hardlinks", "^_build"], + // "outputs": [], + // "cache": false, + // "persistent": true }, + + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + // + // Checks + // + ///////////////////////////////////////////////// + ///////////////////////////////////////////////// + "lint": { - "cache": false, - "dependsOn": ["_syncPnpm", "^_build"] + "inputs": ["eslint.*", "tsconfig.json", "tsconfig.tsbuildinfo"], + "dependsOn": ["^build:pkg"], + // https://turbo.build/repo/docs/reference/configuration#outputmode + "outputMode": "new-only" }, + "check:types": { - "cache": false, - "dependsOn": ["_syncPnpm", "^_build"] + "inputs": ["tsconfig.json", "tsconfig.tsbuildinfo"], + "dependsOn": ["^build:pkg"], + // https://turbo.build/repo/docs/reference/configuration#outputmode + "outputMode": "new-only" }, + "build:tests": { "inputs": [ // + V2-Addon convention @@ -83,7 +143,7 @@ "addon-main.*", "tsconfig.json", "babel.*", - "rollup-config.*" + "vite.config.*" ], "outputs": [ // V1-Addon convention @@ -95,7 +155,7 @@ "declarations/**", "unstable-preview-types/**" ], - "dependsOn": ["_syncPnpm", "^_build"] + "dependsOn": ["^build:pkg"] }, "build:production": { "inputs": [ @@ -105,7 +165,7 @@ "ember-cli-build.js", "addon-main.*", "babel.*", - "rollup-config.*" + "vite.config.*" ], "outputs": [ // V1-Addon convention @@ -116,13 +176,9 @@ "dist-test/**", "declarations/**" ], - "dependsOn": ["_syncPnpm", "^_build"] - }, - // See: https://github.com/pnpm/pnpm/issues/4965 - "_syncPnpm": { - "dependsOn": ["^_build"], - "cache": false + "dependsOn": ["^build:pkg"] }, + "test": { "outputs": [], "dependsOn": ["build:tests"]