Skip to content

Commit e0fe775

Browse files
Merge pull request #136 from universal-ember/remove-cached-polyfill
Keeping 3.28+ support, but remove the cached-decorator polyfill
2 parents a061a08 + 2a40ed1 commit e0fe775

File tree

6 files changed

+47
-57
lines changed

6 files changed

+47
-57
lines changed

pnpm-lock.yaml

Lines changed: 0 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

reactiveweb/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
"@embroider/macros": "^1.16.6",
6363
"decorator-transforms": "^2.2.2",
6464
"ember-async-data": "^1.0.3 || >=2.0.0",
65-
"ember-cached-decorator-polyfill": "^1.0.2",
6665
"ember-resources": ">= 6.4.2"
6766
},
6867
"devDependencies": {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/* eslint-disable @typescript-eslint/no-explicit-any */
2+
import { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';
3+
4+
import type Owner from '@ember/owner';
5+
6+
interface CompatOwner {
7+
getOwner: (context: unknown) => Owner | undefined;
8+
setOwner: (context: unknown, owner: Owner) => void;
9+
}
10+
11+
export const compatOwner = {} as CompatOwner;
12+
13+
if (macroCondition(dependencySatisfies('ember-source', '>=4.12.0'))) {
14+
// In no version of ember where `@ember/owner` tried to be imported did it exist
15+
// if (macroCondition(false)) {
16+
// Using 'any' here because importSync can't lookup types correctly
17+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
18+
compatOwner.getOwner = (importSync('@ember/owner') as any).getOwner;
19+
compatOwner.setOwner = (importSync('@ember/owner') as any).setOwner;
20+
} else {
21+
// Using 'any' here because importSync can't lookup types correctly
22+
compatOwner.getOwner = (importSync('@ember/application') as any).getOwner;
23+
compatOwner.setOwner = (importSync('@ember/application') as any).setOwner;
24+
}

reactiveweb/src/link.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
2-
import { getOwner, setOwner } from '@ember/application';
32
import { assert } from '@ember/debug';
43
import { associateDestroyableChild } from '@ember/destroyable';
54

5+
import { compatOwner } from './-private/ember-compat.ts';
6+
67
import type { Class, Stage1Decorator, Stage1DecoratorDescriptor } from '#types';
78

9+
let getOwner = compatOwner.getOwner;
10+
let setOwner = compatOwner.setOwner;
11+
812
type NonKey<K> = K extends string ? never : K extends symbol ? never : K;
913

1014
/**

reactiveweb/src/map.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
import { cached } from '@glimmer/tracking';
2-
import { setOwner } from '@ember/application';
1+
import { createCache, getValue } from '@glimmer/tracking/primitives/cache';
32
import { assert } from '@ember/debug';
43

4+
import { compatOwner } from './-private/ember-compat.ts';
5+
6+
const setOwner = compatOwner.setOwner;
7+
58
/**
69
* Public API of the return value of the [[map]] utility.
710
*/
@@ -231,8 +234,11 @@ export class TrackedArrayMap<Element = unknown, MappedTo = unknown>
231234
}) as TrackedArrayMap<Element, MappedTo>;
232235
}
233236

234-
@cached
235-
get _records(): (Element & object)[] {
237+
/**
238+
* We don't want to use @cached
239+
* because we support 3.28, and @cached was introduced in 4.1-4.5
240+
*/
241+
#records = createCache(() => {
236242
let data = this._dataFn();
237243

238244
assert(
@@ -241,6 +247,10 @@ export class TrackedArrayMap<Element = unknown, MappedTo = unknown>
241247
);
242248

243249
return data as Array<Element & object>;
250+
});
251+
252+
get _records(): (Element & object)[] {
253+
return getValue(this.#records) as (Element & object)[];
244254
}
245255

246256
values = () => [...this];

reactiveweb/src/resource/service.ts

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,14 @@ import { getValue } from '@glimmer/tracking/primitives/cache';
33
import { assert } from '@ember/debug';
44
import { associateDestroyableChild } from '@ember/destroyable';
55
import { invokeHelper } from '@ember/helper';
6-
import {
7-
dependencySatisfies,
8-
importSync,
9-
isDevelopingApp,
10-
isTesting,
11-
macroCondition,
12-
} from '@embroider/macros';
6+
import { isDevelopingApp, isTesting, macroCondition } from '@embroider/macros';
7+
8+
import { compatOwner } from '../-private/ember-compat.ts';
139

1410
import type Owner from '@ember/owner';
1511
import type { Stage1DecoratorDescriptor } from '#types';
1612

17-
let getOwner: (context: unknown) => Owner | undefined;
18-
19-
if (macroCondition(dependencySatisfies('ember-source', '>=4.12.0'))) {
20-
// Using 'any' here because importSync can't lookup types correctly
21-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
22-
getOwner = (importSync('@ember/owner') as any).getOwner;
23-
} else {
24-
// Using 'any' here because importSync can't lookup types correctly
25-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
26-
getOwner = (importSync('@ember/application') as any).getOwner;
27-
}
13+
let getOwner = compatOwner.getOwner;
2814

2915
/**
3016
* In order for the same cache to be used for all references

0 commit comments

Comments
 (0)