Skip to content

Commit 4dc97ff

Browse files
committed
Resolve Ember Data deprecation, much like this PR did: miragejs#2444
But instead apply to master
1 parent a31d3f4 commit 4dc97ff

3 files changed

Lines changed: 52 additions & 3 deletions

File tree

packages/ember-cli-mirage/addon/ember-data.js

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
import require from 'require';
44
import config from 'ember-get-config';
55
import assert from './assert';
6-
import { hasEmberData, isDsModel } from 'ember-cli-mirage/utils/ember-data';
6+
import {
7+
hasEmberData,
8+
isDsModel,
9+
AppSymbolForEmberDataModels,
10+
} from 'ember-cli-mirage/utils/ember-data';
711
import { Model, belongsTo, hasMany } from 'miragejs';
812
import EmberDataSerializer from 'ember-cli-mirage/serializers/ember-data-serializer';
913
import { _utilsInflectorCamelize as camelize } from 'miragejs';
@@ -14,6 +18,19 @@ const { modulePrefix, podModulePrefix } = config;
1418
let DsModels, Models;
1519
let DsSerializers, Serializers;
1620

21+
function _getAppInstance() {
22+
const application = window[AppSymbolForEmberDataModels];
23+
let appInstance = application.__deprecatedInstance__;
24+
// If an appInstance wasn't found (such as when running the tests)
25+
// then instantiate one manually, so we can use it to discover the
26+
// ember-data models in a way that doesn't trigger deprecations.
27+
if (!appInstance) {
28+
application._buildDeprecatedInstance();
29+
appInstance = application.__deprecatedInstance__;
30+
}
31+
return appInstance;
32+
}
33+
1734
/**
1835
* Get all ember data models under the app's namespaces
1936
*
@@ -45,8 +62,19 @@ export function getDsModels() {
4562
path.match(classicModelMatchRegex) || path.match(podModelMatchRegex);
4663
if (matches && matches[1]) {
4764
let modelName = matches[1];
65+
let model = undefined;
66+
67+
// Use the appInstance to lookup the models if provided, to avoid triggering
68+
// the ember-data:deprecate-early-static deprecation in ember-data
69+
const appInstance = _getAppInstance();
70+
if (appInstance) {
71+
const modelNameExact = path.split('/models/')[1];
72+
const store = appInstance.lookup('service:store');
73+
model = store.modelFor(modelNameExact);
74+
} else {
75+
model = require(path, null, null, true).default;
76+
}
4877

49-
let model = require(path, null, null, true).default;
5078
if (isDsModel(model)) {
5179
DsModels[modelName] = model;
5280
}

packages/ember-cli-mirage/addon/utils/ember-data.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,10 @@ export const hasEmberData = dependencySatisfies('ember-data', '*');
1111
export function isDsModel(m) {
1212
return m && typeof m.eachRelationship === 'function';
1313
}
14+
15+
/**
16+
@hide
17+
*/
18+
export const AppSymbolForEmberDataModels = Symbol(
19+
'AppSymbolForEmberDataModels'
20+
);

packages/ember-cli-mirage/app/initializers/ember-cli-mirage.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import ENV from '../config/environment';
22
import getRfc232TestContext from 'ember-cli-mirage/get-rfc232-test-context';
33
import startMirageImpl from 'ember-cli-mirage/start-mirage';
44
import * as config from '../mirage/config';
5-
const { default: makeServer } = config;
5+
import { AppSymbolForEmberDataModels } from 'ember-cli-mirage/utils/ember-data';
6+
7+
const { default: makeServer, baseConfig, testConfig } = config;
68

79
//
810
// This initializer does two things:
@@ -16,6 +18,18 @@ const { default: makeServer } = config;
1618
export default {
1719
name: 'ember-cli-mirage',
1820
initialize(application) {
21+
window[AppSymbolForEmberDataModels] = application;
22+
23+
if (baseConfig) {
24+
application.register('mirage:base-config', baseConfig, {
25+
instantiate: false,
26+
});
27+
}
28+
if (testConfig) {
29+
application.register('mirage:test-config', testConfig, {
30+
instantiate: false,
31+
});
32+
}
1933
if (makeServer) {
2034
application.register('mirage:make-server', makeServer, {
2135
instantiate: false,

0 commit comments

Comments
 (0)