diff --git a/files/app/services/store.ts b/files/app/services/store.ts new file mode 100644 index 0000000..50a4798 --- /dev/null +++ b/files/app/services/store.ts @@ -0,0 +1,48 @@ +import { Fetch, RequestManager, Store } from '@warp-drive/core'; +import { + instantiateRecord, + registerDerivations, + SchemaService, + teardownRecord, +} from '@warp-drive/core/reactive'; +import { CacheHandler, CachePolicy } from '@warp-drive/core/store'; +import type { + CacheCapabilitiesManager, + ResourceKey, +} from '@warp-drive/core/types'; +import { JSONAPICache } from '@warp-drive/json-api'; + +export default class AppStore extends Store { + requestManager = new RequestManager().use([Fetch]).useCache(CacheHandler); + + lifetimes = new CachePolicy({ + apiHardExpires: 15 * 60 * 1000, // 15 minutes + apiSoftExpires: 1 * 30 * 1000, // 30 seconds + constraints: { + 'X-WarpDrive-Expires': true, + 'Cache-Control': true, + Expires: true, + }, + }); + + createSchemaService() { + const schema = new SchemaService(); + registerDerivations(schema); + return schema; + } + + createCache(capabilities: CacheCapabilitiesManager) { + return new JSONAPICache(capabilities); + } + + instantiateRecord( + identifier: ResourceKey, + createArgs?: Record + ) { + return instantiateRecord(this, identifier, createArgs); + } + + teardownRecord(record: unknown): void { + return teardownRecord(record); + } +} diff --git a/files/ember-cli-build.js b/files/ember-cli-build.js index e6a759d..fd230cb 100644 --- a/files/ember-cli-build.js +++ b/files/ember-cli-build.js @@ -5,18 +5,19 @@ const { compatBuild } = require('@embroider/compat'); module.exports = async function (defaults) { const { buildOnce } = await import('@embroider/vite'); + const { setConfig } = await import('@warp-drive/core/build-config'); + let app = new EmberApp(defaults, { - <% if (emberData) {%>emberData: { - deprecations: { - // New projects can safely leave this deprecation disabled. - // If upgrading, to opt-into the deprecated behavior, set this to true and then follow: - // https://deprecations.emberjs.com/id/ember-data-deprecate-store-extends-ember-object - // before upgrading to Ember Data 6.0 - DEPRECATE_STORE_EXTENDS_EMBER_OBJECT: false, - }, - }, - <% } %>// Add options here + // Add options here }); + <% if (emberdata) { %>setConfig(app, __dirname, { + // this should be the most recent . version for + // which all deprecations have been fully resolved + // and should be updated when that changes + // for new apps it should be the version you installed + compatWith: '5.6' + });<% }%> + return compatBuild(app, buildOnce); }; diff --git a/files/package.json b/files/package.json index 6430ccf..b00b203 100644 --- a/files/package.json +++ b/files/package.json @@ -35,16 +35,7 @@ "@babel/runtime": "^7.27.1", "@babel/plugin-transform-runtime": "^7.27.1<% if (typescript) { %>", "@babel/plugin-transform-typescript": "^7.27.1<% } %>", - "@babel/eslint-parser": "^7.27.1<% if (typescript && emberData) { %>", - "@ember-data/adapter": "~5.5.0", - "@ember-data/graph": "~5.5.0", - "@ember-data/json-api": "~5.5.0", - "@ember-data/legacy-compat": "~5.5.0", - "@ember-data/model": "~5.5.0", - "@ember-data/request": "~5.5.0", - "@ember-data/request-utils": "~5.5.0", - "@ember-data/serializer": "~5.5.0", - "@ember-data/store": "~5.5.0<% } %><% if (typescript) { %>", + "@babel/eslint-parser": "^7.27.1<% if (typescript) { %>", "@ember/app-tsconfig": "^1.0.3<% } %>", "@ember/optional-features": "^2.2.0", "@ember/string": "^4.0.1", @@ -64,8 +55,11 @@ "@glint/template": "^1.5.2<% } %>", "@rollup/plugin-babel": "^6.0.4<% if (typescript) { %>", "@types/qunit": "^2.19.12", - "@types/rsvp": "^4.0.9<% if (emberData) {%>", - "@warp-drive/core-types": "~5.5.0<% }} %><% if (emberData) { %>", + "@types/rsvp": "^4.0.9<% if (emberData) { %>", + "@warp-drive/core": "~5.5.0", + "@warp-drive/json-api": "~5.5.0", + "@warp-drive/legacy": "~5.5.0", + "@warp-drive/utilities": "~5.5.0", "@warp-drive/ember": "~5.5.0<% } %>", "babel-plugin-ember-template-compilation": "^2.4.1", "concurrently": "^9.1.2", @@ -73,8 +67,7 @@ "ember-auto-import": "^2.10.0", "ember-cli": "~6.5.0-beta.0", "ember-cli-babel": "^8.2.0", - "ember-cli-deprecation-workflow": "^3.3.0<% if (emberData) { %>", - "ember-data": "~5.5.0<% } %>", + "ember-cli-deprecation-workflow": "^3.3.0", "ember-load-initializers": "^3.0.1", "ember-modifier": "^4.2.2", "ember-page-title": "^9.0.2", diff --git a/index.js b/index.js index c1a89cd..88e4d8d 100644 --- a/index.js +++ b/index.js @@ -104,6 +104,7 @@ module.exports = { if (!options.emberData) { files = files.filter((file) => !file.includes('models/')); files = files.filter((file) => !file.includes('ember-data/')); + files = files.filter((file) => !file.includes('/store')); } this._files = files;