diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..be3a8d255 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,76 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +ember-cli-addon-docs is an Ember addon that generates documentation sites for other Ember addons. It provides components for building doc sites, a build pipeline that extracts API docs and search indexes, and a deploy pipeline for GitHub Pages. + +## Commands + +- **Install:** `pnpm install` +- **Dev server:** `pnpm start` (serves dummy app at http://localhost:4200) +- **Build:** `pnpm build` +- **Lint all:** `pnpm lint` +- **Lint fix:** `pnpm lint:fix` +- **Run all tests:** `pnpm test` +- **Ember tests only:** `pnpm test:ember` +- **Ember tests in watch mode:** `pnpm test:ember --server` +- **Node tests only:** `pnpm test:node` (mocha, runs tests in `tests-node/`) +- **Test app tests:** `pnpm test:test-apps` (runs tests in `test-apps/new-addon`) + +Uses pnpm as the package manager. The workspace includes `test-apps/*`. + +## Architecture + +### Build Pipeline (lib/) + +The core build logic lives in `index.js` and `lib/`. During Ember's build process: + +1. **`index.js`** — Main addon entry point. Hooks into Ember CLI's `treeForApp`, `treeForAddon`, `treeForPublic`, and `treeForVendor`. Compiles markdown templates, extracts API docs via plugin registry, and builds a search index. + +2. **`lib/broccoli/`** — Broccoli plugins for the build pipeline: + - `docs-compiler.js` — Compiles extracted API documentation into JSON API format + - `search-indexer.js` — Builds a lunr.js search index from docs and template content + - `docs-filter.js` / `hbs-content-filter.js` — Broccoli filters for processing files + +3. **`lib/preprocessors/`** — Template preprocessors: + - `markdown-template-compiler.js` — Compiles `.md` files into Handlebars templates + - `hbs-content-extractor.js` — Extracts content from HBS templates for search indexing + +4. **`lib/deploy/`** — ember-cli-deploy plugin for deploying docs to GitHub Pages + +5. **`lib/models/plugin-registry.js`** — Registry for doc generation plugins (e.g., `ember-cli-addon-docs-yuidoc`) + +### Runtime Addon (addon/) + +Ember Octane components and services that consuming addons use in their doc sites: + +- **Components:** `docs-viewer`, `docs-header`, `docs-hero`, `docs-demo`, `docs-snippet`, `docs-code-highlight`, `api/` (API doc viewer components), etc. +- **Services:** `docs-routes` (navigation), `docs-search` (lunr-based search), `project-version` (version management) +- **Styles:** Uses Tailwind CSS 1.x compiled via PostCSS/Sass pipeline + +### App Re-exports (app/) + +Standard Ember addon pattern — re-exports addon modules into the consuming app's namespace. + +### Blueprints (blueprints/) + +- `ember-cli-addon-docs` — Default blueprint run on `ember install` +- `docs-page` — Generator for new documentation pages + +### Sandbox (sandbox/) + +A "sandbox" addon used as a secondary documented project in the dummy app, demonstrating multi-project documentation support. + +### Tests + +- `tests/` — Ember tests (acceptance, integration, unit) using QUnit, run via testem in Chrome +- `tests-node/` — Node.js unit tests using Mocha/Chai for the build pipeline code in `lib/` +- `test-apps/new-addon` — Separate test app in the pnpm workspace + +### Key Concepts + +- **Plugin system:** API doc extraction is pluggable via addons with keyword `ember-cli-addon-docs-plugin`. The default plugin is `ember-cli-addon-docs-yuidoc`. +- **`documentingAddonAt`:** Config option allowing a standalone app (not a dummy app) to document an addon at a specific path. +- **Version support:** The addon manages doc versions for deployment, with a "latest" version concept (`-latest`). diff --git a/addon/adapters/-addon-docs.js b/addon/adapters/-addon-docs.js deleted file mode 100644 index 69dc53679..000000000 --- a/addon/adapters/-addon-docs.js +++ /dev/null @@ -1,28 +0,0 @@ -import Adapter from '@ember-data/adapter'; -import { getRootURL } from 'ember-cli-addon-docs/-private/config'; - -export default class AddonDocsAdapter extends Adapter { - defaultSerializer = '-addon-docs'; - - get namespace() { - return `${getRootURL(this).replace(/\/$/, '')}/docs`; - } - - shouldBackgroundReloadAll() { - return false; - } - - shouldBackgroundReloadRecord() { - return false; - } - - findRecord(store, modelClass, id, snapshot) { - if (modelClass.modelName === 'project') { - return fetch(`${this.namespace}/${id}.json`).then((response) => - response.json(), - ); - } else { - return store.peekRecord(modelClass.modelName, id); - } - } -} diff --git a/addon/adapters/class.js b/addon/adapters/class.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/adapters/class.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/adapters/component.js b/addon/adapters/component.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/adapters/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/adapters/module.js b/addon/adapters/module.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/adapters/module.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/adapters/project.js b/addon/adapters/project.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/adapters/project.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/components/api/x-class/index.js b/addon/components/api/x-class/index.js index e0d390c80..2e954a815 100644 --- a/addon/components/api/x-class/index.js +++ b/addon/components/api/x-class/index.js @@ -1,8 +1,7 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; -import { or } from '@ember/object/computed'; import { capitalize } from '../../../utils/string'; -import { memberFilter } from '../../../utils/computed'; +import { filterMembers } from '../../../utils/computed'; import { addonDocsConfig } from 'ember-cli-addon-docs/-private/config'; export default class XClass extends Component { @@ -13,22 +12,27 @@ export default class XClass extends Component { @tracked showPrivate = false; @tracked showDeprecated = false; - @memberFilter('args.class', 'accessors') - accessors; + get accessors() { + return filterMembers(this.args.class, 'accessors', this); + } - @memberFilter('args.class', 'methods') - methods; + get methods() { + return filterMembers(this.args.class, 'methods', this); + } - @memberFilter('args.class', 'fields') - fields; + get fields() { + return filterMembers(this.args.class, 'fields', this); + } - @or( - 'component.hasInherited', - 'component.hasProtected', - 'component.hasPrivate', - 'component.hasDeprecated', - ) - hasToggles; + get hasToggles() { + let klass = this.args.class; + return !!( + klass.hasInherited || + klass.hasProtected || + klass.hasPrivate || + klass.hasDeprecated + ); + } get hasContents() { let klass = this.args.class; diff --git a/addon/components/api/x-component/index.js b/addon/components/api/x-component/index.js index 4c15e8553..d3fdc09de 100644 --- a/addon/components/api/x-component/index.js +++ b/addon/components/api/x-component/index.js @@ -1,9 +1,8 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; -import { alias, or } from '@ember/object/computed'; import { capitalize } from '../../../utils/string'; -import { memberFilter } from '../../../utils/computed'; +import { filterMembers } from '../../../utils/computed'; export default class XComponent extends Component { @tracked showInherited = false; @@ -12,29 +11,36 @@ export default class XComponent extends Component { @tracked showPrivate = false; @tracked showDeprecated = false; - @alias('args.component.overloadedYields') - yields; + get yields() { + return this.args.component.overloadedYields; + } - @memberFilter('args.component', 'arguments') - arguments; + get arguments() { + return filterMembers(this.args.component, 'arguments', this); + } - @memberFilter('args.component', 'accessors') - accessors; + get accessors() { + return filterMembers(this.args.component, 'accessors', this); + } - @memberFilter('args.component', 'methods') - methods; + get methods() { + return filterMembers(this.args.component, 'methods', this); + } - @memberFilter('args.component', 'fields') - fields; + get fields() { + return filterMembers(this.args.component, 'fields', this); + } - @or( - 'args.component.hasInherited', - 'args.component.hasInternal', - 'args.component.hasProtected', - 'args.component.hasPrivate', - 'args.component.hasDeprecated', - ) - hasToggles; + get hasToggles() { + let c = this.args.component; + return !!( + c.hasInherited || + c.hasInternal || + c.hasProtected || + c.hasPrivate || + c.hasDeprecated + ); + } get hasContents() { let component = this.args.component; diff --git a/addon/components/docs-header/search-box/index.js b/addon/components/docs-header/search-box/index.js index 3ebf1f5f7..423216975 100644 --- a/addon/components/docs-header/search-box/index.js +++ b/addon/components/docs-header/search-box/index.js @@ -6,7 +6,7 @@ import { formElementHasFocus } from 'ember-cli-addon-docs/keyboard-config'; import { addonDocsConfig } from 'ember-cli-addon-docs/-private/config'; export default class DocsHeaderSearchBox extends Component { - @service store; + @service docsStore; constructor() { super(...arguments); @@ -16,13 +16,8 @@ export default class DocsHeaderSearchBox extends Component { @addonDocsConfig config; - // TODO: The searchbox doesn't work without the project being fetched. - // We should move this logic (and everywhere else in the code that's fetching - // the project) within a new addonDocs service that wires all that up together. - // I think it's fine if our Docs-* components assume there is a single global - // project. fetchProject = task(async () => { - await this.store.findRecord('project', this.config.projectName); + await this.docsStore.findRecord('project', this.config.projectName); }); @action diff --git a/addon/components/docs-header/search-results/index.js b/addon/components/docs-header/search-results/index.js index e66c285a0..cdc2b29b3 100644 --- a/addon/components/docs-header/search-results/index.js +++ b/addon/components/docs-header/search-results/index.js @@ -10,7 +10,7 @@ import { addonDocsConfig } from 'ember-cli-addon-docs/-private/config'; export default class DocsHeaderSearchResults extends Component { @service docsSearch; @service router; - @service store; + @service docsStore; @tracked selectedIndex = null; @tracked rawSearchResults = []; @@ -25,7 +25,7 @@ export default class DocsHeaderSearchResults extends Component { } get project() { - return this.store.peekRecord('project', this.config.projectName); + return this.docsStore.peekRecord('project', this.config.projectName); } get trimmedQuery() { @@ -91,12 +91,11 @@ export default class DocsHeaderSearchResults extends Component { } }) - // Add a reference to the Ember Data model to each API item search result + // Add a reference to the model to each API item search result .map((searchResult) => { let { document } = searchResult; if (document.type !== 'template') { - let store = this.store; - searchResult.model = store.peekRecord( + searchResult.model = this.docsStore.peekRecord( document.type, document.item.id, ); diff --git a/addon/components/docs-viewer/x-autogenerated-api-docs/index.js b/addon/components/docs-viewer/x-autogenerated-api-docs/index.js index d1dee83ba..13f1f6e1f 100644 --- a/addon/components/docs-viewer/x-autogenerated-api-docs/index.js +++ b/addon/components/docs-viewer/x-autogenerated-api-docs/index.js @@ -4,7 +4,7 @@ import Component from '@glimmer/component'; import { set as _set } from 'lodash'; export default class XAutogeneratedApiDocs extends Component { - @service store; + @service docsStore; @readOnly('args.project.navigationIndex') sections; diff --git a/addon/components/docs-viewer/x-nav/index.js b/addon/components/docs-viewer/x-nav/index.js index 93143e3c2..e2f9bdb90 100644 --- a/addon/components/docs-viewer/x-nav/index.js +++ b/addon/components/docs-viewer/x-nav/index.js @@ -12,7 +12,7 @@ export default class XNav extends Component { @localCopy('args.root', 'docs') root; - @service store; + @service docsStore; @tracked isShowingMenu; @@ -31,6 +31,6 @@ export default class XNav extends Component { return this.args.project; } - return this.store.peekRecord('project', this.config.projectName); + return this.docsStore.peekRecord('project', this.config.projectName); } } diff --git a/addon/models/class.js b/addon/models/class.js index b7e5ea53b..9a394d374 100644 --- a/addon/models/class.js +++ b/addon/models/class.js @@ -1,135 +1,175 @@ -import Model, { attr, belongsTo } from '@ember-data/model'; -import { filterBy, or, union } from '@ember/object/computed'; -import { memberUnion, hasMemberType } from '../utils/computed'; - -export default class Class extends Model { - @belongsTo('class', { async: false, inverse: null, polymorphic: false }) - parentClass; - - isClass = true; - - @attr - name; - - @attr - file; - - @attr - exportType; - - @attr - description; - - @attr - lineNumber; - - @attr - access; - - @attr - accessors; - - @attr - methods; - - @attr - fields; - - @attr - tags; - - @filterBy('accessors', 'access', 'public') - publicAccessors; - - @filterBy('methods', 'access', 'public') - publicMethods; - - @filterBy('fields', 'access', 'public') - publicFields; - - @filterBy('accessors', 'access', 'private') - privateAccessors; - - @filterBy('methods', 'access', 'private') - privateMethods; - - @filterBy('fields', 'access', 'private') - privateFields; - - @filterBy('accessors', 'access', 'protected') - protectedAccessors; - - @filterBy('methods', 'access', 'protected') - protectedMethods; - - @filterBy('fields', 'access', 'protected') - protectedFields; - - @memberUnion('parentClass.allPublicAccessors', 'publicAccessors') - allPublicAccessors; - - @memberUnion('parentClass.allPublicMethods', 'publicMethods') - allPublicMethods; - - @memberUnion('parentClass.allPublicFields', 'publicFields') - allPublicFields; - - @memberUnion('parentClass.allPrivateAccessors', 'privateAccessors') - allPrivateAccessors; - - @memberUnion('parentClass.allPrivateMethods', 'privateMethods') - allPrivateMethods; - - @memberUnion('parentClass.allPrivateFields', 'privateFields') - allPrivateFields; - - @memberUnion('parentClass.allProtectedAccessors', 'protectedAccessors') - allProtectedAccessors; - - @memberUnion('parentClass.allProtectedMethods', 'protectedMethods') - allProtectedMethods; - - @memberUnion('parentClass.allProtectedFields', 'protectedFields') - allProtectedFields; - - @union('allPublicAccessors', 'allPrivateAccessors', 'allProtectedAccessors') - allAccessors; - - @union('allPublicMethods', 'allPrivateMethods', 'allProtectedMethods') - allMethods; - - @union('allPublicFields', 'allPrivateFields', 'allProtectedFields') - allFields; - - @or( - 'parentClass.allAccessors.length', - 'parentClass.allMethods.length', - 'parentClass.allFields.length', - ) - hasInherited; +function filterBy(array, key, value) { + return (array || []).filter((item) => item[key] === value); +} - @or( - 'allPrivateAccessors.length', - 'allPrivateMethods.length', - 'allPrivateFields.length', - ) - hasPrivate; +function memberUnionFn(parentMembers, childMembers) { + if (!parentMembers) return childMembers || []; + + let union = {}; + for (let member of parentMembers) { + union[member.name] = member; + } + for (let member of childMembers || []) { + union[member.name] = member; + } + return Object.values(union); +} - @or( - 'allProtectedAccessors.length', - 'allProtectedMethods.length', - 'allProtectedFields.length', - ) - hasProtected; +export default class Class { + id = null; + parentClass = null; - @hasMemberType( - 'allFields', - 'allAccessors', - 'allMethods', + isClass = true; - function (member) { - return member.tags && member.tags.find((t) => t.name === 'deprecated'); - }, - ) - hasDeprecated; + name = null; + file = null; + exportType = null; + description = null; + lineNumber = null; + access = null; + accessors = null; + methods = null; + fields = null; + tags = null; + + get publicAccessors() { + return filterBy(this.accessors, 'access', 'public'); + } + get publicMethods() { + return filterBy(this.methods, 'access', 'public'); + } + get publicFields() { + return filterBy(this.fields, 'access', 'public'); + } + + get privateAccessors() { + return filterBy(this.accessors, 'access', 'private'); + } + get privateMethods() { + return filterBy(this.methods, 'access', 'private'); + } + get privateFields() { + return filterBy(this.fields, 'access', 'private'); + } + + get protectedAccessors() { + return filterBy(this.accessors, 'access', 'protected'); + } + get protectedMethods() { + return filterBy(this.methods, 'access', 'protected'); + } + get protectedFields() { + return filterBy(this.fields, 'access', 'protected'); + } + + get allPublicAccessors() { + return memberUnionFn( + this.parentClass?.allPublicAccessors, + this.publicAccessors, + ); + } + get allPublicMethods() { + return memberUnionFn( + this.parentClass?.allPublicMethods, + this.publicMethods, + ); + } + get allPublicFields() { + return memberUnionFn(this.parentClass?.allPublicFields, this.publicFields); + } + + get allPrivateAccessors() { + return memberUnionFn( + this.parentClass?.allPrivateAccessors, + this.privateAccessors, + ); + } + get allPrivateMethods() { + return memberUnionFn( + this.parentClass?.allPrivateMethods, + this.privateMethods, + ); + } + get allPrivateFields() { + return memberUnionFn( + this.parentClass?.allPrivateFields, + this.privateFields, + ); + } + + get allProtectedAccessors() { + return memberUnionFn( + this.parentClass?.allProtectedAccessors, + this.protectedAccessors, + ); + } + get allProtectedMethods() { + return memberUnionFn( + this.parentClass?.allProtectedMethods, + this.protectedMethods, + ); + } + get allProtectedFields() { + return memberUnionFn( + this.parentClass?.allProtectedFields, + this.protectedFields, + ); + } + + get allAccessors() { + return [ + ...this.allPublicAccessors, + ...this.allPrivateAccessors, + ...this.allProtectedAccessors, + ]; + } + get allMethods() { + return [ + ...this.allPublicMethods, + ...this.allPrivateMethods, + ...this.allProtectedMethods, + ]; + } + get allFields() { + return [ + ...this.allPublicFields, + ...this.allPrivateFields, + ...this.allProtectedFields, + ]; + } + + get hasInherited() { + return !!( + this.parentClass?.allAccessors?.length || + this.parentClass?.allMethods?.length || + this.parentClass?.allFields?.length + ); + } + + get hasPrivate() { + return !!( + this.allPrivateAccessors.length || + this.allPrivateMethods.length || + this.allPrivateFields.length + ); + } + + get hasProtected() { + return !!( + this.allProtectedAccessors.length || + this.allProtectedMethods.length || + this.allProtectedFields.length + ); + } + + get hasDeprecated() { + let isDeprecated = (member) => + member.tags && member.tags.find((t) => t.name === 'deprecated'); + + return ( + this.allFields.some(isDeprecated) || + this.allAccessors.some(isDeprecated) || + this.allMethods.some(isDeprecated) + ); + } } diff --git a/addon/models/component.js b/addon/models/component.js index c8008c589..cc430699e 100644 --- a/addon/models/component.js +++ b/addon/models/component.js @@ -1,92 +1,114 @@ -import { attr } from '@ember-data/model'; -import { filterBy, or } from '@ember/object/computed'; import { dasherize } from '../utils/string'; - import Class from './class'; -import { memberUnion, hasMemberType } from '../utils/computed'; + +function filterBy(array, key, value) { + return (array || []).filter((item) => item[key] === value); +} + +function memberUnionFn(parentMembers, childMembers) { + if (!parentMembers) return childMembers || []; + + let union = {}; + for (let member of parentMembers) { + union[member.name] = member; + } + for (let member of childMembers || []) { + union[member.name] = member; + } + return Object.values(union); +} export default class Component extends Class { isComponent = true; - @attr - yields; - - @attr - arguments; - - @or('yields', 'inheritedYields') - overloadedYields; - - @filterBy('arguments', 'access', 'public') - publicArguments; - - @filterBy('arguments', 'access', 'private') - privateArguments; - - @filterBy('arguments', 'access', 'protected') - protectedArguments; - - @memberUnion('parentClass.allPublicArguments', 'publicArguments') - allPublicArguments; - - @memberUnion('parentClass.allPrivateArguments', 'privateArguments') - allPrivateArguments; - - @memberUnion('parentClass.allProtectedArguments', 'protectedArguments') - allProtectedArguments; - - @memberUnion('parentClass.allArguments', 'arguments') - allArguments; - - @or( - 'parentClass.overloadedYields.length', - 'parentClass.allArguments.length', - 'parentClass.allAccessors.length', - 'parentClass.allMethods.length', - 'parentClass.allFields.length', - ) - hasInherited; - - @or('allAccessors.length', 'allMethods.length', 'allFields.length') - hasInternal; - - @or( - 'allPrivateAccessors.length', - 'allPrivateArguments.length', - 'allPrivateMethods.length', - 'allPrivateFields.length', - ) - hasPrivate; - - @or( - 'allProtectedAccessors.length', - 'allProtectedArguments.length', - 'allProtectedMethods.length', - 'allProtectedFields.length', - ) - hasProtected; - - @hasMemberType( - 'allAccessors', - 'allArguments', - 'allMethods', - 'allFields', - - function (member) { - return member.tags && member.tags.find((t) => t.name === 'deprecated'); - }, - ) - hasDeprecated; - - /* - This gives us a way to link to a model, since we don't always link by the actual ID: - - - Go to item - - - Possible refactoring is to always link by actual ID, and implement redirects. - */ + yields = null; + arguments = null; + + get overloadedYields() { + return this.yields || this.inheritedYields; + } + + get publicArguments() { + return filterBy(this.arguments, 'access', 'public'); + } + get privateArguments() { + return filterBy(this.arguments, 'access', 'private'); + } + get protectedArguments() { + return filterBy(this.arguments, 'access', 'protected'); + } + + get allPublicArguments() { + return memberUnionFn( + this.parentClass?.allPublicArguments, + this.publicArguments, + ); + } + get allPrivateArguments() { + return memberUnionFn( + this.parentClass?.allPrivateArguments, + this.privateArguments, + ); + } + get allProtectedArguments() { + return memberUnionFn( + this.parentClass?.allProtectedArguments, + this.protectedArguments, + ); + } + + get allArguments() { + return memberUnionFn(this.parentClass?.allArguments, this.arguments); + } + + get hasInherited() { + return !!( + this.parentClass?.overloadedYields?.length || + this.parentClass?.allArguments?.length || + this.parentClass?.allAccessors?.length || + this.parentClass?.allMethods?.length || + this.parentClass?.allFields?.length + ); + } + + get hasInternal() { + return !!( + this.allAccessors.length || + this.allMethods.length || + this.allFields.length + ); + } + + get hasPrivate() { + return !!( + this.allPrivateAccessors.length || + this.allPrivateArguments.length || + this.allPrivateMethods.length || + this.allPrivateFields.length + ); + } + + get hasProtected() { + return !!( + this.allProtectedAccessors.length || + this.allProtectedArguments.length || + this.allProtectedMethods.length || + this.allProtectedFields.length + ); + } + + get hasDeprecated() { + let isDeprecated = (member) => + member.tags && member.tags.find((t) => t.name === 'deprecated'); + + return ( + this.allAccessors.some(isDeprecated) || + this.allArguments.some(isDeprecated) || + this.allMethods.some(isDeprecated) || + this.allFields.some(isDeprecated) + ); + } + get routingId() { return `components/${dasherize(this.name)}`; } diff --git a/addon/models/module.js b/addon/models/module.js index eb40ea0b9..5802b7229 100644 --- a/addon/models/module.js +++ b/addon/models/module.js @@ -1,30 +1,11 @@ -import Model, { attr, hasMany } from '@ember-data/model'; +export default class Module { + id = null; + file = null; + variables = null; + functions = null; + classes = null; + components = null; -export default class Module extends Model { - @attr - file; - - @attr - variables; - - @attr - functions; - - @hasMany('class', { async: false, inverse: null, polymorphic: true }) - classes; - - @hasMany('class', { async: false, inverse: null, polymorphic: true }) - components; - - /* - This gives us a way to link to a model, since we don't always link by the actual ID: - - - Go to item - - - Possible refactoring is to always link by actual ID, and implement redirects. - */ get routingId() { return `modules/${this.id}`; } diff --git a/addon/models/project.js b/addon/models/project.js index 4186a39c0..a5981ed26 100644 --- a/addon/models/project.js +++ b/addon/models/project.js @@ -1,18 +1,8 @@ -import Model, { attr, hasMany } from '@ember-data/model'; - -export default class Project extends Model { - @attr - name; - - @attr - githubUrl; - - @attr - version; - - @attr - navigationIndex; - - @hasMany('module', { async: false, inverse: null, polymorphic: false }) - modules; +export default class Project { + id = null; + name = null; + githubUrl = null; + version = null; + navigationIndex = null; + modules = null; } diff --git a/addon/routes/docs.js b/addon/routes/docs.js index 85927ccbd..779bb07c3 100644 --- a/addon/routes/docs.js +++ b/addon/routes/docs.js @@ -3,10 +3,10 @@ import { inject as service } from '@ember/service'; import { getAddonDocsConfig } from 'ember-cli-addon-docs/-private/config'; export default class DocsRoute extends Route { - @service store; + @service docsStore; model() { - return this.store.findRecord( + return this.docsStore.findRecord( 'project', getAddonDocsConfig(this).projectName, ); diff --git a/addon/routes/docs/api/item.js b/addon/routes/docs/api/item.js index bbca9c198..b819f1133 100644 --- a/addon/routes/docs/api/item.js +++ b/addon/routes/docs/api/item.js @@ -3,7 +3,7 @@ import { inject as service } from '@ember/service'; import { assert } from '@ember/debug'; export default class DocsApiRoute extends Route { - @service store; + @service docsStore; model({ path }) { let item; @@ -13,11 +13,11 @@ export default class DocsApiRoute extends Route { let itemId = path.replace(/^modules\//, ''); let [moduleId] = itemId.split(/~|#/); - let module = this.store.peekRecord('module', moduleId); + let module = this.docsStore.peekRecord('module', moduleId); item = - module.get('components').find((component) => component.id === itemId) || - module.get('classes').find((_class) => _class.id === itemId) || + module.components.find((component) => component.id === itemId) || + module.classes.find((_class) => _class.id === itemId) || module; } else { // Create a regex that will match modules by either the path, or the @@ -25,25 +25,23 @@ export default class DocsApiRoute extends Route { let type = path.match(/^([\w-]*)s\//)[1]; let pathRegex = new RegExp(`${path}(/${type})?$`); - let modules = this.store.peekAll('module'); + let modules = this.docsStore.peekAll('module'); let matches = modules.filter((m) => m.id.match(pathRegex)); let module = matches[0]; assert(`no modules match the path '${path}'`, matches.length > 0); assert( `multiple modules match the path '${path}', ids: ${matches - .mapBy('id') + .map((m) => m.id) .join(', ')}`, matches.length <= 1, ); item = - module - .get('components') - .find((component) => component.exportType === 'default') || - module - .get('classes') - .find((_class) => _class.exportType === 'default') || + module.components.find( + (component) => component.exportType === 'default', + ) || + module.classes.find((_class) => _class.exportType === 'default') || module; } diff --git a/addon/serializers/-addon-docs.js b/addon/serializers/-addon-docs.js deleted file mode 100644 index 634d78822..000000000 --- a/addon/serializers/-addon-docs.js +++ /dev/null @@ -1,7 +0,0 @@ -import Serializer from '@ember-data/serializer'; - -export default class AddonDocsSerializer extends Serializer { - normalizeResponse(store, primaryModelClass, payload) { - return payload; - } -} diff --git a/addon/serializers/class.js b/addon/serializers/class.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/serializers/class.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/serializers/component.js b/addon/serializers/component.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/serializers/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/serializers/module.js b/addon/serializers/module.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/serializers/module.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/serializers/project.js b/addon/serializers/project.js deleted file mode 100644 index 5688abd77..000000000 --- a/addon/serializers/project.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './-addon-docs'; diff --git a/addon/services/docs-store.js b/addon/services/docs-store.js new file mode 100644 index 000000000..f90ca998f --- /dev/null +++ b/addon/services/docs-store.js @@ -0,0 +1,118 @@ +import Service from '@ember/service'; +import { tracked } from '@glimmer/tracking'; +import { getRootURL } from 'ember-cli-addon-docs/-private/config'; + +import Project from '../models/project'; +import Module from '../models/module'; +import Class from '../models/class'; +import Component from '../models/component'; + +const MODEL_CLASSES = { + project: Project, + module: Module, + class: Class, + component: Component, +}; + +/** + * A lightweight store that replaces ember-data for loading and caching + * documentation JSON. Fetches JSON API payloads from the build output + * and deserializes them into plain tracked objects. + */ +export default class DocsStoreService extends Service { + @tracked _records = { + project: {}, + module: {}, + class: {}, + component: {}, + }; + + _fetches = {}; + + async findRecord(type, id) { + let existing = this._records[type]?.[id]; + if (existing) return existing; + + if (type === 'project') { + if (!this._fetches[id]) { + this._fetches[id] = this._fetchProject(id); + } + return this._fetches[id]; + } + + return null; + } + + peekRecord(type, id) { + return this._records[type]?.[id] || null; + } + + peekAll(type) { + return Object.values(this._records[type] || {}); + } + + async _fetchProject(id) { + let namespace = `${getRootURL(this).replace(/\/$/, '')}/docs`; + let url = `${namespace}/${id}.json`; + + let response = await fetch(url); + let payload = await response.json(); + + this._loadPayload(payload); + + return this._records.project[id]; + } + + _loadPayload(payload) { + let allRecords = []; + + // Collect data (can be single or array) + let dataItems = Array.isArray(payload.data) ? payload.data : [payload.data]; + allRecords.push(...dataItems); + + // Collect included + if (payload.included) { + allRecords.push(...payload.included); + } + + // First pass: create all record instances with attributes + for (let raw of allRecords) { + let { type, id, attributes } = raw; + if (!MODEL_CLASSES[type]) continue; + + let ModelClass = MODEL_CLASSES[type]; + let record = new ModelClass(); + record.id = id; + + if (attributes) { + for (let [key, value] of Object.entries(attributes)) { + record[key] = value; + } + } + + this._records[type][id] = record; + } + + // Second pass: resolve relationships + for (let raw of allRecords) { + let { type, id, relationships } = raw; + if (!relationships || !this._records[type]?.[id]) continue; + + let record = this._records[type][id]; + for (let [key, rel] of Object.entries(relationships)) { + if (rel.data === null || rel.data === undefined) { + record[key] = null; + } else if (Array.isArray(rel.data)) { + record[key] = rel.data + .map((ref) => this._records[ref.type]?.[ref.id]) + .filter(Boolean); + } else { + record[key] = this._records[rel.data.type]?.[rel.data.id] || null; + } + } + } + + // Trigger reactivity update + this._records = { ...this._records }; + } +} diff --git a/addon/utils/computed.js b/addon/utils/computed.js index 16ad61c0e..fcf3a26a0 100644 --- a/addon/utils/computed.js +++ b/addon/utils/computed.js @@ -1,37 +1,5 @@ -import { computed, get } from '@ember/object'; import { capitalize } from './string'; -/** - @function initialize - @hide -*/ -export function memberUnion(parentMembersKey, childMembersKey) { - return computed( - `${parentMembersKey}.[]`, - `${childMembersKey}.[]`, - function () { - let parentMembers = get(this, parentMembersKey); - let childMembers = get(this, childMembersKey); - - if (!parentMembers) { - return childMembers; - } - - let union = {}; - - for (let member of parentMembers) { - union[member.name] = member; - } - - for (let member of childMembers) { - union[member.name] = member; - } - - return Object.values(union); - }, - ); -} - function memberSort(a, b) { if (a.isStatic && !b.isStatic) { return -1; @@ -55,78 +23,55 @@ function memberSort(a, b) { } /** - @function initialize - @hide -*/ -export function memberFilter(classKey, memberType) { - return computed( - classKey, - 'showInherited', - 'showInternal', - 'showProtected', - 'showPrivate', - 'showDeprecated', - function () { - let klass = get(this, classKey); - let showInternal = this.showInternal; - let showInherited = this.showInherited; - let showProtected = this.showProtected; - let showPrivate = this.showPrivate; - let showDeprecated = this.showDeprecated; - - let members = []; - - if (showInternal === false && memberType !== 'arguments') { - return members; - } - - let capitalKey = capitalize(memberType); - - let publicMembers = showInherited - ? klass.get(`allPublic${capitalKey}`) - : klass.get(`public${capitalKey}`); - let privateMembers = showInherited - ? klass.get(`allPrivate${capitalKey}`) - : klass.get(`private${capitalKey}`); - let protectedMembers = showInherited - ? klass.get(`allProtected${capitalKey}`) - : klass.get(`protected${capitalKey}`); - - members.push(...publicMembers); - - if (showPrivate) { - members.push(...privateMembers); - } - - if (showProtected) { - members.push(...protectedMembers); - } - - if (!showDeprecated) { - members = members.filter((m) => { - return !m.tags || !m.tags.find((t) => t.name === 'deprecated'); - }); - } - - return members.sort(memberSort); - }, - ); -} + * Filters members of a class/component based on the current toggle state. + * + * @param {Object} klass - The class or component model + * @param {string} memberType - The type of member ('accessors', 'methods', 'fields', 'arguments') + * @param {Object} context - The component context with showInherited, showPrivate, etc. + * @returns {Array} Filtered and sorted members + */ +export function filterMembers(klass, memberType, context) { + let showInternal = context.showInternal; + let showInherited = context.showInherited; + let showProtected = context.showProtected; + let showPrivate = context.showPrivate; + let showDeprecated = context.showDeprecated; + + let members = []; + + if (showInternal === false && memberType !== 'arguments') { + return members; + } -/** - @function initialize - @hide -*/ -export function hasMemberType(...memberKeys) { - let filter = memberKeys.pop(); - - return computed(...memberKeys.map((k) => `${k}.[]`), { - get() { - return memberKeys.some((memberKey) => { - return get(this, memberKey).some((member) => filter(member, memberKey)); - }); - }, - }); + let capitalKey = capitalize(memberType); + + let publicMembers = showInherited + ? klass[`allPublic${capitalKey}`] + : klass[`public${capitalKey}`]; + let privateMembers = showInherited + ? klass[`allPrivate${capitalKey}`] + : klass[`private${capitalKey}`]; + let protectedMembers = showInherited + ? klass[`allProtected${capitalKey}`] + : klass[`protected${capitalKey}`]; + + members.push(...(publicMembers || [])); + + if (showPrivate) { + members.push(...(privateMembers || [])); + } + + if (showProtected) { + members.push(...(protectedMembers || [])); + } + + if (!showDeprecated) { + members = members.filter((m) => { + return !m.tags || !m.tags.find((t) => t.name === 'deprecated'); + }); + } + + return members.sort(memberSort); } /** diff --git a/app/adapters/-addon-docs.js b/app/adapters/-addon-docs.js deleted file mode 100644 index d740b0266..000000000 --- a/app/adapters/-addon-docs.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/adapters/-addon-docs'; diff --git a/app/adapters/class.js b/app/adapters/class.js deleted file mode 100644 index 34a3dbcf2..000000000 --- a/app/adapters/class.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/adapters/class'; diff --git a/app/adapters/component.js b/app/adapters/component.js deleted file mode 100644 index c960b8695..000000000 --- a/app/adapters/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/adapters/component'; diff --git a/app/adapters/module.js b/app/adapters/module.js deleted file mode 100644 index ca1d765e7..000000000 --- a/app/adapters/module.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/adapters/module'; diff --git a/app/adapters/project.js b/app/adapters/project.js deleted file mode 100644 index d9cefea54..000000000 --- a/app/adapters/project.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/adapters/project'; diff --git a/app/models/class.js b/app/models/class.js deleted file mode 100644 index 7785f76bb..000000000 --- a/app/models/class.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/models/class'; diff --git a/app/models/component.js b/app/models/component.js deleted file mode 100644 index 9fc4bd47d..000000000 --- a/app/models/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/models/component'; diff --git a/app/models/module.js b/app/models/module.js deleted file mode 100644 index b5ca51008..000000000 --- a/app/models/module.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/models/module'; diff --git a/app/models/project.js b/app/models/project.js deleted file mode 100644 index ccb5bf8e3..000000000 --- a/app/models/project.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/models/project'; diff --git a/app/serializers/-addon-docs.js b/app/serializers/-addon-docs.js deleted file mode 100644 index e0ae1047f..000000000 --- a/app/serializers/-addon-docs.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/serializers/-addon-docs'; diff --git a/app/serializers/class.js b/app/serializers/class.js deleted file mode 100644 index 0c5aa5466..000000000 --- a/app/serializers/class.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/serializers/class'; diff --git a/app/serializers/component.js b/app/serializers/component.js deleted file mode 100644 index f8685ffe5..000000000 --- a/app/serializers/component.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/serializers/component'; diff --git a/app/serializers/module.js b/app/serializers/module.js deleted file mode 100644 index ea8f79a56..000000000 --- a/app/serializers/module.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/serializers/module'; diff --git a/app/serializers/project.js b/app/serializers/project.js deleted file mode 100644 index 31a04ede8..000000000 --- a/app/serializers/project.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-cli-addon-docs/serializers/project'; diff --git a/app/services/docs-store.js b/app/services/docs-store.js new file mode 100644 index 000000000..fda2ca9de --- /dev/null +++ b/app/services/docs-store.js @@ -0,0 +1 @@ +export { default } from 'ember-cli-addon-docs/services/docs-store'; diff --git a/blueprints/ember-cli-addon-docs/index.js b/blueprints/ember-cli-addon-docs/index.js index 715910974..b2f40b658 100644 --- a/blueprints/ember-cli-addon-docs/index.js +++ b/blueprints/ember-cli-addon-docs/index.js @@ -19,7 +19,6 @@ module.exports = { 'ember-cli-deploy-build', 'ember-cli-deploy-git', 'ember-cli-deploy-git-ci', - 'ember-data', ], }); }, diff --git a/package.json b/package.json index a439a85f4..1c3ded33f 100644 --- a/package.json +++ b/package.json @@ -102,10 +102,6 @@ "@babel/helper-split-export-declaration": "^7.24.7", "@babel/plugin-proposal-decorators": "^7.28.0", "@babel/preset-env": "^7.28.5", - "@ember-data/adapter": "^5.8.0", - "@ember-data/model": "^5.8.0", - "@ember-data/serializer": "^5.8.0", - "@ember-data/store": "^5.8.0", "@ember/optional-features": "^2.3.0", "@ember/test-helpers": "^3.3.1", "@ember/test-waiters": "^3.1.0", @@ -127,11 +123,8 @@ "ember-cli-deploy-git": "^1.3.4", "ember-cli-deploy-git-ci": "^1.0.1", "ember-cli-inject-live-reload": "^2.1.0", - "ember-cli-mirage": "^3.0.4", "ember-cli-sri": "^2.1.1", "ember-cli-terser": "^4.0.2", - "ember-data": "~5.8.0", - "ember-inflector": "^5.0.2", "ember-load-initializers": "^2.1.2", "ember-qunit": "^8.1.1", "ember-resolver": "^13.1.1", @@ -147,7 +140,7 @@ "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-qunit": "^8.2.5", "loader.js": "^4.7.0", - "miragejs": "^0.1.48", + "pretender": "^3.4.7", "mocha": "^11.7.5", "prettier": "^3.7.2", "qunit": "^2.24.2", @@ -159,38 +152,11 @@ "webpack": "^5.103.0" }, "peerDependencies": { - "@ember-data/adapter": ">= 3.0.0", - "@ember-data/model": ">= 3.0.0", - "@ember-data/serializer": ">= 3.0.0", - "@ember-data/store": ">= 3.0.0", "@ember/test-waiters": "^3.1.0 || ^4.0.0", - "ember-data": ">= 3.0.0", - "ember-inflector": ">= 4.0.0", "ember-source": ">= 4.0.0" }, - "peerDependenciesMeta": { - "@ember-data/adapter": { - "optional": true - }, - "@ember-data/model": { - "optional": true - }, - "@ember-data/serializer": { - "optional": true - }, - "@ember-data/store": { - "optional": true - }, - "ember-inflector": { - "optional": true - } - }, "pnpm": { "overrides": { - "@ember-data/adapter": "$@ember-data/adapter", - "@ember-data/model": "$@ember-data/model", - "@ember-data/serializer": "$@ember-data/serializer", - "@ember-data/store": "$@ember-data/store", "@ember/test-helpers": "$@ember/test-helpers", "@ember/test-waiters": "$@ember/test-waiters", "ember-cli-babel": "$ember-cli-babel", @@ -199,7 +165,6 @@ "ember-cli-dependency-checker": "$ember-cli-dependency-checker", "ember-cli-htmlbars": "$ember-cli-htmlbars", "ember-cli-inject-live-reload": "$ember-cli-inject-live-reload", - "ember-data": "$ember-data", "ember-qunit": "$ember-qunit", "ember-cli-sri": "$ember-cli-sri", "ember-cli-terser": "$ember-cli-terser", @@ -212,7 +177,10 @@ "eslint-plugin-n": "$eslint-plugin-n", "loader.js": "$loader.js", "webpack": "$webpack" - } + }, + "onlyBuiltDependencies": [ + "core-js" + ] }, "engines": { "node": ">= 22.21.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0a9a4027..ec788d86d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,10 +5,6 @@ settings: excludeLinksFromLockfile: false overrides: - '@ember-data/adapter': ^5.8.0 - '@ember-data/model': ^5.8.0 - '@ember-data/serializer': ^5.8.0 - '@ember-data/store': ^5.8.0 '@ember/test-helpers': ^3.3.1 '@ember/test-waiters': ^3.1.0 ember-cli-babel: ^8.2.0 @@ -17,7 +13,6 @@ overrides: ember-cli-dependency-checker: ^3.3.3 ember-cli-htmlbars: ^6.3.0 ember-cli-inject-live-reload: ^2.1.0 - ember-data: ~5.8.0 ember-qunit: ^8.1.1 ember-cli-sri: ^2.1.1 ember-cli-terser: ^4.0.2 @@ -246,18 +241,6 @@ importers: '@babel/preset-env': specifier: ^7.28.5 version: 7.28.5(@babel/core@7.28.5) - '@ember-data/adapter': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5) - '@ember-data/model': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5) - '@ember-data/serializer': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5) - '@ember-data/store': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5)(@ember-data/tracking@5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)))(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) '@ember/optional-features': specifier: ^2.3.0 version: 2.3.0 @@ -321,21 +304,12 @@ importers: ember-cli-inject-live-reload: specifier: ^2.1.0 version: 2.1.0 - ember-cli-mirage: - specifier: ^3.0.4 - version: 3.0.4(@ember-data/model@5.8.0(@babel/core@7.28.5))(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(ember-data@5.8.0(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))(ember-inflector@5.0.2(@babel/core@7.28.5))(qunit@2.24.2))(ember-qunit@8.1.1(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(qunit@2.24.2))(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(miragejs@0.1.48)(webpack@5.103.0) ember-cli-sri: specifier: ^2.1.1 version: 2.1.1 ember-cli-terser: specifier: ^4.0.2 version: 4.0.2 - ember-data: - specifier: ~5.8.0 - version: 5.8.0(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))(ember-inflector@5.0.2(@babel/core@7.28.5))(qunit@2.24.2) - ember-inflector: - specifier: ^5.0.2 - version: 5.0.2(@babel/core@7.28.5) ember-load-initializers: specifier: ^2.1.2 version: 2.1.2(@babel/core@7.28.5) @@ -381,12 +355,12 @@ importers: loader.js: specifier: ^4.7.0 version: 4.7.0 - miragejs: - specifier: ^0.1.48 - version: 0.1.48 mocha: specifier: ^11.7.5 version: 11.7.5 + pretender: + specifier: ^3.4.7 + version: 3.4.7 prettier: specifier: ^3.7.2 version: 3.7.2 @@ -421,18 +395,6 @@ importers: specifier: ^8.2.0 version: 8.2.0(@babel/core@7.28.5) devDependencies: - '@ember-data/adapter': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5) - '@ember-data/model': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5) - '@ember-data/serializer': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5) - '@ember-data/store': - specifier: ^5.8.0 - version: 5.8.0(@babel/core@7.28.5)(@ember-data/tracking@5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)))(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) '@ember/optional-features': specifier: ^2.2.0 version: 2.2.0 @@ -469,9 +431,6 @@ importers: ember-cli-terser: specifier: ^4.0.2 version: 4.0.2 - ember-data: - specifier: ~5.8.0 - version: 5.8.0(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))(ember-inflector@5.0.2(@babel/core@7.28.5))(qunit@2.22.0) ember-load-initializers: specifier: ^2.1.2 version: 2.1.2(@babel/core@7.28.5) @@ -1178,58 +1137,9 @@ packages: peerDependencies: postcss-selector-parser: ^6.0.13 - '@ember-data/adapter@5.8.0': - resolution: {integrity: sha512-loXvPVVQOprobBhr60chwB1dqJ4LpY5T1yRYoygibNlydoDp8kJE4ppR0hN8W7onkUVDaTfYKX9UX/3nFjmMQA==} - - '@ember-data/debug@5.8.0': - resolution: {integrity: sha512-nNKy0wvD8Bzqk7GIij9qIbsVGiCRwVWMV7UNTr3BcZqiSSKyu6D+jeolcWYvKlz1XojDCLe5/uRUk4sE2j+9jA==} - - '@ember-data/graph@5.8.0': - resolution: {integrity: sha512-p5A0AHtTbNvCLoKEIGfU4ex4jMIRhO0vMrsEy0wmJHLW6cosE4FQMEPUka/9v2HwJ+1N81T/cPTqS5h7Y+NFRw==} - - '@ember-data/json-api@5.8.0': - resolution: {integrity: sha512-E1OY1UAELXgl+Li2eSzceUPteWz1CMls2GV65C6EI7Bn0pJBjPlj06qbjcYnGiOzvjZKTfYqmdKTvNsouW93DQ==} - - '@ember-data/legacy-compat@5.8.0': - resolution: {integrity: sha512-f4bDqpMZrCVMXyj+vT5S9hyBLzbrbvEAs+1B5iuDwOiXssYmBUnu5pnlb2hhvCDaFCuZ0XevL8tXLG/QuFM35g==} - - '@ember-data/model@5.8.0': - resolution: {integrity: sha512-dfdXJkD/q4HowkZaRdv0cwVu+cP9/4wK0fglXOtNjJmxKXJQ3be5e9ged9SYFKNKALSbNIU6FuFhWm1EA0N3LA==} - - '@ember-data/request-utils@5.8.0': - resolution: {integrity: sha512-xTNh3OMEAZsf5AjC6HZ12onHXu08VszV70xINYRbP5V5nQLhyXkUnPBn/GfTcjFoOqnSGdNGOmbHQL2HbiTqFg==} - peerDependencies: - ember-inflector: ^4.0.2 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - ember-inflector: - optional: true - - '@ember-data/request@5.8.0': - resolution: {integrity: sha512-ys17D2XZAUMihwLR7rQWrgMgZ0MDvrtz8gcGeaLVurC/MEhE9O5iPchUMD6T9okoKOdgRgeQYh88Sn0cl0jVtQ==} - '@ember-data/rfc395-data@0.0.4': resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==} - '@ember-data/serializer@5.8.0': - resolution: {integrity: sha512-HsfX8pWU9Q6NjKpCvttWsOLnzFISAIP/CJ0BjgDixRG9lWCju68gPJvdO284yI6Nf78NIZoJ6S7GK+iyLBYPlQ==} - - '@ember-data/store@5.8.0': - resolution: {integrity: sha512-vlycjD6PGzqmtdUbgUhQF2e3v+fniH+69uE2UAtpI3RHu9Al6TwoNAmWzK7U/7VC6E8bRN+EXNyzuX3ho+mybw==} - peerDependencies: - '@ember-data/tracking': 5.8.0 - '@ember/test-waiters': ^3.1.0 - peerDependenciesMeta: - '@ember-data/tracking': - optional: true - '@ember/test-waiters': - optional: true - - '@ember-data/tracking@5.8.0': - resolution: {integrity: sha512-tDLLMFD+oH9N83S4A4hLxWjG0ohomKnHDU4s9iYUhVCX0n3S8UnYuxmiBjVrjLKhWD83VJBt7o2VQ4vC0pY9gQ==} - deprecated: Use @warp-drive/ember - peerDependencies: - '@ember/test-waiters': ^3.1.0 - '@ember/edition-utils@1.2.0': resolution: {integrity: sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog==} @@ -1672,9 +1582,6 @@ packages: resolution: {integrity: sha512-F5z53uvRIF4dYfFfJP3a2Cqg+4P1dgJchJsFnsZE0eZp0LK8X7g2J0CsJHRgns+skpXOlM7n5vFGwkWCWj8qJg==} engines: {node: 12.* || >= 14} - '@miragejs/pretender-node-polyfill@0.1.2': - resolution: {integrity: sha512-M/BexG/p05C5lFfMunxo/QcgIJnMT2vDVCd00wNqK2ImZONIlEETZwWJu1QtLxtmYlSHlCFl3JNzp0tLe7OJ5g==} - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -2026,40 +1933,6 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@warp-drive/build-config@5.8.0': - resolution: {integrity: sha512-p0Cgf/9qO9Ocv33RbsHhKTyQpiw+8FKHFOSvruAUrjtZCXzniqfnzLDv12XtufV7HIKe2aN5HCip6r5Q+xk6fg==} - - '@warp-drive/core-types@5.8.0': - resolution: {integrity: sha512-jJRDRcJBiIvI27HRq/E9PVsXEAay2iWU27AzQ5zsU6mugo0cCgIC7F0aPd1Wfjq81j6ooL/tIg05cJ9TZJ32kA==} - - '@warp-drive/core@5.8.0': - resolution: {integrity: sha512-DkY8AjaeiMtijz9Ho1W3wKlaWGbhK7gOaOCXdRzCqNyKiwM+nOn2dkS/8uib5lpuv4m7QYgL2oF4uAWlINUFDA==} - - '@warp-drive/ember@5.8.0': - resolution: {integrity: sha512-+V1KUZpsezyc2oMB68DGOYNMsvZEnWJ1cjnTO0OhqtId4viLSW9vPKzSbJ8MLz3TcyCepj4Y6b17CJj6Ksy9EA==} - peerDependencies: - '@ember/test-waiters': ^3.1.0 - ember-provide-consume-context: ^0.8.0 - peerDependenciesMeta: - ember-provide-consume-context: - optional: true - - '@warp-drive/json-api@5.8.0': - resolution: {integrity: sha512-aJKQx2T51d/neaz8clGe/uC7nHm+8A+ho7OMou2R1yYJuIXNvYYXvTPErA/kABg0RDfAoafqdphe+3Tviut1cA==} - peerDependencies: - '@warp-drive/core': 5.8.0 - - '@warp-drive/legacy@5.8.0': - resolution: {integrity: sha512-fWCZUW6oZ3AL3zaeI3fC3YTfHe+lkgIinSr4ip79nEPE8RKfuSbB8OLKv6AnBy6fJreI+Ts6+wgxkqMJxIIY/g==} - peerDependencies: - '@warp-drive/core': 5.8.0 - '@warp-drive/utilities': 5.8.0 - - '@warp-drive/utilities@5.8.0': - resolution: {integrity: sha512-ctVFGylQJ0gZjssmFxPvoOcJ2kM/F5FqsWnvIqn5l30gVxISonm7xU3UoQ4bXpA5VXzaQ25PFFwGobdZOJELQA==} - peerDependencies: - '@warp-drive/core': 5.8.0 - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2464,12 +2337,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-plugin-debug-macros@2.0.0: - resolution: {integrity: sha512-7ZaLtXIY01PAPhLyjV3OACePnl+X5iQO7F4O/sOJHTfMf/36zyu14uVUxNiZmOUntYBsyT/VVplf1LrH6NcwvQ==} - engines: {node: '>=16'} - peerDependencies: - '@babel/core': ^7.0.0 - babel-plugin-ember-data-packages-polyfill@0.1.2: resolution: {integrity: sha512-kTHnOwoOXfPXi00Z8yAgyD64+jdSXk3pknnS7NlqnCKAU6YDkXZ4Y7irl66kaZjZn0FBBt0P4YOZFZk85jYOww==} engines: {node: 6.* || 8.* || 10.* || >= 12.*} @@ -3047,10 +2914,6 @@ packages: resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} engines: {node: '>= 4.0'} - code-error-fragment@0.0.230: - resolution: {integrity: sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==} - engines: {node: '>= 4'} - coffeescript@1.12.7: resolution: {integrity: sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==} engines: {node: '>=0.8.0'} @@ -3891,26 +3754,6 @@ packages: resolution: {integrity: sha512-QkLGcYv1WRK35g4MWu/uIeJ5Suk2eJXKtZ+8s+qE7C9INmpCPyPxzaqZABquYzcWNzIdw6kYwz3NWAFdKYFxwg==} engines: {node: ^4.5 || 6.* || >= 7.*} - ember-cli-mirage@3.0.4: - resolution: {integrity: sha512-JpfZJIrvUAcwOVQ44aAzlYSbGiO4/nqnVAbzAKU4kztqgYvYGBa27FX5WxfpIGZMBdnt6OKh78rsimChWo6f/Q==} - engines: {node: 16.* || >= 18} - peerDependencies: - '@ember-data/model': ^5.8.0 - '@ember/test-helpers': ^3.3.1 - ember-data: ~5.8.0 - ember-qunit: ^8.1.1 - ember-source: ~5.11.1 - miragejs: ^0.1.43 - peerDependenciesMeta: - '@ember-data/model': - optional: true - '@ember/test-helpers': - optional: true - ember-data: - optional: true - ember-qunit: - optional: true - ember-cli-normalize-entity-name@1.0.0: resolution: {integrity: sha512-rF4P1rW2P1gVX1ynZYPmuIf7TnAFDiJmIUFI1Xz16VYykUAyiOCme0Y22LeZq8rTzwBMiwBwoE3RO4GYWehXZA==} @@ -3946,9 +3789,6 @@ packages: resolution: {integrity: sha512-Ej77K+YhCZImotoi/CU2cfsoZaswoPlGaM5TB3LvjvPDlVPRhxUHO2RsaUVC5lsGeRLRiHCOxVtoJ6GyqexzFA==} engines: {node: 10.* || 12.* || >= 14} - ember-cli-test-info@1.0.0: - resolution: {integrity: sha512-dEVTIpmUfCzweC97NGf6p7L6XKBwV2GmSM4elmzKvkttEp5P7AvGA9uGyN4GqFq+RwhW+2b0I2qlX00w+skm+A==} - ember-cli-test-loader@3.1.0: resolution: {integrity: sha512-0aocZV9SIoOHiU3hrH3IuLR6busWhTX6UVXgd490hmJkIymmOXNH2+jJoC7Ebkeo3PiOfAdjqhb765QDlHSJOw==} engines: {node: 10.* || >= 12} @@ -4006,18 +3846,6 @@ packages: '@glint/template': optional: true - ember-data@5.8.0: - resolution: {integrity: sha512-VRb3fh2x/9G9kXONQ6YHTYjAFGO7q5R/2M1ZAApLXecuyEBm0oT5SsrWfWlDyZCyGsd3jNQV17Vd0gklcB9pRg==} - peerDependencies: - '@ember/test-helpers': ^3.3.1 - '@ember/test-waiters': ^3.1.0 - qunit: ^2.18.0 - peerDependenciesMeta: - '@ember/test-helpers': - optional: true - qunit: - optional: true - ember-functions-as-helper-polyfill@2.1.3: resolution: {integrity: sha512-Hte8jfOmSNzrz/vOchf68CGaBWXN2/5qKgFaylqr9omW2i4Wt9JmaBWRkeR0AJ53N57q3DX2TOb166Taq6QjiA==} engines: {node: '>= 14.0.0'} @@ -4028,9 +3856,6 @@ packages: resolution: {integrity: sha512-uNmv1cPG/4qsac8oIf5txJ2FZ8p88LEpG4P3dNcjsJS98Y8hd0GPMFwVqpnzI78Lz7VYRGQWY4jnE4qm5R3j4g==} engines: {node: 12.* || 14.* || >= 16} - ember-inflector@5.0.2: - resolution: {integrity: sha512-aoPaT7B3pbUHSi4ulf02iRaMMvPteuDBO8jA1SLLOl/JwnO2YI5F/MhNPaolxp8DWwAd/P6MNN+wD5bLwmiUIA==} - ember-keyboard@9.0.4: resolution: {integrity: sha512-lReOVCwvPt8aTLynuyh1rVoZx9LITqcwdCiUltGMkoJNyuE8snuGMIEpEj3RtiPLWm0UCnTfod8bjEqOoEEFtA==} peerDependencies: @@ -4742,10 +4567,6 @@ packages: resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==} engines: {node: '>=10'} - fuse.js@7.1.0: - resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} - engines: {node: '>=10'} - gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -4937,9 +4758,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -5194,17 +5012,10 @@ packages: infer-owner@1.0.4: resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - inflected@2.1.0: - resolution: {integrity: sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==} - inflection@2.0.1: resolution: {integrity: sha512-wzkZHqpb4eGrOKBl34xy3umnYHx8Si5R1U4fwmdxLo5gdH6mEK8gclckTj/qWqy4Je0bsDYe/qazZYuO7xe3XQ==} engines: {node: '>=14.0.0'} - inflection@3.0.2: - resolution: {integrity: sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==} - engines: {node: '>=18.0.0'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -5635,10 +5446,6 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json-to-ast@2.1.0: - resolution: {integrity: sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==} - engines: {node: '>= 4'} - json5@0.5.1: resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==} hasBin: true @@ -6204,10 +6011,6 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - miragejs@0.1.48: - resolution: {integrity: sha512-MGZAq0Q3OuRYgZKvlB69z4gLN4G3PvgC4A2zhkCXCXrLD5wm2cCnwNB59xOBVA+srZ0zEes6u+VylcPIkB4SqA==} - engines: {node: 6.* || 8.* || >= 10.*} - mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -9420,138 +9223,8 @@ snapshots: dependencies: postcss-selector-parser: 6.1.2 - '@ember-data/adapter@5.8.0(@babel/core@7.28.5)': - dependencies: - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/legacy': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))(@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/debug@5.8.0(@babel/core@7.28.5)': - dependencies: - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/graph@5.8.0(@babel/core@7.28.5)': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/json-api@5.8.0(@babel/core@7.28.5)': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/json-api': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/legacy-compat@5.8.0(@babel/core@7.28.5)': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/legacy': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))(@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/model@5.8.0(@babel/core@7.28.5)': - dependencies: - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/legacy': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))(@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - inflection: 3.0.2 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/request-utils@5.8.0(@babel/core@7.28.5)(ember-inflector@5.0.2(@babel/core@7.28.5))': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - optionalDependencies: - ember-inflector: 5.0.2(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/request@5.8.0(@babel/core@7.28.5)': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/rfc395-data@0.0.4': {} - '@ember-data/serializer@5.8.0(@babel/core@7.28.5)': - dependencies: - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/legacy': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))(@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/store@5.8.0(@babel/core@7.28.5)(@ember-data/tracking@5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - optionalDependencies: - '@ember-data/tracking': 5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) - '@ember/test-waiters': 3.1.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@ember-data/tracking@5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5))': - dependencies: - '@ember/test-waiters': 3.1.0(@babel/core@7.28.5) - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember/edition-utils@1.2.0': {} '@ember/optional-features@2.2.0': @@ -10197,8 +9870,6 @@ snapshots: tslib: 2.8.1 upath: 2.0.1 - '@miragejs/pretender-node-polyfill@0.1.2': {} - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -10563,76 +10234,6 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@warp-drive/build-config@5.8.0(@babel/core@7.28.5)': - dependencies: - '@embroider/addon-shim': 1.10.2 - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - babel-import-util: 2.1.1 - babel-plugin-debug-macros: 2.0.0(@babel/core@7.28.5) - semver: 7.7.3 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@warp-drive/core-types@5.8.0(@babel/core@7.28.5)': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@warp-drive/core@5.8.0(@babel/core@7.28.5)': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/build-config': 5.8.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@warp-drive/ember@5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5))': - dependencies: - '@ember/test-waiters': 3.1.0(@babel/core@7.28.5) - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@warp-drive/json-api@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - fuse.js: 7.1.0 - json-to-ast: 2.1.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@warp-drive/legacy@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))(@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)))': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - '@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))': - dependencies: - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -11091,12 +10692,6 @@ snapshots: '@babel/core': 7.28.5 semver: 5.7.2 - babel-plugin-debug-macros@2.0.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - babel-import-util: 2.1.1 - semver: 7.7.3 - babel-plugin-ember-data-packages-polyfill@0.1.2: dependencies: '@ember-data/rfc395-data': 0.0.4 @@ -12112,8 +11707,6 @@ snapshots: chalk: 2.4.2 q: 1.5.1 - code-error-fragment@0.0.230: {} - coffeescript@1.12.7: optional: true @@ -12956,29 +12549,6 @@ snapshots: ember-cli-lodash-subset@2.0.1: {} - ember-cli-mirage@3.0.4(@ember-data/model@5.8.0(@babel/core@7.28.5))(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(ember-data@5.8.0(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))(ember-inflector@5.0.2(@babel/core@7.28.5))(qunit@2.24.2))(ember-qunit@8.1.1(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(qunit@2.24.2))(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(miragejs@0.1.48)(webpack@5.103.0): - dependencies: - '@babel/core': 7.28.5 - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - broccoli-file-creator: 2.1.1 - broccoli-funnel: 3.0.8 - broccoli-merge-trees: 4.2.0 - ember-auto-import: 2.12.0(webpack@5.103.0) - ember-cli-babel: 8.2.0(@babel/core@7.28.5) - ember-get-config: 2.1.1(@babel/core@7.28.5) - ember-inflector: 5.0.2(@babel/core@7.28.5) - ember-source: 5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0) - miragejs: 0.1.48 - optionalDependencies: - '@ember-data/model': 5.8.0(@babel/core@7.28.5) - '@ember/test-helpers': 3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0) - ember-data: 5.8.0(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))(ember-inflector@5.0.2(@babel/core@7.28.5))(qunit@2.24.2) - ember-qunit: 8.1.1(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(qunit@2.24.2) - transitivePeerDependencies: - - '@glint/template' - - supports-color - - webpack - ember-cli-normalize-entity-name@1.0.0: dependencies: silent-error: 1.1.1 @@ -13029,10 +12599,6 @@ snapshots: transitivePeerDependencies: - supports-color - ember-cli-test-info@1.0.0: - dependencies: - ember-cli-string-utils: 1.1.0 - ember-cli-test-loader@3.1.0(@babel/core@7.28.5): dependencies: ember-cli-babel: 8.2.0(@babel/core@7.28.5) @@ -13303,70 +12869,6 @@ snapshots: - '@babel/core' - supports-color - ember-data@5.8.0(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))(ember-inflector@5.0.2(@babel/core@7.28.5))(qunit@2.22.0): - dependencies: - '@ember-data/adapter': 5.8.0(@babel/core@7.28.5) - '@ember-data/debug': 5.8.0(@babel/core@7.28.5) - '@ember-data/graph': 5.8.0(@babel/core@7.28.5) - '@ember-data/json-api': 5.8.0(@babel/core@7.28.5) - '@ember-data/legacy-compat': 5.8.0(@babel/core@7.28.5) - '@ember-data/model': 5.8.0(@babel/core@7.28.5) - '@ember-data/request': 5.8.0(@babel/core@7.28.5) - '@ember-data/request-utils': 5.8.0(@babel/core@7.28.5)(ember-inflector@5.0.2(@babel/core@7.28.5)) - '@ember-data/serializer': 5.8.0(@babel/core@7.28.5) - '@ember-data/store': 5.8.0(@babel/core@7.28.5)(@ember-data/tracking@5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)))(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) - '@ember-data/tracking': 5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) - '@ember/edition-utils': 1.2.0 - '@ember/test-waiters': 3.1.0(@babel/core@7.28.5) - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/core-types': 5.8.0(@babel/core@7.28.5) - '@warp-drive/ember': 5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) - '@warp-drive/json-api': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - '@warp-drive/legacy': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))(@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - optionalDependencies: - '@ember/test-helpers': 3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0) - qunit: 2.22.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - ember-inflector - - ember-provide-consume-context - - supports-color - - ember-data@5.8.0(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0))(@ember/test-waiters@3.1.0(@babel/core@7.28.5))(ember-inflector@5.0.2(@babel/core@7.28.5))(qunit@2.24.2): - dependencies: - '@ember-data/adapter': 5.8.0(@babel/core@7.28.5) - '@ember-data/debug': 5.8.0(@babel/core@7.28.5) - '@ember-data/graph': 5.8.0(@babel/core@7.28.5) - '@ember-data/json-api': 5.8.0(@babel/core@7.28.5) - '@ember-data/legacy-compat': 5.8.0(@babel/core@7.28.5) - '@ember-data/model': 5.8.0(@babel/core@7.28.5) - '@ember-data/request': 5.8.0(@babel/core@7.28.5) - '@ember-data/request-utils': 5.8.0(@babel/core@7.28.5)(ember-inflector@5.0.2(@babel/core@7.28.5)) - '@ember-data/serializer': 5.8.0(@babel/core@7.28.5) - '@ember-data/store': 5.8.0(@babel/core@7.28.5)(@ember-data/tracking@5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)))(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) - '@ember-data/tracking': 5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) - '@ember/edition-utils': 1.2.0 - '@ember/test-waiters': 3.1.0(@babel/core@7.28.5) - '@embroider/macros': 1.19.5(@babel/core@7.28.5) - '@warp-drive/core': 5.8.0(@babel/core@7.28.5) - '@warp-drive/core-types': 5.8.0(@babel/core@7.28.5) - '@warp-drive/ember': 5.8.0(@babel/core@7.28.5)(@ember/test-waiters@3.1.0(@babel/core@7.28.5)) - '@warp-drive/json-api': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - '@warp-drive/legacy': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))(@warp-drive/utilities@5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5))) - '@warp-drive/utilities': 5.8.0(@babel/core@7.28.5)(@warp-drive/core@5.8.0(@babel/core@7.28.5)) - optionalDependencies: - '@ember/test-helpers': 3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0) - qunit: 2.24.2 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - ember-inflector - - ember-provide-consume-context - - supports-color - ember-functions-as-helper-polyfill@2.1.3(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0)): dependencies: ember-cli-babel: 8.2.0(@babel/core@7.28.5) @@ -13386,14 +12888,6 @@ snapshots: - '@glint/template' - supports-color - ember-inflector@5.0.2(@babel/core@7.28.5): - dependencies: - '@embroider/addon-shim': 1.10.2 - decorator-transforms: 2.3.0(@babel/core@7.28.5) - transitivePeerDependencies: - - '@babel/core' - - supports-color - ember-keyboard@9.0.4(@babel/core@7.28.5)(@ember/test-helpers@3.3.1(@babel/core@7.28.5)(ember-source@5.11.1(@glimmer/component@1.1.2(@babel/core@7.28.5))(rsvp@4.8.5)(webpack@5.103.0))(webpack@5.103.0)): dependencies: '@embroider/addon-shim': 1.10.2 @@ -14553,8 +14047,6 @@ snapshots: fuse.js@6.6.2: {} - fuse.js@7.1.0: {} - gauge@4.0.4: dependencies: aproba: 2.1.0 @@ -14801,8 +14293,6 @@ snapshots: graceful-fs@4.2.11: {} - grapheme-splitter@1.0.4: {} - graphemer@1.4.0: {} growly@1.3.0: {} @@ -15073,12 +14563,8 @@ snapshots: infer-owner@1.0.4: {} - inflected@2.1.0: {} - inflection@2.0.1: {} - inflection@3.0.2: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -15518,11 +15004,6 @@ snapshots: json-stringify-safe@5.0.1: {} - json-to-ast@2.1.0: - dependencies: - code-error-fragment: 0.0.230 - grapheme-splitter: 1.0.4 - json5@0.5.1: optional: true @@ -16195,13 +15676,6 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - miragejs@0.1.48: - dependencies: - '@miragejs/pretender-node-polyfill': 0.1.2 - inflected: 2.1.0 - lodash: 4.17.21 - pretender: 3.4.7 - mixin-deep@1.3.2: dependencies: for-in: 1.0.2 diff --git a/test-apps/new-addon/package.json b/test-apps/new-addon/package.json index 6ce31d23c..3bad314bb 100644 --- a/test-apps/new-addon/package.json +++ b/test-apps/new-addon/package.json @@ -24,10 +24,6 @@ "ember-auto-import": "*" }, "devDependencies": { - "@ember-data/adapter": "*", - "@ember-data/model": "*", - "@ember-data/serializer": "*", - "@ember-data/store": "*", "@ember/optional-features": "^2.2.0", "@ember/test-helpers": "*", "@ember/test-waiters": "*", @@ -38,7 +34,6 @@ "ember-cli-dependency-checker": "*", "ember-cli-htmlbars": "*", "ember-cli-inject-live-reload": "*", - "ember-data": "*", "ember-qunit": "*", "ember-cli-sri": "*", "ember-cli-terser": "*", diff --git a/tests/acceptance/docs-route-test.js b/tests/acceptance/docs-route-test.js index cfa93b6a0..ea4db8999 100644 --- a/tests/acceptance/docs-route-test.js +++ b/tests/acceptance/docs-route-test.js @@ -1,11 +1,11 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMockVersions } from '../helpers/mock-versions'; import { visit, click, currentURL } from '@ember/test-helpers'; module('Acceptance | Docs route test', function (hooks) { setupApplicationTest(hooks); - setupMirage(hooks); + setupMockVersions(hooks); test('the docs route renders', async function (assert) { await visit('/docs'); diff --git a/tests/acceptance/sandbox/api/components-test.js b/tests/acceptance/sandbox/api/components-test.js index f88fe74fe..9a813cc2f 100644 --- a/tests/acceptance/sandbox/api/components-test.js +++ b/tests/acceptance/sandbox/api/components-test.js @@ -1,13 +1,13 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMockVersions } from '../../../helpers/mock-versions'; import { currentURL, visit } from '@ember/test-helpers'; import modulePage from '../../../pages/api/module'; module('Acceptance | Sandbox | API | components', function (hooks) { setupApplicationTest(hooks); - setupMirage(hooks); + setupMockVersions(hooks); test('nested components work', async function (assert) { await visit('/sandbox'); diff --git a/tests/acceptance/sandbox/api/guides-test.js b/tests/acceptance/sandbox/api/guides-test.js index a0f56531f..0908d509b 100644 --- a/tests/acceptance/sandbox/api/guides-test.js +++ b/tests/acceptance/sandbox/api/guides-test.js @@ -1,13 +1,13 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMockVersions } from '../../../helpers/mock-versions'; import { currentURL, visit } from '@ember/test-helpers'; import modulePage from '../../../pages/api/module'; module('Acceptance | Sandbox | API | Guides', function (hooks) { setupApplicationTest(hooks); - setupMirage(hooks); + setupMockVersions(hooks); test('page index works', async function (assert) { await visit('/sandbox'); diff --git a/tests/acceptance/sandbox/api/helpers-test.js b/tests/acceptance/sandbox/api/helpers-test.js index b8b9e238e..bc3ab0f66 100644 --- a/tests/acceptance/sandbox/api/helpers-test.js +++ b/tests/acceptance/sandbox/api/helpers-test.js @@ -1,6 +1,6 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMockVersions } from '../../../helpers/mock-versions'; import { currentURL, visit } from '@ember/test-helpers'; import modulePage from '../../../pages/api/module'; @@ -8,7 +8,7 @@ import classPage from '../../../pages/api/class'; module('Acceptance | Sandbox | API | helpers', function (hooks) { setupApplicationTest(hooks); - setupMirage(hooks); + setupMockVersions(hooks); module('standard helpers', function () { for (let documenter of ['yuidoc']) { diff --git a/tests/acceptance/search-test.js b/tests/acceptance/search-test.js index e6a4fd58c..803594616 100644 --- a/tests/acceptance/search-test.js +++ b/tests/acceptance/search-test.js @@ -1,11 +1,11 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMockVersions } from '../helpers/mock-versions'; import { click, currentURL, fillIn, visit, waitFor } from '@ember/test-helpers'; module('Acceptance | Search', function (hooks) { setupApplicationTest(hooks); - setupMirage(hooks); + setupMockVersions(hooks); test('search works for guides pages', async function (assert) { await visit('/'); diff --git a/tests/acceptance/version-selector-test.js b/tests/acceptance/version-selector-test.js index f71a38c90..800dc0369 100644 --- a/tests/acceptance/version-selector-test.js +++ b/tests/acceptance/version-selector-test.js @@ -1,13 +1,16 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { + setupMockVersions, + mockVersionsEndpoint, +} from '../helpers/mock-versions'; import { visit, click } from '@ember/test-helpers'; let config; module('Acceptance | Version selector test', function (hooks) { setupApplicationTest(hooks); - setupMirage(hooks); + setupMockVersions(hooks); hooks.beforeEach(async function () { config = this.owner.resolveRegistration('config:environment'); @@ -42,7 +45,7 @@ module('Acceptance | Version selector test', function (hooks) { }); test(`the version selector renders correctly`, async function (assert) { - server.get('/versions.json', { + mockVersionsEndpoint(this.server, { '-latest': { sha: '53b73465d31925f26fd1f77881aefcaccce2915a', tag: null, @@ -106,7 +109,7 @@ module('Acceptance | Version selector test', function (hooks) { }); test(`the version selector renders a tag for latest if present`, async function (assert) { - server.get('/versions.json', { + mockVersionsEndpoint(this.server, { '-latest': { sha: '53b73465d31925f26fd1f77881aefcaccce2915a', tag: 'v0.1.0', @@ -160,7 +163,7 @@ module('Acceptance | Version selector test', function (hooks) { }); test(`the version selector honors the primary branch`, async function (assert) { - server.get('/versions.json', { + mockVersionsEndpoint(this.server, { '-latest': { sha: '53b73465d31925f26fd1f77881aefcaccce2915a', tag: null, diff --git a/tests/dummy/app/pods/sandbox/route.js b/tests/dummy/app/pods/sandbox/route.js index 1beb22a92..342656b0f 100644 --- a/tests/dummy/app/pods/sandbox/route.js +++ b/tests/dummy/app/pods/sandbox/route.js @@ -2,9 +2,9 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; export default class SandboxRoute extends Route { - @service store; + @service docsStore; model() { - return this.store.findRecord('project', 'sandbox'); + return this.docsStore.findRecord('project', 'sandbox'); } } diff --git a/tests/dummy/app/templates/docs/quickstart.md b/tests/dummy/app/templates/docs/quickstart.md index 2cc07e752..6d9593894 100644 --- a/tests/dummy/app/templates/docs/quickstart.md +++ b/tests/dummy/app/templates/docs/quickstart.md @@ -6,12 +6,6 @@ ember install ember-cli-addon-docs ``` -[Ember Data](https://github.com/emberjs/data) is a required peer dependency, so if you're not already using it in your addon, you'll need to install it. - -```sh -ember install ember-data -``` - ## 2. Install ember-cli-addon-docs-yuidoc API docs are autogenerated from comments in your source code, and require an additional plugin to be installed. diff --git a/tests/dummy/config/ember-try.js b/tests/dummy/config/ember-try.js index fefa4e740..03dfa652c 100644 --- a/tests/dummy/config/ember-try.js +++ b/tests/dummy/config/ember-try.js @@ -11,13 +11,8 @@ module.exports = async function () { name: 'ember-lts-4.4', npm: { devDependencies: { - '@ember-data/adapter': '~4.11.3', - '@ember-data/model': '~4.11.3', - '@ember-data/serializer': '~4.11.3', - '@ember-data/store': '~4.11.3', '@ember/test-helpers': '^2.5.0', 'ember-cli-babel': '^7.26.11', - 'ember-data': '~4.11.3', 'ember-source': '~4.4.0', }, }, @@ -26,14 +21,9 @@ module.exports = async function () { name: 'ember-lts-4.8', npm: { devDependencies: { - '@ember-data/adapter': '~4.11.3', - '@ember-data/model': '~4.11.3', - '@ember-data/serializer': '~4.11.3', - '@ember-data/store': '~4.11.3', '@ember/test-helpers': '^2.5.0', '@ember/test-waiters': '^3.1.0', 'ember-cli-babel': '^7.26.11', - 'ember-data': '~4.11.3', 'ember-source': '~4.8.0', }, }, @@ -42,14 +32,9 @@ module.exports = async function () { name: 'ember-lts-4.12', npm: { devDependencies: { - '@ember-data/adapter': '~4.11.3', - '@ember-data/model': '~4.11.3', - '@ember-data/serializer': '~4.11.3', - '@ember-data/store': '~4.11.3', '@ember/test-helpers': '^2.5.0', '@ember/test-waiters': '^3.1.0', 'ember-cli-babel': '^7.26.11', - 'ember-data': '~4.11.3', 'ember-source': '~4.12.0', }, }, diff --git a/tests/dummy/mirage/config.js b/tests/dummy/mirage/config.js deleted file mode 100644 index 0c324ffcc..000000000 --- a/tests/dummy/mirage/config.js +++ /dev/null @@ -1,31 +0,0 @@ -import config from '../config/environment'; -const projectTag = config['ember-cli-addon-docs']?.projectTag; -import { createServer } from 'miragejs'; - -export default function (config) { - let finalConfig = { - ...config, - routes() { - this.get('/versions.json', () => { - return { - '-latest': { - sha: '53b73465d31925f26fd1f77881aefcaccce2915a', - tag: projectTag, - path: '', - name: '-latest', - }, - main: { - sha: '12345', - tag: null, - path: 'main', - name: 'main', - }, - }; - }); - - this.passthrough(); - }, - }; - - return createServer(finalConfig); -} diff --git a/tests/dummy/mirage/scenarios/default.js b/tests/dummy/mirage/scenarios/default.js deleted file mode 100644 index d388296b5..000000000 --- a/tests/dummy/mirage/scenarios/default.js +++ /dev/null @@ -1,7 +0,0 @@ -export default function (/* server */) { - /* - Seed your development database using your factories. - This data will not be loaded in your tests. - */ - // server.createList('post', 10); -} diff --git a/tests/dummy/mirage/serializers/application.js b/tests/dummy/mirage/serializers/application.js deleted file mode 100644 index fbb4ad235..000000000 --- a/tests/dummy/mirage/serializers/application.js +++ /dev/null @@ -1 +0,0 @@ -export { JSONAPISerializer as default } from 'miragejs'; diff --git a/tests/helpers/mock-versions.js b/tests/helpers/mock-versions.js new file mode 100644 index 000000000..9ac79eb92 --- /dev/null +++ b/tests/helpers/mock-versions.js @@ -0,0 +1,48 @@ +import Pretender from 'pretender'; +import config from 'dummy/config/environment'; + +const projectTag = config['ember-cli-addon-docs']?.projectTag; + +const DEFAULT_VERSIONS = { + '-latest': { + sha: '53b73465d31925f26fd1f77881aefcaccce2915a', + tag: projectTag, + path: '', + name: '-latest', + }, + main: { + sha: '12345', + tag: null, + path: 'main', + name: 'main', + }, +}; + +export function setupMockVersions(hooks) { + hooks.beforeEach(function () { + this.server = new Pretender(function () { + this.get('/versions.json', () => [ + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify(DEFAULT_VERSIONS), + ]); + }); + + // Let unhandled requests pass through + this.server.unhandledRequest = function (verb, path, request) { + request.passthrough(); + }; + }); + + hooks.afterEach(function () { + this.server.shutdown(); + }); +} + +export function mockVersionsEndpoint(server, versions) { + server.get('/versions.json', () => [ + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify(versions), + ]); +}