-
-
Notifications
You must be signed in to change notification settings - Fork 173
/
utils.js
92 lines (73 loc) · 1.96 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import ArrayProxy from '@ember/array/proxy';
import ObjectProxy from '@ember/object/proxy';
import { isHTMLSafe } from '@ember/template';
import EmberObject from '@ember/object';
import { typeOf } from '@ember/utils';
import { A as emberArray } from '@ember/array';
import {
macroCondition,
dependencySatisfies,
importSync,
} from '@embroider/macros';
let DS;
if (macroCondition(dependencySatisfies('ember-data', '*'))) {
DS = importSync('ember-data').default;
}
export { getDependentKeys, isDescriptor } from '../-private/ember-internals';
export function unwrapString(s) {
if (isHTMLSafe(s)) {
return s.toString();
}
return s;
}
export function unwrapProxy(o) {
return isProxy(o) ? unwrapProxy(o.content) : o;
}
export function isProxy(o) {
return !!(o && (o instanceof ObjectProxy || o instanceof ArrayProxy));
}
function canInvoke(obj, methodName) {
return (
obj !== null && obj !== undefined && typeof obj[methodName] === 'function'
);
}
export function isPromise(p) {
return !!(p && canInvoke(p, 'then'));
}
export function isDsModel(o) {
return !!(DS && o && o instanceof DS.Model);
}
export function isDSManyArray(o) {
return !!(
DS &&
o &&
(o instanceof DS.PromiseManyArray || o instanceof DS.ManyArray)
);
}
export function isEmberObject(o) {
return !!(o && o instanceof EmberObject);
}
export function isObject(o) {
return typeOf(o) === 'object' || typeOf(o) === 'instance';
}
export function isValidatable(value) {
let v = unwrapProxy(value);
return isDsModel(v) ? !v.isDeleted : true;
}
export function getValidatableValue(value) {
if (!value) {
return value;
}
if (isDSManyArray(value)) {
return emberArray(value.filter((v) => isValidatable(v)));
}
return isValidatable(value) ? value : undefined;
}
export function mergeOptions(...options) {
let o = {};
for (let i = options.length - 1; i >= 0; i--) {
let _o = options[i];
Object.assign(o, isObject(_o) ? _o : {});
}
return o;
}