@ember-data/tracking 5.4.0-alpha.64 → 5.4.0-alpha.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon-main.cjs +3 -92
- package/{addon → dist}/-private.js +23 -19
- package/dist/-private.js.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/package.json +30 -29
- package/unstable-preview-types/-private.d.ts +1 -1
- package/unstable-preview-types/-private.d.ts.map +1 -1
- package/unstable-preview-types/index.d.ts.map +1 -1
- package/addon/-private.js.map +0 -1
- package/addon/index.js +0 -19
- package/addon/index.js.map +0 -1
package/addon-main.cjs
CHANGED
|
@@ -1,94 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
const getEnv = require('@ember-data/private-build-infra/src/utilities/get-env');
|
|
3
|
-
const detectModule = require('@ember-data/private-build-infra/src/utilities/detect-module');
|
|
1
|
+
'use strict';
|
|
4
2
|
|
|
5
|
-
const
|
|
3
|
+
const { addonShim } = require('@warp-drive/build-config/addon-shim.cjs');
|
|
6
4
|
|
|
7
|
-
module.exports =
|
|
8
|
-
name: pkg.name,
|
|
9
|
-
|
|
10
|
-
options: {
|
|
11
|
-
'@embroider/macros': {
|
|
12
|
-
setOwnConfig: {},
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
|
|
16
|
-
_emberDataConfig: null,
|
|
17
|
-
configureEmberData() {
|
|
18
|
-
if (this._emberDataConfig) {
|
|
19
|
-
return this._emberDataConfig;
|
|
20
|
-
}
|
|
21
|
-
const app = this._findHost();
|
|
22
|
-
const isProd = /production/.test(process.env.EMBER_ENV);
|
|
23
|
-
const hostOptions = app.options?.emberData || {};
|
|
24
|
-
const debugOptions = Object.assign(
|
|
25
|
-
{
|
|
26
|
-
LOG_PAYLOADS: false,
|
|
27
|
-
LOG_OPERATIONS: false,
|
|
28
|
-
LOG_MUTATIONS: false,
|
|
29
|
-
LOG_NOTIFICATIONS: false,
|
|
30
|
-
LOG_REQUESTS: false,
|
|
31
|
-
LOG_REQUEST_STATUS: false,
|
|
32
|
-
LOG_IDENTIFIERS: false,
|
|
33
|
-
LOG_GRAPH: false,
|
|
34
|
-
LOG_INSTANCE_CACHE: false,
|
|
35
|
-
},
|
|
36
|
-
hostOptions.debug || {}
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const HAS_DEBUG_PACKAGE = detectModule(require, '@ember-data/debug', __dirname, pkg);
|
|
40
|
-
const HAS_META_PACKAGE = detectModule(require, 'ember-data', __dirname, pkg);
|
|
41
|
-
|
|
42
|
-
const includeDataAdapterInProduction =
|
|
43
|
-
typeof hostOptions.includeDataAdapterInProduction === 'boolean'
|
|
44
|
-
? hostOptions.includeDataAdapterInProduction
|
|
45
|
-
: HAS_META_PACKAGE;
|
|
46
|
-
|
|
47
|
-
const includeDataAdapter = HAS_DEBUG_PACKAGE ? (isProd ? includeDataAdapterInProduction : true) : false;
|
|
48
|
-
const DEPRECATIONS = require('@ember-data/private-build-infra/src/deprecations')(hostOptions.compatWith || null);
|
|
49
|
-
const FEATURES = require('@ember-data/private-build-infra/src/features')(isProd);
|
|
50
|
-
|
|
51
|
-
const ALL_PACKAGES = requireModule('@ember-data/private-build-infra/virtual-packages/packages.js');
|
|
52
|
-
const MACRO_PACKAGE_FLAGS = Object.assign({}, ALL_PACKAGES.default);
|
|
53
|
-
delete MACRO_PACKAGE_FLAGS['HAS_DEBUG_PACKAGE'];
|
|
54
|
-
|
|
55
|
-
Object.keys(MACRO_PACKAGE_FLAGS).forEach((key) => {
|
|
56
|
-
MACRO_PACKAGE_FLAGS[key] = detectModule(require, MACRO_PACKAGE_FLAGS[key], __dirname, pkg);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
// copy configs forward
|
|
60
|
-
const ownConfig = this.options['@embroider/macros'].setOwnConfig;
|
|
61
|
-
ownConfig.polyfillUUID = hostOptions.polyfillUUID ?? false;
|
|
62
|
-
ownConfig.compatWith = hostOptions.compatWith || null;
|
|
63
|
-
ownConfig.debug = debugOptions;
|
|
64
|
-
ownConfig.deprecations = Object.assign(DEPRECATIONS, ownConfig.deprecations || {}, hostOptions.deprecations || {});
|
|
65
|
-
ownConfig.features = Object.assign({}, FEATURES, ownConfig.features || {}, hostOptions.features || {});
|
|
66
|
-
ownConfig.includeDataAdapter = includeDataAdapter;
|
|
67
|
-
ownConfig.packages = MACRO_PACKAGE_FLAGS;
|
|
68
|
-
ownConfig.env = getEnv(ownConfig);
|
|
69
|
-
|
|
70
|
-
this._emberDataConfig = ownConfig;
|
|
71
|
-
return ownConfig;
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
included() {
|
|
75
|
-
this.configureEmberData();
|
|
76
|
-
return this._super.included.call(this, ...arguments);
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
treeForVendor() {
|
|
80
|
-
return;
|
|
81
|
-
},
|
|
82
|
-
treeForPublic() {
|
|
83
|
-
return;
|
|
84
|
-
},
|
|
85
|
-
treeForStyles() {
|
|
86
|
-
return;
|
|
87
|
-
},
|
|
88
|
-
treeForAddonStyles() {
|
|
89
|
-
return;
|
|
90
|
-
},
|
|
91
|
-
treeForApp() {
|
|
92
|
-
return;
|
|
93
|
-
},
|
|
94
|
-
};
|
|
5
|
+
module.exports = addonShim(__dirname);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tagForProperty } from '@ember/-internals/metal';
|
|
2
2
|
import { consumeTag, dirtyTag } from '@glimmer/validator';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { getOrSetGlobal, peekTransient, setTransient } from '@warp-drive/core-types/-private';
|
|
4
|
+
import { macroCondition, getGlobalConfig } from '@embroider/macros';
|
|
5
5
|
function createTransaction() {
|
|
6
6
|
const transaction = {
|
|
7
7
|
cbs: new Set(),
|
|
@@ -9,10 +9,11 @@ function createTransaction() {
|
|
|
9
9
|
sub: new Set(),
|
|
10
10
|
parent: null
|
|
11
11
|
};
|
|
12
|
+
const TRANSACTION = peekTransient('TRANSACTION');
|
|
12
13
|
if (TRANSACTION) {
|
|
13
14
|
transaction.parent = TRANSACTION;
|
|
14
15
|
}
|
|
15
|
-
TRANSACTION
|
|
16
|
+
setTransient('TRANSACTION', transaction);
|
|
16
17
|
}
|
|
17
18
|
function maybeConsume(tag) {
|
|
18
19
|
if (tag) {
|
|
@@ -37,10 +38,11 @@ function maybeDirty(tag) {
|
|
|
37
38
|
* @param obj
|
|
38
39
|
*/
|
|
39
40
|
function subscribe(obj) {
|
|
41
|
+
const TRANSACTION = peekTransient('TRANSACTION');
|
|
40
42
|
if (TRANSACTION) {
|
|
41
43
|
TRANSACTION.sub.add(obj);
|
|
42
44
|
} else if ('tag' in obj) {
|
|
43
|
-
if (macroCondition(
|
|
45
|
+
if (macroCondition(getGlobalConfig().WarpDrive.deprecations.DEPRECATE_COMPUTED_CHAINS)) {
|
|
44
46
|
maybeConsume(obj['[]']);
|
|
45
47
|
maybeConsume(obj['@length']);
|
|
46
48
|
}
|
|
@@ -50,10 +52,10 @@ function subscribe(obj) {
|
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
54
|
function updateRef(obj) {
|
|
53
|
-
if (macroCondition(
|
|
55
|
+
if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
|
|
54
56
|
try {
|
|
55
57
|
if ('tag' in obj) {
|
|
56
|
-
if (macroCondition(
|
|
58
|
+
if (macroCondition(getGlobalConfig().WarpDrive.deprecations.DEPRECATE_COMPUTED_CHAINS)) {
|
|
57
59
|
maybeDirty(obj['[]']);
|
|
58
60
|
maybeDirty(obj['@length']);
|
|
59
61
|
}
|
|
@@ -101,7 +103,7 @@ function updateRef(obj) {
|
|
|
101
103
|
}
|
|
102
104
|
} else {
|
|
103
105
|
if ('tag' in obj) {
|
|
104
|
-
if (macroCondition(
|
|
106
|
+
if (macroCondition(getGlobalConfig().WarpDrive.deprecations.DEPRECATE_COMPUTED_CHAINS)) {
|
|
105
107
|
maybeDirty(obj['[]']);
|
|
106
108
|
maybeDirty(obj['@length']);
|
|
107
109
|
}
|
|
@@ -113,8 +115,8 @@ function updateRef(obj) {
|
|
|
113
115
|
}
|
|
114
116
|
}
|
|
115
117
|
function flushTransaction() {
|
|
116
|
-
const transaction = TRANSACTION;
|
|
117
|
-
TRANSACTION
|
|
118
|
+
const transaction = peekTransient('TRANSACTION');
|
|
119
|
+
setTransient('TRANSACTION', transaction.parent);
|
|
118
120
|
transaction.cbs.forEach(cb => {
|
|
119
121
|
cb();
|
|
120
122
|
});
|
|
@@ -125,7 +127,7 @@ function flushTransaction() {
|
|
|
125
127
|
});
|
|
126
128
|
transaction.sub.forEach(obj => {
|
|
127
129
|
if ('tag' in obj) {
|
|
128
|
-
if (macroCondition(
|
|
130
|
+
if (macroCondition(getGlobalConfig().WarpDrive.deprecations.DEPRECATE_COMPUTED_CHAINS)) {
|
|
129
131
|
maybeConsume(obj['[]']);
|
|
130
132
|
maybeConsume(obj['@length']);
|
|
131
133
|
}
|
|
@@ -136,8 +138,8 @@ function flushTransaction() {
|
|
|
136
138
|
});
|
|
137
139
|
}
|
|
138
140
|
async function untrack() {
|
|
139
|
-
const transaction = TRANSACTION;
|
|
140
|
-
TRANSACTION
|
|
141
|
+
const transaction = peekTransient('TRANSACTION');
|
|
142
|
+
setTransient('TRANSACTION', transaction.parent);
|
|
141
143
|
|
|
142
144
|
// defer writes
|
|
143
145
|
await Promise.resolve();
|
|
@@ -151,15 +153,17 @@ async function untrack() {
|
|
|
151
153
|
});
|
|
152
154
|
}
|
|
153
155
|
function addToTransaction(obj) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
+
const transaction = peekTransient('TRANSACTION');
|
|
157
|
+
if (transaction) {
|
|
158
|
+
transaction.props.add(obj);
|
|
156
159
|
} else {
|
|
157
160
|
updateRef(obj);
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
163
|
function addTransactionCB(method) {
|
|
161
|
-
|
|
162
|
-
|
|
164
|
+
const transaction = peekTransient('TRANSACTION');
|
|
165
|
+
if (transaction) {
|
|
166
|
+
transaction.cbs.add(method);
|
|
163
167
|
} else {
|
|
164
168
|
method();
|
|
165
169
|
}
|
|
@@ -231,7 +235,7 @@ function memoTransact(method) {
|
|
|
231
235
|
return ret;
|
|
232
236
|
};
|
|
233
237
|
}
|
|
234
|
-
const Signals = Symbol('Signals');
|
|
238
|
+
const Signals = getOrSetGlobal('Signals', Symbol('Signals'));
|
|
235
239
|
|
|
236
240
|
/**
|
|
237
241
|
* use to add a signal property to the prototype of something.
|
|
@@ -288,7 +292,7 @@ function defineSignal(obj, key, v) {
|
|
|
288
292
|
});
|
|
289
293
|
}
|
|
290
294
|
function createArrayTags(obj, signal) {
|
|
291
|
-
if (macroCondition(
|
|
295
|
+
if (macroCondition(getGlobalConfig().WarpDrive.deprecations.DEPRECATE_COMPUTED_CHAINS)) {
|
|
292
296
|
signal['[]'] = tagForProperty(obj, '[]');
|
|
293
297
|
signal['@length'] = tagForProperty(obj, 'length');
|
|
294
298
|
}
|
|
@@ -312,7 +316,7 @@ function createSignal(obj, key) {
|
|
|
312
316
|
'@length': null,
|
|
313
317
|
lastValue: undefined
|
|
314
318
|
};
|
|
315
|
-
if (macroCondition(
|
|
319
|
+
if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
|
|
316
320
|
// eslint-disable-next-line no-inner-declarations
|
|
317
321
|
function tryGet(prop) {
|
|
318
322
|
try {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"-private.js","sources":["../src/-private.ts"],"sourcesContent":["import { tagForProperty } from '@ember/-internals/metal';\nimport { consumeTag, dirtyTag } from '@glimmer/validator';\n\nimport { DEPRECATE_COMPUTED_CHAINS } from '@warp-drive/build-config/deprecations';\nimport { DEBUG } from '@warp-drive/build-config/env';\nimport { getOrSetGlobal, peekTransient, setTransient } from '@warp-drive/core-types/-private';\n\n/**\n * This package provides primitives that allow powerful low-level\n * adjustments to change tracking notification behaviors.\n *\n * Typically you want to use these primitives when you want to divorce\n * property accesses on EmberData provided objects from the current\n * tracking context. Typically this sort of thing occurs when serializing\n * tracked data to send in a request: the data itself is often ancillary\n * to the thing which triggered the request in the first place and you\n * would not want to re-trigger the request for any update to the data.\n *\n * @module @ember-data/tracking\n * @main @ember-data/tracking\n */\ntype OpaqueFn = (...args: unknown[]) => unknown;\ntype Tag = { ref: null; t: boolean };\ntype Transaction = {\n cbs: Set<OpaqueFn>;\n props: Set<Tag | Signal>;\n sub: Set<Tag | Signal>;\n parent: Transaction | null;\n};\n\nfunction createTransaction() {\n const transaction: Transaction = {\n cbs: new Set(),\n props: new Set(),\n sub: new Set(),\n parent: null,\n };\n const TRANSACTION = peekTransient<Transaction>('TRANSACTION');\n\n if (TRANSACTION) {\n transaction.parent = TRANSACTION;\n }\n setTransient('TRANSACTION', transaction);\n}\n\nfunction maybeConsume(tag: ReturnType<typeof tagForProperty> | null): void {\n if (tag) {\n consumeTag(tag);\n }\n}\n\nfunction maybeDirty(tag: ReturnType<typeof tagForProperty> | null): void {\n if (tag) {\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(tag);\n }\n}\n\n/**\n * If there is a current transaction, ensures that the relevant tag (and any\n * array computed chains symbols, if applicable) will be consumed during the\n * transaction.\n *\n * If there is no current transaction, will consume the tag(s) immediately.\n *\n * @internal\n * @param obj\n */\nexport function subscribe(obj: Tag | Signal): void {\n const TRANSACTION = peekTransient<Transaction | null>('TRANSACTION');\n\n if (TRANSACTION) {\n TRANSACTION.sub.add(obj);\n } else if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeConsume(obj['[]']);\n maybeConsume(obj['@length']);\n }\n consumeTag(obj.tag);\n } else {\n obj.ref;\n }\n}\n\nfunction updateRef(obj: Tag | Signal): void {\n if (DEBUG) {\n try {\n if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeDirty(obj['[]']);\n maybeDirty(obj['@length']);\n }\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(obj.tag);\n } else {\n obj.ref = null;\n }\n } catch (e: unknown) {\n if (e instanceof Error) {\n if (e.message.includes('You attempted to update `undefined`')) {\n // @ts-expect-error\n const key = `<${obj._debug_base}>.${obj.key}`;\n e.message = e.message.replace('You attempted to update `undefined`', `You attempted to update ${key}`);\n e.stack = e.stack?.replace('You attempted to update `undefined`', `You attempted to update ${key}`);\n\n const lines = e.stack?.split(`\\n`);\n const finalLines: string[] = [];\n let lastFile: string | null = null;\n\n lines?.forEach((line) => {\n if (line.trim().startsWith('at ')) {\n // get the last string in the line which contains the code source location\n const location = line.split(' ').at(-1)!;\n // remove the line and char offset info\n\n if (location.includes(':')) {\n const parts = location.split(':');\n parts.pop();\n parts.pop();\n const file = parts.join(':');\n if (file !== lastFile) {\n lastFile = file;\n finalLines.push('');\n }\n }\n finalLines.push(line);\n }\n });\n\n const splitstr = '`undefined` was first used:';\n const parts = e.message.split(splitstr);\n parts.splice(1, 0, `Original Stack\\n=============\\n${finalLines.join(`\\n`)}\\n\\n\\`${key}\\` was first used:`);\n\n e.message = parts.join('');\n }\n }\n throw e;\n }\n } else {\n if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeDirty(obj['[]']);\n maybeDirty(obj['@length']);\n }\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(obj.tag);\n } else {\n obj.ref = null;\n }\n }\n}\n\nfunction flushTransaction() {\n const transaction = peekTransient<Transaction>('TRANSACTION')!;\n setTransient('TRANSACTION', transaction.parent);\n transaction.cbs.forEach((cb) => {\n cb();\n });\n transaction.props.forEach((obj) => {\n // mark this mutation as part of a transaction\n obj.t = true;\n updateRef(obj);\n });\n transaction.sub.forEach((obj) => {\n if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeConsume(obj['[]']);\n maybeConsume(obj['@length']);\n }\n consumeTag(obj.tag);\n } else {\n obj.ref;\n }\n });\n}\nasync function untrack() {\n const transaction = peekTransient<Transaction>('TRANSACTION')!;\n setTransient('TRANSACTION', transaction.parent);\n\n // defer writes\n await Promise.resolve();\n transaction.cbs.forEach((cb) => {\n cb();\n });\n transaction.props.forEach((obj) => {\n // mark this mutation as part of a transaction\n obj.t = true;\n updateRef(obj);\n });\n}\n\nexport function addToTransaction(obj: Tag | Signal): void {\n const transaction = peekTransient<Transaction>('TRANSACTION');\n\n if (transaction) {\n transaction.props.add(obj);\n } else {\n updateRef(obj);\n }\n}\nexport function addTransactionCB(method: OpaqueFn): void {\n const transaction = peekTransient<Transaction>('TRANSACTION');\n\n if (transaction) {\n transaction.cbs.add(method);\n } else {\n method();\n }\n}\n\n/**\n * Run `method` without subscribing to any tracked properties\n * controlled by EmberData.\n *\n * This should rarely be used except by libraries that really\n * know what they are doing. It is most useful for wrapping\n * certain kinds of fetch/query logic from within a `Resource`\n * `hook` or other similar pattern.\n *\n * @function untracked\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return result of invoking method\n */\nexport function untracked<T extends OpaqueFn>(method: T): ReturnType<T> {\n createTransaction();\n const ret = method();\n void untrack();\n return ret as ReturnType<T>;\n}\n\n/**\n * Run the method, subscribing to any tracked properties\n * managed by EmberData that were accessed or written during\n * the method's execution as per-normal but while allowing\n * interleaving of reads and writes.\n *\n * This is useful when for instance you want to perform\n * a mutation based on existing state that must be read first.\n *\n * @function transact\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return result of invoking method\n */\nexport function transact<T extends OpaqueFn>(method: T): ReturnType<T> {\n createTransaction();\n const ret = method();\n flushTransaction();\n return ret as ReturnType<T>;\n}\n\n/**\n * A helpful utility for creating a new function that\n * always runs in a transaction. E.G. this \"memoizes\"\n * calling `transact(fn)`, currying args as necessary.\n *\n * @method memoTransact\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return a function that will invoke method in a transaction with any provided args and return its result\n */\nexport function memoTransact<T extends OpaqueFn>(method: T): (...args: unknown[]) => ReturnType<T> {\n return function (...args: unknown[]) {\n createTransaction();\n const ret = method(...args);\n flushTransaction();\n return ret as ReturnType<T>;\n };\n}\n\nexport const Signals = getOrSetGlobal('Signals', Symbol('Signals'));\n\n/**\n * use to add a signal property to the prototype of something.\n *\n * First arg is the thing to define on\n * Second arg is the property name\n * Third agg is the initial value of the property if any.\n *\n * for instance\n *\n * ```ts\n * class Model {}\n * defineSignal(Model.prototype, 'isLoading', false);\n * ```\n *\n * This is sort of like using a stage-3 decorator but works today\n * while we are still on legacy decorators.\n *\n * e.g. it is equivalent to\n *\n * ```ts\n * class Model {\n * @signal accessor isLoading = false;\n * }\n * ```\n *\n * @internal\n */\nexport function defineSignal<T extends object>(obj: T, key: string, v?: unknown) {\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: false,\n get(this: T & { [Signals]: Map<string, Signal> }) {\n const signals = (this[Signals] = this[Signals] || new Map());\n const existing = signals.has(key);\n const _signal = entangleSignal(signals, this, key);\n if (!existing && v !== undefined) {\n _signal.lastValue = v;\n }\n return _signal.lastValue;\n },\n set(this: T & { [Signals]: Map<string, Signal> }, value: unknown) {\n const signals = (this[Signals] = this[Signals] || new Map());\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(this, key);\n signals.set(key, _signal);\n }\n if (_signal.lastValue !== value) {\n _signal.lastValue = value;\n addToTransaction(_signal);\n }\n },\n });\n}\n\nexport interface Signal {\n /**\n * Key on the associated object\n * @internal\n */\n key: string;\n _debug_base?: string;\n\n /**\n * Whether this signal is part of an active transaction.\n * @internal\n */\n t: boolean;\n\n /**\n * Whether to \"bust\" the lastValue cache\n * @internal\n */\n shouldReset: boolean;\n\n /**\n * The framework specific \"signal\" e.g. glimmer \"tracked\"\n * or starbeam \"cell\" to consume/invalidate when appropriate.\n *\n * @internal\n */\n tag: ReturnType<typeof tagForProperty>;\n\n /**\n * In classic ember, arrays must entangle a `[]` symbol\n * in addition to any other tag in order for array chains to work.\n *\n * Note, this symbol MUST be the one that ember itself generates\n *\n * @internal\n */\n '[]': ReturnType<typeof tagForProperty> | null;\n /**\n * In classic ember, arrays must entangle a `@length` symbol\n * in addition to any other tag in order for array chains to work.\n *\n * Note, this symbol MUST be the one that ember itself generates\n *\n * @internal\n */\n '@length': ReturnType<typeof tagForProperty> | null;\n\n /**\n * The lastValue computed for this signal when\n * a signal is also used for storage.\n * @internal\n */\n lastValue: unknown;\n}\n\nexport function createArrayTags<T extends object>(obj: T, signal: Signal) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n signal['[]'] = tagForProperty(obj, '[]');\n signal['@length'] = tagForProperty(obj, 'length');\n }\n}\n\n/**\n * Create a signal for the key/object pairing.\n *\n * @internal\n * @param obj Object we're creating the signal on\n * @param key Key to create the signal for\n * @return the signal\n */\nexport function createSignal<T extends object>(obj: T, key: string): Signal {\n const _signal: Signal = {\n key,\n tag: tagForProperty(obj, key),\n\n t: false,\n shouldReset: false,\n '[]': null,\n '@length': null,\n lastValue: undefined,\n };\n\n if (DEBUG) {\n // eslint-disable-next-line no-inner-declarations\n function tryGet<T1 = string>(prop: string): T1 | undefined {\n try {\n return obj[prop as keyof typeof obj] as unknown as T1;\n } catch {\n return;\n }\n }\n const modelName =\n tryGet('$type') ?? tryGet('modelName') ?? tryGet<{ modelName?: string }>('constructor')?.modelName ?? '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const className = obj.constructor?.name ?? obj.toString?.() ?? 'unknown';\n _signal._debug_base = `${className}${modelName && !className.startsWith('SchemaRecord') ? `:${modelName}` : ''}`;\n }\n\n return _signal;\n}\n\n/**\n * Create a signal for the key/object pairing and subscribes to the signal.\n *\n * Use when you need to ensure a signal exists and is subscribed to.\n *\n * @internal\n * @param signals Map of signals\n * @param obj Object we're creating the signal on\n * @param key Key to create the signal for\n * @return the signal\n */\nexport function entangleSignal<T extends object>(signals: Map<string, Signal>, obj: T, key: string): Signal {\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(obj, key);\n signals.set(key, _signal);\n }\n subscribe(_signal);\n return _signal;\n}\n\ninterface Signaler {\n [Signals]: Map<string, Signal>;\n}\n\nexport function getSignal<T extends object>(obj: T, key: string, initialState: boolean): Signal {\n let signals = (obj as Signaler)[Signals];\n\n if (!signals) {\n signals = new Map();\n (obj as Signaler)[Signals] = signals;\n }\n\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(obj, key);\n _signal.shouldReset = initialState;\n signals.set(key, _signal);\n }\n return _signal;\n}\n\nexport function peekSignal<T extends object>(obj: T, key: string): Signal | undefined {\n const signals = (obj as Signaler)[Signals];\n if (signals) {\n return signals.get(key);\n }\n}\n"],"names":["createTransaction","transaction","cbs","Set","props","sub","parent","TRANSACTION","peekTransient","setTransient","maybeConsume","tag","consumeTag","maybeDirty","dirtyTag","subscribe","obj","add","macroCondition","getGlobalConfig","WarpDrive","deprecations","DEPRECATE_COMPUTED_CHAINS","ref","updateRef","env","DEBUG","e","Error","message","includes","key","_debug_base","replace","stack","lines","split","finalLines","lastFile","forEach","line","trim","startsWith","location","at","parts","pop","file","join","push","splitstr","splice","flushTransaction","cb","t","untrack","Promise","resolve","addToTransaction","addTransactionCB","method","untracked","ret","transact","memoTransact","args","Signals","getOrSetGlobal","Symbol","defineSignal","v","Object","defineProperty","enumerable","configurable","get","signals","Map","existing","has","_signal","entangleSignal","undefined","lastValue","set","value","createSignal","createArrayTags","signal","tagForProperty","shouldReset","tryGet","prop","modelName","className","constructor","name","toString","getSignal","initialState","peekSignal"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createCache, getValue } from '@glimmer/tracking/primitives/cache';
|
|
2
|
+
export { createCache, getValue } from '@glimmer/tracking/primitives/cache';
|
|
3
|
+
import { macroCondition, getGlobalConfig } from '@embroider/macros';
|
|
4
|
+
export { memoTransact, transact, untracked } from "./-private";
|
|
5
|
+
export { dependentKeyCompat as compat } from '@ember/object/compat';
|
|
6
|
+
function cached(target, key, descriptor) {
|
|
7
|
+
// Error on `@cached()`, `@cached(...args)`, and `@cached propName = value;`
|
|
8
|
+
macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
|
|
9
|
+
if (!test) {
|
|
10
|
+
throw new Error('You attempted to use @cached(), which is not necessary nor supported. Remove the parentheses and you will be good to go!');
|
|
11
|
+
}
|
|
12
|
+
})(target !== undefined) : {};
|
|
13
|
+
macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
|
|
14
|
+
if (!test) {
|
|
15
|
+
throw new Error(`You attempted to use @cached on with ${arguments.length > 1 ? 'arguments' : 'an argument'} ( @cached(${Array.from(arguments).map(d => `'${d}'`).join(', ')}), which is not supported. Dependencies are automatically tracked, so you can just use ${'`@cached`'}`);
|
|
16
|
+
}
|
|
17
|
+
})(typeof target === 'object' && typeof key === 'string' && typeof descriptor === 'object' && arguments.length === 3) : {};
|
|
18
|
+
macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
|
|
19
|
+
if (!test) {
|
|
20
|
+
throw new Error(`The @cached decorator must be applied to getters. '${key}' is not a getter.`);
|
|
21
|
+
}
|
|
22
|
+
})(typeof descriptor.get === 'function') : {};
|
|
23
|
+
const caches = new WeakMap();
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
25
|
+
const getter = descriptor.get;
|
|
26
|
+
descriptor.get = function () {
|
|
27
|
+
if (!caches.has(this)) caches.set(this, createCache(getter.bind(this)));
|
|
28
|
+
return getValue(caches.get(this));
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export { cached };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createCache, getValue } from '@glimmer/tracking/primitives/cache';\n\nimport { assert } from '@warp-drive/build-config/macros';\n\nexport { transact, memoTransact, untracked } from './-private';\n\n// temporary so we can remove the glimmer and ember imports elsewhere\n// eslint-disable-next-line no-restricted-imports\nexport { dependentKeyCompat as compat } from '@ember/object/compat';\n\nexport function cached<T extends object, K extends keyof T & string>(\n target: T,\n key: K,\n descriptor: PropertyDescriptor\n) {\n // Error on `@cached()`, `@cached(...args)`, and `@cached propName = value;`\n assert(\n 'You attempted to use @cached(), which is not necessary nor supported. Remove the parentheses and you will be good to go!',\n target !== undefined\n );\n assert(\n `You attempted to use @cached on with ${arguments.length > 1 ? 'arguments' : 'an argument'} ( @cached(${Array.from(\n arguments\n )\n .map((d) => `'${d}'`)\n .join(\n ', '\n )}), which is not supported. Dependencies are automatically tracked, so you can just use ${'`@cached`'}`,\n typeof target === 'object' && typeof key === 'string' && typeof descriptor === 'object' && arguments.length === 3\n );\n assert(\n `The @cached decorator must be applied to getters. '${key}' is not a getter.`,\n typeof descriptor.get === 'function'\n );\n\n const caches = new WeakMap<object, object>();\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const getter = descriptor.get;\n descriptor.get = function () {\n if (!caches.has(this)) caches.set(this, createCache(getter.bind(this)));\n return getValue<unknown>(caches.get(this) as Parameters<typeof getValue>[0]);\n };\n}\n\nexport { createCache, getValue };\n"],"names":["cached","target","key","descriptor","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","test","Error","undefined","arguments","length","Array","from","map","d","join","get","caches","WeakMap","getter","has","set","createCache","bind","getValue"],"mappings":";;;;;;AAUO,SAASA,MAAMA,CACpBC,MAAS,EACTC,GAAM,EACNC,UAA8B,EAC9B;AACA;EACAC,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAC,IAAA,IAAA;AAAA,IAAA,IAAA,CAAAA,IAAA,EAAA;MAAA,MAAAC,IAAAA,KAAA,CACE,0HAA0H,CAAA,CAAA;AAAA,KAAA;GAC1HT,EAAAA,MAAM,KAAKU,SAAS,CAAA,GAAA,EAAA,CAAA;EAEtBP,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAC,IAAA,IAAA;AAAA,IAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,MAAA,MAAA,IAAAC,KAAA,CACG,CAAuCE,qCAAAA,EAAAA,SAAS,CAACC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,aAAc,CAAaC,WAAAA,EAAAA,KAAK,CAACC,IAAI,CAChHH,SACF,CAAC,CACEI,GAAG,CAAEC,CAAC,IAAM,IAAGA,CAAE,CAAA,CAAA,CAAE,CAAC,CACpBC,IAAI,CACH,IACF,CAAE,CAAA,uFAAA,EAAyF,WAAY,CAAC,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAC1G,OAAOjB,MAAM,KAAK,QAAQ,IAAI,OAAOC,GAAG,KAAK,QAAQ,IAAI,OAAOC,UAAU,KAAK,QAAQ,IAAIS,SAAS,CAACC,MAAM,KAAK,CAAC,CAAA,GAAA,EAAA,CAAA;EAEnHT,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAC,IAAA,IAAA;AAAA,IAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,MAAA,MAAA,IAAAC,KAAA,CACG,CAAqDR,mDAAAA,EAAAA,GAAI,CAAmB,kBAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAC7E,OAAOC,UAAU,CAACgB,GAAG,KAAK,UAAU,CAAA,GAAA,EAAA,CAAA;AAGtC,EAAA,MAAMC,MAAM,GAAG,IAAIC,OAAO,EAAkB,CAAA;AAC5C;AACA,EAAA,MAAMC,MAAM,GAAGnB,UAAU,CAACgB,GAAG,CAAA;EAC7BhB,UAAU,CAACgB,GAAG,GAAG,YAAY;IAC3B,IAAI,CAACC,MAAM,CAACG,GAAG,CAAC,IAAI,CAAC,EAAEH,MAAM,CAACI,GAAG,CAAC,IAAI,EAAEC,WAAW,CAACH,MAAM,CAACI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvE,OAAOC,QAAQ,CAAUP,MAAM,CAACD,GAAG,CAAC,IAAI,CAAmC,CAAC,CAAA;GAC7E,CAAA;AACH;;;;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ember-data/tracking",
|
|
3
3
|
"description": "Tracking Primitives for controlling change notification of Tracked properties when working with EmberData",
|
|
4
|
-
"version": "5.4.0-alpha.
|
|
4
|
+
"version": "5.4.0-alpha.70",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Chris Thoburn <runspired@users.noreply.github.com>",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"homepage": "https://github.com/emberjs/data",
|
|
14
14
|
"bugs": "https://github.com/emberjs/data/issues",
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
16
|
+
"node": ">= 22.1.0"
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"ember-addon"
|
|
@@ -22,58 +22,59 @@
|
|
|
22
22
|
"extends": "../../package.json"
|
|
23
23
|
},
|
|
24
24
|
"dependenciesMeta": {
|
|
25
|
-
"@
|
|
25
|
+
"@warp-drive/build-config": {
|
|
26
|
+
"injected": true
|
|
27
|
+
},
|
|
28
|
+
"@warp-drive/core-types": {
|
|
26
29
|
"injected": true
|
|
27
30
|
}
|
|
28
31
|
},
|
|
29
32
|
"dependencies": {
|
|
30
|
-
"@
|
|
31
|
-
"@
|
|
33
|
+
"@embroider/macros": "^1.16.1",
|
|
34
|
+
"@warp-drive/build-config": "0.0.0-alpha.7",
|
|
32
35
|
"ember-cli-babel": "^8.2.0"
|
|
33
36
|
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"ember-source": ">= 3.28.12",
|
|
39
|
+
"@warp-drive/core-types": "0.0.0-alpha.56"
|
|
40
|
+
},
|
|
34
41
|
"files": [
|
|
35
42
|
"unstable-preview-types",
|
|
36
43
|
"addon-main.cjs",
|
|
37
|
-
"
|
|
44
|
+
"dist",
|
|
38
45
|
"README.md",
|
|
39
46
|
"LICENSE.md",
|
|
40
47
|
"ember-data-logo-dark.svg",
|
|
41
48
|
"ember-data-logo-light.svg"
|
|
42
49
|
],
|
|
43
50
|
"scripts": {
|
|
44
|
-
"lint": "eslint . --quiet --cache --cache-strategy=content --
|
|
45
|
-
"build:
|
|
46
|
-
"
|
|
47
|
-
"_build": "bun run build:runtime && bun run build:types",
|
|
48
|
-
"_syncPnpm": "bun run sync-dependencies-meta-injected"
|
|
51
|
+
"lint": "eslint . --quiet --cache --cache-strategy=content --report-unused-disable-directives",
|
|
52
|
+
"build:pkg": "vite build;",
|
|
53
|
+
"sync-hardlinks": "bun run sync-dependencies-meta-injected"
|
|
49
54
|
},
|
|
50
55
|
"ember-addon": {
|
|
51
56
|
"main": "addon-main.cjs",
|
|
52
57
|
"type": "addon",
|
|
53
|
-
"version": 1
|
|
58
|
+
"version": 1,
|
|
59
|
+
"externals": [
|
|
60
|
+
"@ember/-internals",
|
|
61
|
+
"@ember/-internals/metal",
|
|
62
|
+
"@glimmer/validator"
|
|
63
|
+
]
|
|
54
64
|
},
|
|
55
65
|
"devDependencies": {
|
|
56
|
-
"@babel/
|
|
57
|
-
"@babel/
|
|
58
|
-
"@babel/
|
|
59
|
-
"@babel/plugin-transform-class-properties": "^7.24.1",
|
|
60
|
-
"@babel/plugin-transform-private-methods": "^7.24.1",
|
|
61
|
-
"@babel/plugin-transform-runtime": "^7.24.3",
|
|
62
|
-
"@babel/plugin-transform-typescript": "^7.24.4",
|
|
63
|
-
"@babel/preset-env": "^7.24.4",
|
|
66
|
+
"@babel/core": "^7.24.5",
|
|
67
|
+
"@babel/plugin-transform-typescript": "^7.24.5",
|
|
68
|
+
"@babel/preset-env": "^7.24.5",
|
|
64
69
|
"@babel/preset-typescript": "^7.24.1",
|
|
65
|
-
"@babel/runtime": "^7.24.4",
|
|
66
|
-
"@embroider/addon-dev": "^4.3.1",
|
|
67
70
|
"@glimmer/component": "^1.1.2",
|
|
68
71
|
"@glimmer/validator": "^0.92.0",
|
|
69
|
-
"@
|
|
70
|
-
"@
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"pnpm-sync-dependencies-meta-injected": "0.0.10",
|
|
74
|
-
"rollup": "^4.14.3",
|
|
72
|
+
"@warp-drive/core-types": "0.0.0-alpha.50",
|
|
73
|
+
"@warp-drive/internal-config": "5.4.0-alpha.70",
|
|
74
|
+
"ember-source": "~5.8.0",
|
|
75
|
+
"pnpm-sync-dependencies-meta-injected": "0.0.14",
|
|
75
76
|
"typescript": "^5.4.5",
|
|
76
|
-
"
|
|
77
|
+
"vite": "^5.2.11"
|
|
77
78
|
},
|
|
78
79
|
"ember": {
|
|
79
80
|
"edition": "octane"
|
|
@@ -81,7 +81,7 @@ declare module '@ember-data/tracking/-private' {
|
|
|
81
81
|
* @return a function that will invoke method in a transaction with any provided args and return its result
|
|
82
82
|
*/
|
|
83
83
|
export function memoTransact<T extends OpaqueFn>(method: T): (...args: unknown[]) => ReturnType<T>;
|
|
84
|
-
export const Signals: unique
|
|
84
|
+
export const Signals: "___(unique) Symbol(Signals)";
|
|
85
85
|
/**
|
|
86
86
|
* use to add a signal property to the prototype of something.
|
|
87
87
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"-private.d.ts","sourceRoot":"","sources":["../src/-private.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"-private.d.ts","sourceRoot":"","sources":["../src/-private.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAOzD;;;;;;;;;;;;;GAaG;AACH,KAAK,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAChD,KAAK,GAAG,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAoCrC;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAcjD;AA6GD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAQxD;AACD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAQvD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAKtE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAKrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAOjG;AAED,eAAO,MAAM,OAAO,+BAA+C,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,QA0B9E;AAED,MAAM,WAAW,MAAM;IACrB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,CAAC,EAAE,OAAO,CAAC;IAEX;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,GAAG,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,IAAI,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC;IAC/C;;;;;;;OAOG;IACH,SAAS,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC;IAEpD;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,QAKvE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA6B1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ1G;AAMD,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAe9F;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI3E,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI/D,OAAO,EAAE,kBAAkB,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEpE,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACjE,MAAM,EAAE,CAAC,EACT,GAAG,EAAE,CAAC,EACN,UAAU,EAAE,kBAAkB,QA6B/B;AAED,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC"}
|
package/addon/-private.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"-private.js","sources":["../src/-private.ts"],"sourcesContent":["import { tagForProperty } from '@ember/-internals/metal';\nimport { consumeTag, dirtyTag } from '@glimmer/validator';\n\nimport { DEPRECATE_COMPUTED_CHAINS } from '@warp-drive/build-config/deprecations';\nimport { DEBUG } from '@warp-drive/build-config/env';\n\n/**\n * This package provides primitives that allow powerful low-level\n * adjustments to change tracking notification behaviors.\n *\n * Typically you want to use these primitives when you want to divorce\n * property accesses on EmberData provided objects from the current\n * tracking context. Typically this sort of thing occurs when serializing\n * tracked data to send in a request: the data itself is often ancillary\n * to the thing which triggered the request in the first place and you\n * would not want to re-trigger the request for any update to the data.\n *\n * @module @ember-data/tracking\n * @main @ember-data/tracking\n */\ntype OpaqueFn = (...args: unknown[]) => unknown;\ntype Tag = { ref: null; t: boolean };\ntype Transaction = {\n cbs: Set<OpaqueFn>;\n props: Set<Tag | Signal>;\n sub: Set<Tag | Signal>;\n parent: Transaction | null;\n};\nlet TRANSACTION: Transaction | null = null;\n\nfunction createTransaction() {\n const transaction: Transaction = {\n cbs: new Set(),\n props: new Set(),\n sub: new Set(),\n parent: null,\n };\n if (TRANSACTION) {\n transaction.parent = TRANSACTION;\n }\n TRANSACTION = transaction;\n}\n\nfunction maybeConsume(tag: ReturnType<typeof tagForProperty> | null): void {\n if (tag) {\n consumeTag(tag);\n }\n}\n\nfunction maybeDirty(tag: ReturnType<typeof tagForProperty> | null): void {\n if (tag) {\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(tag);\n }\n}\n\n/**\n * If there is a current transaction, ensures that the relevant tag (and any\n * array computed chains symbols, if applicable) will be consumed during the\n * transaction.\n *\n * If there is no current transaction, will consume the tag(s) immediately.\n *\n * @internal\n * @param obj\n */\nexport function subscribe(obj: Tag | Signal): void {\n if (TRANSACTION) {\n TRANSACTION.sub.add(obj);\n } else if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeConsume(obj['[]']);\n maybeConsume(obj['@length']);\n }\n consumeTag(obj.tag);\n } else {\n obj.ref;\n }\n}\n\nfunction updateRef(obj: Tag | Signal): void {\n if (DEBUG) {\n try {\n if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeDirty(obj['[]']);\n maybeDirty(obj['@length']);\n }\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(obj.tag);\n } else {\n obj.ref = null;\n }\n } catch (e: unknown) {\n if (e instanceof Error) {\n if (e.message.includes('You attempted to update `undefined`')) {\n // @ts-expect-error\n const key = `<${obj._debug_base}>.${obj.key}`;\n e.message = e.message.replace('You attempted to update `undefined`', `You attempted to update ${key}`);\n e.stack = e.stack?.replace('You attempted to update `undefined`', `You attempted to update ${key}`);\n\n const lines = e.stack?.split(`\\n`);\n const finalLines: string[] = [];\n let lastFile: string | null = null;\n\n lines?.forEach((line) => {\n if (line.trim().startsWith('at ')) {\n // get the last string in the line which contains the code source location\n const location = line.split(' ').at(-1)!;\n // remove the line and char offset info\n\n if (location.includes(':')) {\n const parts = location.split(':');\n parts.pop();\n parts.pop();\n const file = parts.join(':');\n if (file !== lastFile) {\n lastFile = file;\n finalLines.push('');\n }\n }\n finalLines.push(line);\n }\n });\n\n const splitstr = '`undefined` was first used:';\n const parts = e.message.split(splitstr);\n parts.splice(1, 0, `Original Stack\\n=============\\n${finalLines.join(`\\n`)}\\n\\n\\`${key}\\` was first used:`);\n\n e.message = parts.join('');\n }\n }\n throw e;\n }\n } else {\n if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeDirty(obj['[]']);\n maybeDirty(obj['@length']);\n }\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(obj.tag);\n } else {\n obj.ref = null;\n }\n }\n}\n\nfunction flushTransaction() {\n const transaction = TRANSACTION!;\n TRANSACTION = transaction.parent;\n transaction.cbs.forEach((cb) => {\n cb();\n });\n transaction.props.forEach((obj) => {\n // mark this mutation as part of a transaction\n obj.t = true;\n updateRef(obj);\n });\n transaction.sub.forEach((obj) => {\n if ('tag' in obj) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n maybeConsume(obj['[]']);\n maybeConsume(obj['@length']);\n }\n consumeTag(obj.tag);\n } else {\n obj.ref;\n }\n });\n}\nasync function untrack() {\n const transaction = TRANSACTION!;\n TRANSACTION = transaction.parent;\n\n // defer writes\n await Promise.resolve();\n transaction.cbs.forEach((cb) => {\n cb();\n });\n transaction.props.forEach((obj) => {\n // mark this mutation as part of a transaction\n obj.t = true;\n updateRef(obj);\n });\n}\n\nexport function addToTransaction(obj: Tag | Signal): void {\n if (TRANSACTION) {\n TRANSACTION.props.add(obj);\n } else {\n updateRef(obj);\n }\n}\nexport function addTransactionCB(method: OpaqueFn): void {\n if (TRANSACTION) {\n TRANSACTION.cbs.add(method);\n } else {\n method();\n }\n}\n\n/**\n * Run `method` without subscribing to any tracked properties\n * controlled by EmberData.\n *\n * This should rarely be used except by libraries that really\n * know what they are doing. It is most useful for wrapping\n * certain kinds of fetch/query logic from within a `Resource`\n * `hook` or other similar pattern.\n *\n * @function untracked\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return result of invoking method\n */\nexport function untracked<T extends OpaqueFn>(method: T): ReturnType<T> {\n createTransaction();\n const ret = method();\n void untrack();\n return ret as ReturnType<T>;\n}\n\n/**\n * Run the method, subscribing to any tracked properties\n * managed by EmberData that were accessed or written during\n * the method's execution as per-normal but while allowing\n * interleaving of reads and writes.\n *\n * This is useful when for instance you want to perform\n * a mutation based on existing state that must be read first.\n *\n * @function transact\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return result of invoking method\n */\nexport function transact<T extends OpaqueFn>(method: T): ReturnType<T> {\n createTransaction();\n const ret = method();\n flushTransaction();\n return ret as ReturnType<T>;\n}\n\n/**\n * A helpful utility for creating a new function that\n * always runs in a transaction. E.G. this \"memoizes\"\n * calling `transact(fn)`, currying args as necessary.\n *\n * @method memoTransact\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return a function that will invoke method in a transaction with any provided args and return its result\n */\nexport function memoTransact<T extends OpaqueFn>(method: T): (...args: unknown[]) => ReturnType<T> {\n return function (...args: unknown[]) {\n createTransaction();\n const ret = method(...args);\n flushTransaction();\n return ret as ReturnType<T>;\n };\n}\n\nexport const Signals = Symbol('Signals');\n\n/**\n * use to add a signal property to the prototype of something.\n *\n * First arg is the thing to define on\n * Second arg is the property name\n * Third agg is the initial value of the property if any.\n *\n * for instance\n *\n * ```ts\n * class Model {}\n * defineSignal(Model.prototype, 'isLoading', false);\n * ```\n *\n * This is sort of like using a stage-3 decorator but works today\n * while we are still on legacy decorators.\n *\n * e.g. it is equivalent to\n *\n * ```ts\n * class Model {\n * @signal accessor isLoading = false;\n * }\n * ```\n *\n * @internal\n */\nexport function defineSignal<T extends object>(obj: T, key: string, v?: unknown) {\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: false,\n get(this: T & { [Signals]: Map<string, Signal> }) {\n const signals = (this[Signals] = this[Signals] || new Map());\n const existing = signals.has(key);\n const _signal = entangleSignal(signals, this, key);\n if (!existing && v !== undefined) {\n _signal.lastValue = v;\n }\n return _signal.lastValue;\n },\n set(this: T & { [Signals]: Map<string, Signal> }, value: unknown) {\n const signals = (this[Signals] = this[Signals] || new Map());\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(this, key);\n signals.set(key, _signal);\n }\n if (_signal.lastValue !== value) {\n _signal.lastValue = value;\n addToTransaction(_signal);\n }\n },\n });\n}\n\nexport interface Signal {\n /**\n * Key on the associated object\n * @internal\n */\n key: string;\n _debug_base?: string;\n\n /**\n * Whether this signal is part of an active transaction.\n * @internal\n */\n t: boolean;\n\n /**\n * Whether to \"bust\" the lastValue cache\n * @internal\n */\n shouldReset: boolean;\n\n /**\n * The framework specific \"signal\" e.g. glimmer \"tracked\"\n * or starbeam \"cell\" to consume/invalidate when appropriate.\n *\n * @internal\n */\n tag: ReturnType<typeof tagForProperty>;\n\n /**\n * In classic ember, arrays must entangle a `[]` symbol\n * in addition to any other tag in order for array chains to work.\n *\n * Note, this symbol MUST be the one that ember itself generates\n *\n * @internal\n */\n '[]': ReturnType<typeof tagForProperty> | null;\n /**\n * In classic ember, arrays must entangle a `@length` symbol\n * in addition to any other tag in order for array chains to work.\n *\n * Note, this symbol MUST be the one that ember itself generates\n *\n * @internal\n */\n '@length': ReturnType<typeof tagForProperty> | null;\n\n /**\n * The lastValue computed for this signal when\n * a signal is also used for storage.\n * @internal\n */\n lastValue: unknown;\n}\n\nexport function createArrayTags<T extends object>(obj: T, signal: Signal) {\n if (DEPRECATE_COMPUTED_CHAINS) {\n signal['[]'] = tagForProperty(obj, '[]');\n signal['@length'] = tagForProperty(obj, 'length');\n }\n}\n\n/**\n * Create a signal for the key/object pairing.\n *\n * @internal\n * @param obj Object we're creating the signal on\n * @param key Key to create the signal for\n * @return the signal\n */\nexport function createSignal<T extends object>(obj: T, key: string): Signal {\n const _signal: Signal = {\n key,\n tag: tagForProperty(obj, key),\n\n t: false,\n shouldReset: false,\n '[]': null,\n '@length': null,\n lastValue: undefined,\n };\n\n if (DEBUG) {\n // eslint-disable-next-line no-inner-declarations\n function tryGet<T1 = string>(prop: string): T1 | undefined {\n try {\n return obj[prop as keyof typeof obj] as unknown as T1;\n } catch {\n return;\n }\n }\n const modelName =\n tryGet('$type') ?? tryGet('modelName') ?? tryGet<{ modelName?: string }>('constructor')?.modelName ?? '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const className = obj.constructor?.name ?? obj.toString?.() ?? 'unknown';\n _signal._debug_base = `${className}${modelName && !className.startsWith('SchemaRecord') ? `:${modelName}` : ''}`;\n }\n\n return _signal;\n}\n\n/**\n * Create a signal for the key/object pairing and subscribes to the signal.\n *\n * Use when you need to ensure a signal exists and is subscribed to.\n *\n * @internal\n * @param signals Map of signals\n * @param obj Object we're creating the signal on\n * @param key Key to create the signal for\n * @return the signal\n */\nexport function entangleSignal<T extends object>(signals: Map<string, Signal>, obj: T, key: string): Signal {\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(obj, key);\n signals.set(key, _signal);\n }\n subscribe(_signal);\n return _signal;\n}\n\ninterface Signaler {\n [Signals]: Map<string, Signal>;\n}\n\nexport function getSignal<T extends object>(obj: T, key: string, initialState: boolean): Signal {\n let signals = (obj as Signaler)[Signals];\n\n if (!signals) {\n signals = new Map();\n (obj as Signaler)[Signals] = signals;\n }\n\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(obj, key);\n _signal.shouldReset = initialState;\n signals.set(key, _signal);\n }\n return _signal;\n}\n\nexport function peekSignal<T extends object>(obj: T, key: string): Signal | undefined {\n const signals = (obj as Signaler)[Signals];\n if (signals) {\n return signals.get(key);\n }\n}\n"],"names":["TRANSACTION","createTransaction","transaction","cbs","Set","props","sub","parent","maybeConsume","tag","consumeTag","maybeDirty","dirtyTag","subscribe","obj","add","macroCondition","getOwnConfig","deprecations","DEPRECATE_COMPUTED_CHAINS","ref","updateRef","env","DEBUG","e","Error","message","includes","key","_debug_base","replace","stack","lines","split","finalLines","lastFile","forEach","line","trim","startsWith","location","at","parts","pop","file","join","push","splitstr","splice","flushTransaction","cb","t","untrack","Promise","resolve","addToTransaction","addTransactionCB","method","untracked","ret","transact","memoTransact","args","Signals","Symbol","defineSignal","v","Object","defineProperty","enumerable","configurable","get","signals","Map","existing","has","_signal","entangleSignal","undefined","lastValue","set","value","createSignal","createArrayTags","signal","tagForProperty","shouldReset","tryGet","prop","modelName","className","constructor","name","toString","getSignal","initialState","peekSignal"],"mappings":"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"}
|
package/addon/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { assert } from '@ember/debug';
|
|
2
|
-
import { createCache, getValue } from '@glimmer/tracking/primitives/cache';
|
|
3
|
-
export { createCache, getValue } from '@glimmer/tracking/primitives/cache';
|
|
4
|
-
export { memoTransact, transact, untracked } from "./-private";
|
|
5
|
-
export { dependentKeyCompat as compat } from '@ember/object/compat';
|
|
6
|
-
function cached(target, key, descriptor) {
|
|
7
|
-
// Error on `@cached()`, `@cached(...args)`, and `@cached propName = value;`
|
|
8
|
-
assert('You attempted to use @cached(), which is not necessary nor supported. Remove the parentheses and you will be good to go!', target !== undefined);
|
|
9
|
-
assert(`You attempted to use @cached on with ${arguments.length > 1 ? 'arguments' : 'an argument'} ( @cached(${Array.from(arguments).map(d => `'${d}'`).join(', ')}), which is not supported. Dependencies are automatically tracked, so you can just use ${'`@cached`'}`, typeof target === 'object' && typeof key === 'string' && typeof descriptor === 'object' && arguments.length === 3);
|
|
10
|
-
assert(`The @cached decorator must be applied to getters. '${key}' is not a getter.`, typeof descriptor.get === 'function');
|
|
11
|
-
const caches = new WeakMap();
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
13
|
-
const getter = descriptor.get;
|
|
14
|
-
descriptor.get = function () {
|
|
15
|
-
if (!caches.has(this)) caches.set(this, createCache(getter.bind(this)));
|
|
16
|
-
return getValue(caches.get(this));
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export { cached };
|
package/addon/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { createCache, getValue } from '@glimmer/tracking/primitives/cache';\n\nexport { transact, memoTransact, untracked } from './-private';\n\n// temporary so we can remove the glimmer and ember imports elsewhere\n// eslint-disable-next-line no-restricted-imports\nexport { dependentKeyCompat as compat } from '@ember/object/compat';\n\nexport function cached<T extends object, K extends keyof T & string>(\n target: T,\n key: K,\n descriptor: PropertyDescriptor\n) {\n // Error on `@cached()`, `@cached(...args)`, and `@cached propName = value;`\n assert(\n 'You attempted to use @cached(), which is not necessary nor supported. Remove the parentheses and you will be good to go!',\n target !== undefined\n );\n assert(\n `You attempted to use @cached on with ${arguments.length > 1 ? 'arguments' : 'an argument'} ( @cached(${Array.from(\n arguments\n )\n .map((d) => `'${d}'`)\n .join(\n ', '\n )}), which is not supported. Dependencies are automatically tracked, so you can just use ${'`@cached`'}`,\n typeof target === 'object' && typeof key === 'string' && typeof descriptor === 'object' && arguments.length === 3\n );\n assert(\n `The @cached decorator must be applied to getters. '${key}' is not a getter.`,\n typeof descriptor.get === 'function'\n );\n\n const caches = new WeakMap<object, object>();\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const getter = descriptor.get;\n descriptor.get = function () {\n if (!caches.has(this)) caches.set(this, createCache(getter.bind(this)));\n return getValue<unknown>(caches.get(this) as Parameters<typeof getValue>[0]);\n };\n}\n\nexport { createCache, getValue };\n"],"names":["cached","target","key","descriptor","assert","undefined","arguments","length","Array","from","map","d","join","get","caches","WeakMap","getter","has","set","createCache","bind","getValue"],"mappings":";;;;;;AASO,SAASA,MAAMA,CACpBC,MAAS,EACTC,GAAM,EACNC,UAA8B,EAC9B;AACA;AACAC,EAAAA,MAAM,CACJ,0HAA0H,EAC1HH,MAAM,KAAKI,SACb,CAAC,CAAA;EACDD,MAAM,CACH,CAAuCE,qCAAAA,EAAAA,SAAS,CAACC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,aAAc,CAAaC,WAAAA,EAAAA,KAAK,CAACC,IAAI,CAChHH,SACF,CAAC,CACEI,GAAG,CAAEC,CAAC,IAAM,CAAA,CAAA,EAAGA,CAAE,CAAA,CAAA,CAAE,CAAC,CACpBC,IAAI,CACH,IACF,CAAE,CAAA,uFAAA,EAAyF,WAAY,CAAA,CAAC,EAC1G,OAAOX,MAAM,KAAK,QAAQ,IAAI,OAAOC,GAAG,KAAK,QAAQ,IAAI,OAAOC,UAAU,KAAK,QAAQ,IAAIG,SAAS,CAACC,MAAM,KAAK,CAClH,CAAC,CAAA;EACDH,MAAM,CACH,CAAqDF,mDAAAA,EAAAA,GAAI,CAAmB,kBAAA,CAAA,EAC7E,OAAOC,UAAU,CAACU,GAAG,KAAK,UAC5B,CAAC,CAAA;AAED,EAAA,MAAMC,MAAM,GAAG,IAAIC,OAAO,EAAkB,CAAA;AAC5C;AACA,EAAA,MAAMC,MAAM,GAAGb,UAAU,CAACU,GAAG,CAAA;EAC7BV,UAAU,CAACU,GAAG,GAAG,YAAY;IAC3B,IAAI,CAACC,MAAM,CAACG,GAAG,CAAC,IAAI,CAAC,EAAEH,MAAM,CAACI,GAAG,CAAC,IAAI,EAAEC,WAAW,CAACH,MAAM,CAACI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvE,OAAOC,QAAQ,CAAUP,MAAM,CAACD,GAAG,CAAC,IAAI,CAAmC,CAAC,CAAA;GAC7E,CAAA;AACH;;;;"}
|