Skip to content

Commit 9b12c4e

Browse files
authoredJun 20, 2024
fix: setup deprecation support as early as possible, restore inspector support (#9495)
* fix: inflector support * fix inspector support * fix lint * fixup * run pnpm dedupe * fixups
1 parent 16f9992 commit 9b12c4e

File tree

14 files changed

+256
-120
lines changed

14 files changed

+256
-120
lines changed
 

Diff for: ‎packages/-ember-data/app/initializers/ember-data.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import '@ember-data/request-utils/deprecation-support';
2+
13
/*
24
This code initializes EmberData in an Ember application.
35
*/

Diff for: ‎packages/-ember-data/src/store.ts

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import '@ember-data/request-utils/deprecation-support';
2-
31
import JSONAPICache from '@ember-data/json-api';
42
import {
53
adapterFor,

Diff for: ‎packages/build-config/cjs-src/transforms/babel-plugin-transform-deprecations.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ export default function (babel) {
5454
specifier.scope.removeOwnBinding(localBindingName);
5555
specifier.remove();
5656
});
57-
}
58-
if (path.get('specifiers').length === 0) {
59-
path.remove();
57+
if (path.get('specifiers').length === 0) {
58+
path.remove();
59+
}
6060
}
6161
},
6262

Diff for: ‎packages/build-config/cjs-src/transforms/babel-plugin-transform-features.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ export default function (babel) {
6464
specifier.scope.removeOwnBinding(localBindingName);
6565
specifier.remove();
6666
});
67-
}
68-
if (path.get('specifiers').length === 0) {
69-
path.remove();
67+
if (path.get('specifiers').length === 0) {
68+
path.remove();
69+
}
7070
}
7171
},
7272

Diff for: ‎packages/build-config/cjs-src/transforms/babel-plugin-transform-logging.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ export default function (babel) {
5454
specifier.scope.removeOwnBinding(localBindingName);
5555
specifier.remove();
5656
});
57-
}
58-
if (path.get('specifiers').length === 0) {
59-
path.remove();
57+
if (path.get('specifiers').length === 0) {
58+
path.remove();
59+
}
6060
}
6161
},
6262

