Skip to content

Commit 1f08613

Browse files
authored
feat: compatibility with Ember canary (#39)
* chore(deps): ember canary + ember-concurrency fix * feat: compatibility with Ember canary * fix: Ember 3.8 * Revert "chore(deps): ember canary + ember-concurrency fix" This reverts commit d763efa.
1 parent fd1dfcd commit 1f08613

File tree

1 file changed

+35
-11
lines changed

1 file changed

+35
-11
lines changed

addon/index.js

+35-11
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,42 @@ export { default as lastValue } from './last-value';
3232
* @returns {object|null}
3333
* @private
3434
*/
35-
function extractValue(desc) {
36-
if ('value' in desc.descriptor) {
37-
return desc.descriptor.value;
38-
}
39-
if (typeof desc.initializer === 'function') {
40-
const { initializer } = desc;
41-
delete desc.initializer;
35+
function extractValue(desc, allowNoInitializer = false) {
36+
switch (desc.kind) {
37+
case 'method': {
38+
assert(
39+
`'${desc.key}' has to be a method on the prototype, not 'static'.`,
40+
desc.placement === 'prototype'
41+
);
42+
const { value } = desc.descriptor;
43+
delete desc.descriptor.value;
44+
desc.kind = 'field';
4245

43-
return initializer();
44-
}
46+
// This somehow happens for Ember pre 3.9 🤷🏼‍
47+
if (desc.initializer) {
48+
const { initializer } = desc;
49+
delete desc.initializer;
50+
return initializer();
51+
}
4552

46-
return null;
53+
return value;
54+
}
55+
case 'field': {
56+
assert(
57+
`'${desc.key}' has to be a field on the class instance, not 'static'.`,
58+
desc.placement === 'own'
59+
);
60+
assert(
61+
`'${desc.key}' has no initializer.`,
62+
allowNoInitializer || typeof desc.initializer === 'function'
63+
);
64+
const { initializer } = desc;
65+
delete desc.initializer;
66+
return initializer ? initializer() : null;
67+
}
68+
default:
69+
assert(`Unsupported kind '${desc.kind}' for '${desc.key}'.`, false);
70+
}
4771
}
4872

4973
/**
@@ -85,7 +109,7 @@ function createTaskGroupFromDescriptor(desc) {
85109
);
86110
assert(
87111
'ember-concurrency-decorators: Task groups can not accept values.',
88-
!extractValue(desc)
112+
!extractValue(desc, true)
89113
);
90114
return createTaskGroupProperty();
91115
}

0 commit comments

Comments
 (0)