Diff for: ‎packages/build-config/src/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ export function setConfig(context: object, appRoot: string, config: WarpDriveCon
8080
const FEATURES = getFeatures(env.PRODUCTION);
8181

8282
const includeDataAdapterInProduction =
83-
typeof config.includeDataAdapterInProduction === 'boolean' ? config.includeDataAdapterInProduction : false;
84-
const includeDataAdapter = env.PRODUCTION ? includeDataAdapterInProduction : false;
83+
typeof config.includeDataAdapterInProduction === 'boolean' ? config.includeDataAdapterInProduction : true;
84+
const includeDataAdapter = env.PRODUCTION ? includeDataAdapterInProduction : true;
8585

8686
const finalizedConfig: InternalWarpDriveConfig = {
8787
debug: debugOptions,

Diff for: ‎packages/debug/package.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@
103103
"ember-addon": {
104104
"main": "addon-main.cjs",
105105
"type": "addon",
106-
"version": 2
106+
"version": 2,
107+
"app-js": {
108+
"./data-adapter.js": "./dist/data-adapter.js"
109+
}
107110
},
108111
"volta": {
109112
"extends": "../../package.json"

Diff for: ‎packages/debug/src/data-adapter.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import DataAdapter from '@ember/debug/data-adapter';
2929
import { addObserver, removeObserver } from '@ember/object/observers';
3030
import { inject as service } from '@ember/service';
3131

32+
import { getGlobalConfig, macroCondition } from '@embroider/macros';
33+
3234
import type Model from '@ember-data/model';
3335
import { capitalize, underscore } from '@ember-data/request-utils/string';
3436
import type Store from '@ember-data/store';
@@ -151,7 +153,7 @@ function typesMapFor(store: Store): Map<string, boolean> {
151153
@extends DataAdapter
152154
@private
153155
*/
154-
export default class extends DataAdapter<Model> {
156+
class InspectorDataAdapter extends DataAdapter<Model> {
155157
@service('store') declare store: Store;
156158

157159
/**
@@ -435,3 +437,9 @@ export default class extends DataAdapter<Model> {
435437
return release;
436438
}
437439
}
440+
441+
export default macroCondition(
442+
getGlobalConfig<{ WarpDrive: { includeDataAdapter: boolean } }>().WarpDrive.includeDataAdapter
443+
)
444+
? InspectorDataAdapter
445+
: null;

Diff for: ‎packages/request-utils/src/deprecation-support.ts

+147
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,153 @@ if (DEPRECATE_EMBER_INFLECTOR) {
2020
// eslint-disable-next-line @typescript-eslint/unbound-method
2121
const originalUncountable = inflector.uncountable;
2222

23+
// copy over any already registered rules
24+
type DefaultRules = {
25+
plurals: [RegExp, string][];
26+
singular: [RegExp, string][];
27+
irregularPairs: [string, string][];
28+
uncountable: string[];
29+
};
30+
type InternalRules = {
31+
plurals: [RegExp, string][];
32+
singular: [RegExp, string][];
33+
34+
// [str1, str2] =>
35+
// { [str1.lower]: str2 }
36+
// { [str2.lower]: str2 }
37+
irregular: Record<string, string>;
38+
39+
// [str1, str2] =>
40+
// { [str2.lower]: str1 }
41+
// { [str1.lower]: str1 }
42+
irregularInverse: Record<string, string>;
43+
44+
// lower cased string
45+
uncountable: Record<string, boolean>;
46+
};
47+
const { defaultRules } = Inflector as unknown as { defaultRules: DefaultRules };
48+
const { rules } = inflector as unknown as { rules: InternalRules };
49+
50+
const pluralMap = new Map(defaultRules.plurals);
51+
const singularMap = new Map(defaultRules.singular);
52+
const irregularMap = new Map<string, string>();
53+
const toIgnore = new Set<string>();
54+
const uncountableSet = new Set(defaultRules.uncountable);
55+
56+
defaultRules.irregularPairs.forEach(([single, plur]) => {
57+
irregularMap.set(single.toLowerCase(), plur);
58+
toIgnore.add(plur.toLowerCase());
59+
});
60+
const irregularLookups = new Map<string, string>();
61+
Object.keys(rules.irregular).forEach((single) => {
62+
const plur = rules.irregular[single];
63+
irregularLookups.set(single, plur);
64+
});
65+
66+
// load plurals
67+
rules.plurals.forEach(([regex, replacement]) => {
68+
if (pluralMap.has(regex)) {
69+
return;
70+
}
71+
72+
plural(regex, replacement);
73+
74+
deprecate(
75+
`WarpDrive/EmberData no longer uses ember-inflector for pluralization.\nPlease \`import { plural } from '@ember-data/request-utils/string';\` instead to register a custom pluralization rule for use with EmberData.`,
76+
false,
77+
{
78+
id: 'warp-drive.ember-inflector',
79+
until: '6.0.0',
80+
for: 'warp-drive',
81+
since: {
82+
enabled: '5.3.4',
83+
available: '5.3.4',
84+
},
85+
url: 'https://deprecations.emberjs.com/id/warp-drive.ember-inflector',
86+
}
87+
);
88+
});
89+
90+
// load singulars
91+
rules.singular.forEach(([regex, replacement]) => {
92+
if (singularMap.has(regex)) {
93+
return;
94+
}
95+
96+
singular(regex, replacement);
97+
98+
deprecate(
99+
`WarpDrive/EmberData no longer uses ember-inflector for singularization.\nPlease \`import { singular } from '@ember-data/request-utils/string';\` instead to register a custom singularization rule for use with EmberData.`,
100+
false,
101+
{
102+
id: 'warp-drive.ember-inflector',
103+
until: '6.0.0',
104+
for: 'warp-drive',
105+
since: {
106+
enabled: '5.3.4',
107+
available: '5.3.4',
108+
},
109+
url: 'https://deprecations.emberjs.com/id/warp-drive.ember-inflector',
110+
}
111+
);
112+
});
113+
114+
// load irregulars
115+
Object.keys(rules.irregular).forEach((single) => {
116+
const plur = rules.irregular[single];
117+
const defaultPlur = irregularMap.get(single);
118+
if (defaultPlur && defaultPlur === plur) {
119+
return;
120+
}
121+
122+
if (toIgnore.has(single)) {
123+
return;
124+
}
125+
126+
const actualSingle = irregularLookups.get(plur.toLowerCase()) || single;
127+
toIgnore.add(plur.toLowerCase());
128+
irregular(actualSingle, plur);
129+
130+
deprecate(
131+
`WarpDrive/EmberData no longer uses ember-inflector for irregular rules.\nPlease \`import { irregular } from '@ember-data/request-utils/string';\` instead to register a custom irregular rule for use with EmberData for '${actualSingle}' <=> '${plur}'.`,
132+
false,
133+
{
134+
id: 'warp-drive.ember-inflector',
135+
until: '6.0.0',
136+
for: 'warp-drive',
137+
since: {
138+
enabled: '5.3.4',
139+
available: '5.3.4',
140+
},
141+
url: 'https://deprecations.emberjs.com/id/warp-drive.ember-inflector',
142+
}
143+
);
144+
});
145+
146+
// load uncountables
147+
Object.keys(rules.uncountable).forEach((word) => {
148+
if (uncountableSet.has(word) || rules.uncountable[word] !== true) {
149+
return;
150+
}
151+
152+
uncountable(word);
153+
154+
deprecate(
155+
`WarpDrive/EmberData no longer uses ember-inflector for uncountable rules.\nPlease \`import { uncountable } from '@ember-data/request-utils/string';\` instead to register a custom uncountable rule for '${word}' for use with EmberData.`,
156+
false,
157+
{
158+
id: 'warp-drive.ember-inflector',
159+
until: '6.0.0',
160+
for: 'warp-drive',
161+
since: {
162+
enabled: '5.3.4',
163+
available: '5.3.4',
164+
},
165+
url: 'https://deprecations.emberjs.com/id/warp-drive.ember-inflector',
166+
}
167+
);
168+
});
169+
23170
inflector.plural = function (...args: Parameters<typeof originalPlural>) {
24171
plural(...args);
25172

0 commit comments

Comments
 (0)