@actualwave/deferred-data-access 2.0.1 → 2.1.1
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/README.md +400 -27
- package/SKILL.md +106 -0
- package/command/index.d.ts.map +1 -0
- package/command/index.es.js +98 -0
- package/command/index.es.js.map +1 -0
- package/command/index.js +102 -4
- package/command/index.js.map +1 -1
- package/command/package.json +4 -1
- package/command/src/command-chain.d.ts +8 -1
- package/command/src/command-chain.d.ts.map +1 -0
- package/command/src/command-chain.js +9 -0
- package/command/src/command-chain.js.map +1 -1
- package/command/src/command-handler.d.ts.map +1 -0
- package/command/src/command.d.ts +2 -2
- package/command/src/command.d.ts.map +1 -0
- package/command/src/command.js +5 -6
- package/command/src/command.js.map +1 -1
- package/core/core.d.ts.map +1 -0
- package/core/core.js +23 -25
- package/core/core.js.map +1 -1
- package/core/index.d.ts.map +1 -0
- package/deferred-data-access.umd.js +2 -0
- package/deferred-data-access.umd.js.map +1 -0
- package/index.d.ts.map +1 -0
- package/{dist/deferred-data-access.js → index.es.js} +199 -138
- package/index.es.js.map +1 -0
- package/index.js +627 -2
- package/index.js.map +1 -1
- package/interface/index.d.ts.map +1 -0
- package/interface/index.es.js +380 -0
- package/interface/index.es.js.map +1 -0
- package/interface/index.js +396 -7
- package/interface/index.js.map +1 -1
- package/interface/package.json +4 -1
- package/interface/src/handshake.d.ts.map +1 -0
- package/interface/src/handshake.js +6 -4
- package/interface/src/handshake.js.map +1 -1
- package/interface/src/helpers.d.ts.map +1 -0
- package/interface/src/intialize.d.ts +5 -2
- package/interface/src/intialize.d.ts.map +1 -0
- package/interface/src/intialize.js +37 -57
- package/interface/src/intialize.js.map +1 -1
- package/interface/src/request.d.ts +3 -2
- package/interface/src/request.d.ts.map +1 -0
- package/interface/src/request.js +39 -29
- package/interface/src/request.js.map +1 -1
- package/interface/src/types.d.ts.map +1 -0
- package/interface/src/utils.d.ts +2 -2
- package/interface/src/utils.d.ts.map +1 -0
- package/interface/src/utils.js +44 -29
- package/interface/src/utils.js.map +1 -1
- package/package.json +8 -6
- package/proxy/index.d.ts.map +1 -0
- package/proxy/index.es.js +144 -0
- package/proxy/index.es.js.map +1 -0
- package/proxy/index.js +155 -5
- package/proxy/index.js.map +1 -1
- package/proxy/package.json +4 -1
- package/proxy/src/command.d.ts.map +1 -0
- package/proxy/src/proxy.d.ts +2 -2
- package/proxy/src/proxy.d.ts.map +1 -0
- package/proxy/src/proxy.js +13 -3
- package/proxy/src/proxy.js.map +1 -1
- package/proxy/src/traps.d.ts +1 -1
- package/proxy/src/traps.d.ts.map +1 -0
- package/proxy/src/traps.js +4 -14
- package/proxy/src/traps.js.map +1 -1
- package/proxy/src/types.d.ts.map +1 -0
- package/proxy/src/utils.d.ts +6 -0
- package/proxy/src/utils.d.ts.map +1 -0
- package/proxy/src/utils.js +11 -5
- package/proxy/src/utils.js.map +1 -1
- package/record/index.d.ts.map +1 -0
- package/record/index.es.js +26 -0
- package/record/index.es.js.map +1 -0
- package/record/index.js +31 -2
- package/record/index.js.map +1 -1
- package/record/package.json +4 -1
- package/record/record.d.ts +2 -2
- package/record/record.d.ts.map +1 -0
- package/record/record.js +9 -3
- package/record/record.js.map +1 -1
- package/resource/index.d.ts +1 -0
- package/resource/index.d.ts.map +1 -0
- package/resource/index.es.js +191 -0
- package/resource/index.es.js.map +1 -0
- package/resource/index.js +206 -6
- package/resource/index.js.map +1 -1
- package/resource/package.json +4 -1
- package/resource/src/default-resource-pool.d.ts +1 -0
- package/resource/src/default-resource-pool.d.ts.map +1 -0
- package/resource/src/default-resource-pool.js +8 -5
- package/resource/src/default-resource-pool.js.map +1 -1
- package/resource/src/finalization-registry.d.ts +13 -0
- package/resource/src/finalization-registry.d.ts.map +1 -0
- package/resource/src/finalization-registry.js +18 -0
- package/resource/src/finalization-registry.js.map +1 -0
- package/resource/src/resource-pool-registry.d.ts +1 -0
- package/resource/src/resource-pool-registry.d.ts.map +1 -0
- package/resource/src/resource-pool-registry.js +10 -8
- package/resource/src/resource-pool-registry.js.map +1 -1
- package/resource/src/resource-pool.d.ts +8 -1
- package/resource/src/resource-pool.d.ts.map +1 -0
- package/resource/src/resource-pool.js +29 -17
- package/resource/src/resource-pool.js.map +1 -1
- package/resource/src/resource.d.ts +1 -1
- package/resource/src/resource.d.ts.map +1 -0
- package/resource/src/resource.js +3 -2
- package/resource/src/resource.js.map +1 -1
- package/resource/src/utils.d.ts +1 -1
- package/resource/src/utils.d.ts.map +1 -0
- package/resource/src/utils.js +9 -1
- package/resource/src/utils.js.map +1 -1
- package/utils/index.d.ts.map +1 -0
- package/utils/index.es.js +48 -0
- package/utils/index.es.js.map +1 -0
- package/utils/index.js +54 -3
- package/utils/index.js.map +1 -1
- package/utils/package.json +4 -1
- package/utils/src/types.d.ts +3 -3
- package/utils/src/types.d.ts.map +1 -0
- package/utils/src/utils.d.ts +18 -2
- package/utils/src/utils.d.ts.map +1 -0
- package/utils/src/utils.js +28 -4
- package/utils/src/utils.js.map +1 -1
- package/dist/deferred-data-access.js.map +0 -1
- package/dist/deferred-data-access.umd.js +0 -2
- package/dist/deferred-data-access.umd.js.map +0 -1
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var hasOwn = require('@actualwave/has-own');
|
|
6
|
-
var weakStorage = require('@actualwave/weak-storage');
|
|
1
|
+
import { WeakValueMap } from '@actualwave/weak-storage';
|
|
7
2
|
|
|
8
3
|
class Command {
|
|
9
4
|
constructor(type, name, value, context) {
|
|
@@ -11,6 +6,8 @@ class Command {
|
|
|
11
6
|
this.name = name;
|
|
12
7
|
this.value = value;
|
|
13
8
|
this.context = context;
|
|
9
|
+
Object.defineProperty(this, 'type', { value: type, writable: false, configurable: false });
|
|
10
|
+
Object.defineProperty(this, 'name', { value: name, writable: false, configurable: false });
|
|
14
11
|
}
|
|
15
12
|
toObject(includeContext = false) {
|
|
16
13
|
const { type, name, value, context } = this;
|
|
@@ -23,12 +20,9 @@ class Command {
|
|
|
23
20
|
}
|
|
24
21
|
toJSON(includeContext = false) {
|
|
25
22
|
const { type, name, value, context } = this;
|
|
26
|
-
return
|
|
27
|
-
type,
|
|
28
|
-
name,
|
|
29
|
-
value,
|
|
30
|
-
includeContext ? context : undefined,
|
|
31
|
-
]);
|
|
23
|
+
return includeContext
|
|
24
|
+
? JSON.stringify([type, name, value, context])
|
|
25
|
+
: JSON.stringify([type, name, value]);
|
|
32
26
|
}
|
|
33
27
|
static fromJSON(jsonString) {
|
|
34
28
|
const [type, name, value, context] = JSON.parse(jsonString);
|
|
@@ -76,6 +70,15 @@ class CommandChain extends Command {
|
|
|
76
70
|
} while (node);
|
|
77
71
|
return result;
|
|
78
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Returns a new CommandChain that is identical to this one but with the
|
|
75
|
+
* `prev` link severed, rather than mutating the existing instance in-place.
|
|
76
|
+
* Use this instead of `delete command.prev` to avoid corrupting shared chain
|
|
77
|
+
* references held by other code.
|
|
78
|
+
*/
|
|
79
|
+
withoutPrev() {
|
|
80
|
+
return new CommandChain(undefined, this.type, this.name, this.value, this.context);
|
|
81
|
+
}
|
|
79
82
|
static fromCommand({ type, name, value, context }, prev) {
|
|
80
83
|
return new CommandChain(prev, type, name, value, context);
|
|
81
84
|
}
|
|
@@ -93,17 +96,34 @@ const createCommandHandler = ({ handlers, defaultHandler, }) => (command, ...arg
|
|
|
93
96
|
return Promise.resolve(undefined);
|
|
94
97
|
};
|
|
95
98
|
|
|
99
|
+
// Subtract a small random offset so IDs generated in the same millisecond
|
|
100
|
+
// across separate module loads remain unique.
|
|
96
101
|
const DATE_NOW = Date.now() - Math.floor(Math.random() * 1000);
|
|
97
102
|
let index = 0;
|
|
98
|
-
|
|
103
|
+
var ReservedPropertyNames;
|
|
99
104
|
(function (ReservedPropertyNames) {
|
|
100
105
|
ReservedPropertyNames["THEN"] = "then";
|
|
101
106
|
ReservedPropertyNames["CATCH"] = "catch";
|
|
102
|
-
})(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
+
})(ReservedPropertyNames || (ReservedPropertyNames = {}));
|
|
108
|
+
/**
|
|
109
|
+
* Returns true only for string property names that match reserved Promise
|
|
110
|
+
* method names. Symbol names are never reserved — they always pass through
|
|
111
|
+
* to the proxy handler.
|
|
112
|
+
*/
|
|
113
|
+
const isReservedPropertyName = (name) => typeof name === 'string' &&
|
|
114
|
+
(name === ReservedPropertyNames.THEN || name === ReservedPropertyNames.CATCH);
|
|
115
|
+
/**
|
|
116
|
+
* Returns a rejected Promise. Throws the message as a value (not an Error
|
|
117
|
+
* instance) to preserve the original behaviour expected by callers.
|
|
118
|
+
*/
|
|
119
|
+
const reject = (message) => Promise.reject(message);
|
|
120
|
+
/**
|
|
121
|
+
* Returns a function that generates monotonically increasing unique IDs.
|
|
122
|
+
* All generators in this module share the same counter so IDs are globally
|
|
123
|
+
* unique within a single process.
|
|
124
|
+
*
|
|
125
|
+
* @param key - Optional namespace prefix included in every generated ID.
|
|
126
|
+
*/
|
|
107
127
|
const createUIDGenerator = (key = '') => {
|
|
108
128
|
const prefix = `${key ? `${key}/` : ''}${DATE_NOW}/`;
|
|
109
129
|
return () => `${prefix}${++index};`;
|
|
@@ -112,10 +132,17 @@ const generateId = createUIDGenerator();
|
|
|
112
132
|
class IdOwner {
|
|
113
133
|
constructor(id = generateId()) {
|
|
114
134
|
this.id = id;
|
|
135
|
+
// Prevent external mutation while remaining compatible with subclasses
|
|
136
|
+
// that call super() without explicitly sealing.
|
|
137
|
+
Object.defineProperty(this, 'id', {
|
|
138
|
+
value: this.id,
|
|
139
|
+
writable: false,
|
|
140
|
+
configurable: false,
|
|
141
|
+
});
|
|
115
142
|
}
|
|
116
143
|
}
|
|
117
144
|
|
|
118
|
-
|
|
145
|
+
var ProxyCommand;
|
|
119
146
|
(function (ProxyCommand) {
|
|
120
147
|
ProxyCommand["GET"] = "P:get";
|
|
121
148
|
ProxyCommand["SET"] = "P:set";
|
|
@@ -123,10 +150,10 @@ exports.ProxyCommand = void 0;
|
|
|
123
150
|
ProxyCommand["DELETE_PROPERTY"] = "P:del";
|
|
124
151
|
// If proxy works in lazy mode and APPLY command has previous GET command, this will be generated.
|
|
125
152
|
ProxyCommand["METHOD_CALL"] = "P:call";
|
|
126
|
-
})(
|
|
153
|
+
})(ProxyCommand || (ProxyCommand = {}));
|
|
127
154
|
const generateProxyCommand = (head, type, name, value, context, lazy) => {
|
|
128
|
-
if (type ===
|
|
129
|
-
return new CommandChain(head.prev,
|
|
155
|
+
if (type === ProxyCommand.APPLY && lazy && head?.type === ProxyCommand.GET) {
|
|
156
|
+
return new CommandChain(head.prev, ProxyCommand.METHOD_CALL, head.name, value, head.context);
|
|
130
157
|
}
|
|
131
158
|
return new CommandChain(head, type, name, value, context);
|
|
132
159
|
};
|
|
@@ -147,41 +174,58 @@ const API_PROP = Symbol('P:api');
|
|
|
147
174
|
const wrapWithProxy = (
|
|
148
175
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
149
176
|
target, traps, api = {}) => {
|
|
177
|
+
// Always use a function as the wrapper so the Proxy can intercept `apply`.
|
|
178
|
+
// For non-function targets the wrapper body is intentionally empty — it is
|
|
179
|
+
// never actually called; the apply trap intercepts all invocations first.
|
|
150
180
|
const wrapper = Object.assign(typeof target === 'function'
|
|
151
181
|
? function $RequestFn(...args) {
|
|
152
182
|
return target.apply(this, args);
|
|
153
183
|
}
|
|
154
184
|
: function $Request() {
|
|
155
|
-
|
|
185
|
+
/* intentionally empty — apply trap handles all calls */
|
|
156
186
|
}, {
|
|
157
187
|
target,
|
|
158
188
|
[API_PROP]: { getTarget: () => target, ...api },
|
|
159
189
|
});
|
|
160
190
|
return new Proxy(wrapper, traps);
|
|
161
191
|
};
|
|
162
|
-
const isWrappedWithProxy = (obj) =>
|
|
163
|
-
|
|
192
|
+
const isWrappedWithProxy = (obj) => obj != null && typeof obj === 'object' || typeof obj === 'function'
|
|
193
|
+
? !!(obj && obj[API_PROP])
|
|
194
|
+
: false;
|
|
195
|
+
const unwrapProxy = (obj) => {
|
|
196
|
+
if (obj != null && obj[API_PROP]) {
|
|
197
|
+
return obj[API_PROP].getTarget();
|
|
198
|
+
}
|
|
199
|
+
return obj;
|
|
200
|
+
};
|
|
164
201
|
|
|
165
|
-
const isNameExcluded = (name) => name === API_PROP ||
|
|
202
|
+
const isNameExcluded = (name) => name === API_PROP || Object.hasOwn(EXCLUSIONS, name);
|
|
166
203
|
const isNameSymbol = (name) => typeof name === 'symbol';
|
|
204
|
+
/**
|
|
205
|
+
* Walks a CommandChain and resolves it against a live target.
|
|
206
|
+
* Only GET and APPLY commands are supported — all other command types
|
|
207
|
+
* (SET, DELETE_PROPERTY, METHOD_CALL) are write/side-effect operations
|
|
208
|
+
* that cannot be replayed safely and will throw.
|
|
209
|
+
*/
|
|
167
210
|
const followCommandChain = async (head,
|
|
168
211
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
169
212
|
context) => {
|
|
170
213
|
let target = context;
|
|
171
|
-
if (
|
|
214
|
+
if (context === undefined) {
|
|
172
215
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
173
216
|
target = head.prev
|
|
174
217
|
? await followCommandChain(head.prev)
|
|
175
|
-
: head.context;
|
|
218
|
+
: await head.context;
|
|
176
219
|
}
|
|
177
220
|
const { type, name, value } = head;
|
|
178
221
|
switch (type) {
|
|
179
|
-
case
|
|
222
|
+
case ProxyCommand.GET:
|
|
180
223
|
return target[name];
|
|
181
|
-
case
|
|
224
|
+
case ProxyCommand.APPLY:
|
|
182
225
|
return target.apply(getMethodCallContext(head), value);
|
|
226
|
+
default:
|
|
227
|
+
throw new Error(`Command "${type}" cannot be followed. Only ProxyCommand.GET and ProxyCommand.APPLY are supported by followCommandChain.`);
|
|
183
228
|
}
|
|
184
|
-
throw new Error(`Unknown command "${type}" cannot be followed, only ProxyCommand.GET and APPLY are allowed.`);
|
|
185
229
|
};
|
|
186
230
|
|
|
187
231
|
const createGetTrap = (handler) => (wrapper, name) => {
|
|
@@ -190,47 +234,36 @@ const createGetTrap = (handler) => (wrapper, name) => {
|
|
|
190
234
|
return wrapper[name];
|
|
191
235
|
}
|
|
192
236
|
// We expect that user of the lib will wrap with Proxy explicitly whatever they want
|
|
193
|
-
return handler(
|
|
237
|
+
return handler(ProxyCommand.GET, name, undefined, target);
|
|
194
238
|
};
|
|
195
239
|
const createApplyTrap = (handler) => ({ target }, thisValue, args) => {
|
|
196
240
|
// thisValue is being ignored for now
|
|
197
241
|
// target is a function that should be applied
|
|
198
|
-
return handler(
|
|
242
|
+
return handler(ProxyCommand.APPLY, undefined, args, target);
|
|
199
243
|
};
|
|
200
244
|
const createSetTrap = (handler) => ({ target }, name, value) => {
|
|
201
245
|
if (isNameExcluded(name)) {
|
|
202
246
|
return false;
|
|
203
247
|
}
|
|
204
|
-
|
|
205
|
-
if (isNameSymbol(name)) {
|
|
206
|
-
target.then((context: any) => {
|
|
207
|
-
context[name] = value;
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
return false;
|
|
211
|
-
}
|
|
212
|
-
*/
|
|
213
|
-
handler(exports.ProxyCommand.SET, name, value, target);
|
|
248
|
+
handler(ProxyCommand.SET, name, value, target);
|
|
214
249
|
return true;
|
|
215
250
|
};
|
|
216
251
|
const createDeletePropertyTrap = (handler) => (wrapper, name) => {
|
|
217
252
|
if (isNameExcluded(name)) {
|
|
218
253
|
return false;
|
|
219
254
|
}
|
|
220
|
-
handler(
|
|
255
|
+
handler(ProxyCommand.DELETE_PROPERTY, name, undefined, wrapper.target);
|
|
221
256
|
return true;
|
|
222
257
|
};
|
|
223
258
|
const proxyHasTrap = (wrapper, name) => {
|
|
224
259
|
if (isNameExcluded(name)) {
|
|
225
260
|
return wrapper[name];
|
|
226
261
|
}
|
|
227
|
-
//
|
|
228
|
-
//
|
|
262
|
+
// Because of this, Promise does not call ProxyWrapper.then() and just returns it.
|
|
263
|
+
// If changed to true, it will subscribe to ProxyWrapper.then() and wait for it to resolve.
|
|
229
264
|
return false;
|
|
230
265
|
};
|
|
231
266
|
const proxyOwnKeysTrap = () => Object.getOwnPropertyNames(EXCLUSIONS);
|
|
232
|
-
// INFO You cannot enumerate properties of request object, this may possibly require processing a lot of data
|
|
233
|
-
const proxyEnumerateTrap = () => Object.getOwnPropertyNames(EXCLUSIONS)[Symbol.iterator]();
|
|
234
267
|
const proxyGetOwnPropertyDescriptorTrap = (wrapper, name) => {
|
|
235
268
|
if (isNameExcluded(name)) {
|
|
236
269
|
return Object.getOwnPropertyDescriptor(wrapper, name);
|
|
@@ -244,60 +277,65 @@ const createProxyTrapsObject = (handler) => ({
|
|
|
244
277
|
deleteProperty: createDeletePropertyTrap(handler),
|
|
245
278
|
has: proxyHasTrap,
|
|
246
279
|
ownKeys: proxyOwnKeysTrap,
|
|
247
|
-
|
|
280
|
+
// NOTE: `enumerate` trap was removed from the ES Proxy spec and is a no-op
|
|
281
|
+
// in all modern runtimes — removed to avoid confusion.
|
|
248
282
|
getOwnPropertyDescriptor: proxyGetOwnPropertyDescriptorTrap,
|
|
249
283
|
});
|
|
250
284
|
|
|
251
285
|
const EMPTY_PROMISE = Promise.resolve(undefined);
|
|
252
286
|
const isPromiseActivity = (command) => {
|
|
253
287
|
const { type } = command;
|
|
254
|
-
if (type ===
|
|
288
|
+
if (type === ProxyCommand.GET || type === ProxyCommand.METHOD_CALL) {
|
|
255
289
|
return isReservedPropertyName(command.name);
|
|
256
290
|
}
|
|
257
|
-
if (type ===
|
|
291
|
+
if (type === ProxyCommand.APPLY) {
|
|
258
292
|
return isReservedPropertyName(command.prev?.name);
|
|
259
293
|
}
|
|
260
294
|
return false;
|
|
261
295
|
};
|
|
262
296
|
const executePromiseMethod = (context, name, args) => {
|
|
263
297
|
switch (name) {
|
|
264
|
-
case
|
|
298
|
+
case ReservedPropertyNames.THEN:
|
|
265
299
|
return context.then(...args);
|
|
266
|
-
case
|
|
300
|
+
case ReservedPropertyNames.CATCH:
|
|
267
301
|
return context.catch(...args);
|
|
268
302
|
default:
|
|
269
303
|
throw new Error(`Unexpected Error: Promise method "${String(name)}" could not be called.`);
|
|
270
304
|
}
|
|
271
305
|
};
|
|
272
|
-
const applyPromiseActivity = (command, commandHandler, lazy, wrap) => {
|
|
306
|
+
const applyPromiseActivity = (command, commandHandler, lazy, wrap, rawContext) => {
|
|
273
307
|
switch (command.type) {
|
|
274
|
-
case
|
|
308
|
+
case ProxyCommand.GET: {
|
|
275
309
|
const { name, prev } = command;
|
|
276
310
|
let { context } = command;
|
|
277
311
|
if (lazy) {
|
|
278
|
-
// then() / catch() on lazy means we should call handler and subscribe to promise
|
|
279
312
|
if (!prev) {
|
|
280
|
-
|
|
313
|
+
// Root lazy access to a reserved name (then/catch) — no chain to resolve
|
|
314
|
+
// through, so use the raw context (the promise passed to wrap) directly.
|
|
315
|
+
context = rawContext;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
// When lazy, context is a dummy promise, so we call handler with the previous
|
|
319
|
+
// command and use the result as the context to subscribe to.
|
|
320
|
+
context = commandHandler(prev, prev.context, wrap);
|
|
281
321
|
}
|
|
282
|
-
// When lazy, context is a dummy promise, so we have to call handler with previous command and then use it as a context.
|
|
283
|
-
context = commandHandler(prev, prev.context, wrap);
|
|
284
322
|
}
|
|
323
|
+
// When not lazy, context is already the live promise result — subscribe directly.
|
|
285
324
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
286
325
|
return (...args) => context[name](...args);
|
|
287
326
|
}
|
|
288
|
-
case
|
|
327
|
+
case ProxyCommand.METHOD_CALL:
|
|
289
328
|
if (!command.context) {
|
|
290
329
|
throw new Error(`Unexpected Error: Could not apply Promise method of unknown context.`);
|
|
291
330
|
}
|
|
292
331
|
return executePromiseMethod(command.context, command.name, command.value);
|
|
293
|
-
case
|
|
294
|
-
{
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
throw new Error(`Unexpected Error: Could not apply Promise method of unknown context.`);
|
|
298
|
-
}
|
|
299
|
-
return executePromiseMethod(prev.context, prev.name, command.value);
|
|
332
|
+
case ProxyCommand.APPLY: {
|
|
333
|
+
const { prev } = command;
|
|
334
|
+
if (!prev?.context || !prev?.name) {
|
|
335
|
+
throw new Error(`Unexpected Error: Could not apply Promise method of unknown context.`);
|
|
300
336
|
}
|
|
337
|
+
return executePromiseMethod(prev.context, prev.name, command.value);
|
|
338
|
+
}
|
|
301
339
|
default:
|
|
302
340
|
throw new Error(`Command type "${command.type}" could not be executed as a Promise command.`);
|
|
303
341
|
}
|
|
@@ -308,9 +346,9 @@ const handle = (commandHandler, lazy = true) => (context, command) => {
|
|
|
308
346
|
const childCommand = generateProxyCommand(command, type, name, value, context, lazy);
|
|
309
347
|
let result;
|
|
310
348
|
if (isPromiseActivity(childCommand)) {
|
|
311
|
-
return applyPromiseActivity(childCommand, commandHandler, lazy, wrap);
|
|
349
|
+
return applyPromiseActivity(childCommand, commandHandler, lazy, wrap, context);
|
|
312
350
|
}
|
|
313
|
-
else if ((type ===
|
|
351
|
+
else if ((type === ProxyCommand.APPLY || type === ProxyCommand.GET) &&
|
|
314
352
|
lazy) {
|
|
315
353
|
result = EMPTY_PROMISE;
|
|
316
354
|
}
|
|
@@ -324,9 +362,14 @@ const handle = (commandHandler, lazy = true) => (context, command) => {
|
|
|
324
362
|
getCommand() {
|
|
325
363
|
return command;
|
|
326
364
|
},
|
|
365
|
+
/**
|
|
366
|
+
* Returns a new chain with the prev link severed rather than mutating
|
|
367
|
+
* the existing command in-place. Safe for callers holding references.
|
|
368
|
+
*/
|
|
327
369
|
dropCommandChain() {
|
|
328
370
|
if (command) {
|
|
329
|
-
|
|
371
|
+
// Replace the reference with a severed copy rather than mutating
|
|
372
|
+
command = command.withoutPrev?.() ?? command;
|
|
330
373
|
}
|
|
331
374
|
},
|
|
332
375
|
});
|
|
@@ -334,11 +377,31 @@ const handle = (commandHandler, lazy = true) => (context, command) => {
|
|
|
334
377
|
return wrap(Promise.resolve(context), command ? CommandChain.fromCommand(command) : undefined);
|
|
335
378
|
};
|
|
336
379
|
|
|
380
|
+
let finalizationRegistryClass;
|
|
381
|
+
/**
|
|
382
|
+
* Returns class of a custom FinalizationRegistry if set with setCustomFinalizationRegistryClass()
|
|
383
|
+
* @returns {IFinalizationRegistryConstructor}
|
|
384
|
+
*/
|
|
385
|
+
const getCustomFinalizationRegistryClass = () => {
|
|
386
|
+
return finalizationRegistryClass;
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* Allows to setup custom FinalizationRegistry in environments where
|
|
390
|
+
* it is not available natively. It is used to cleanup stored weak
|
|
391
|
+
* references in ResourcePools.
|
|
392
|
+
* @param definition FinalizationRegistry, its mock or polyfill, etc.
|
|
393
|
+
*/
|
|
394
|
+
const setCustomFinalizationRegistryClass = (definition) => {
|
|
395
|
+
finalizationRegistryClass = definition;
|
|
396
|
+
};
|
|
397
|
+
|
|
337
398
|
class Resource extends IdOwner {
|
|
338
399
|
constructor(pool, type) {
|
|
339
400
|
super();
|
|
340
401
|
this.pool = pool;
|
|
341
402
|
this.type = type;
|
|
403
|
+
Object.defineProperty(this, 'pool', { value: pool, writable: false, configurable: false });
|
|
404
|
+
Object.defineProperty(this, 'type', { value: type, writable: false, configurable: false });
|
|
342
405
|
}
|
|
343
406
|
toObject() {
|
|
344
407
|
return { id: this.id, poolId: this.pool.id, type: this.type };
|
|
@@ -348,15 +411,22 @@ class Resource extends IdOwner {
|
|
|
348
411
|
}
|
|
349
412
|
}
|
|
350
413
|
const createResource = (pool, target, type) => new Resource(pool, type || typeof target);
|
|
351
|
-
const isResourceObject = (obj) => obj &&
|
|
352
|
-
// type signature is not enough for non-ts env
|
|
414
|
+
const isResourceObject = (obj) => obj != null &&
|
|
353
415
|
typeof obj === 'object' &&
|
|
354
416
|
typeof obj.id === 'string' &&
|
|
355
417
|
typeof obj.poolId === 'string';
|
|
356
418
|
|
|
419
|
+
// Valid target types are scoped per-module and intentionally not shared across
|
|
420
|
+
// ResourcePool instances. If you need per-pool validity rules, pass a custom
|
|
421
|
+
// isValidTarget predicate into ResourcePool directly.
|
|
357
422
|
const validTargets = new Set();
|
|
358
423
|
const getDefaultValidTargets = () => ['object', 'function'];
|
|
359
|
-
const isValidTarget = (value) =>
|
|
424
|
+
const isValidTarget = (value) => {
|
|
425
|
+
// typeof null === 'object' but null cannot be used as a WeakMap key
|
|
426
|
+
if (value === null)
|
|
427
|
+
return false;
|
|
428
|
+
return validTargets.has(typeof value);
|
|
429
|
+
};
|
|
360
430
|
const setValidTargets = (list) => {
|
|
361
431
|
validTargets.clear();
|
|
362
432
|
list.forEach((item) => validTargets.add(item));
|
|
@@ -365,31 +435,40 @@ setValidTargets(getDefaultValidTargets());
|
|
|
365
435
|
|
|
366
436
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
367
437
|
class ResourcePool extends IdOwner {
|
|
368
|
-
constructor() {
|
|
369
|
-
super(
|
|
370
|
-
//
|
|
371
|
-
this.refs = new weakStorage.WeakValueMap();
|
|
372
|
-
// { [weakref]: Resource }
|
|
438
|
+
constructor(FinalizationRegistry = getCustomFinalizationRegistryClass()) {
|
|
439
|
+
super();
|
|
440
|
+
// target → Resource: allows lookup by target object
|
|
373
441
|
this.resources = new WeakMap();
|
|
442
|
+
this.refs = new WeakValueMap(FinalizationRegistry);
|
|
374
443
|
}
|
|
375
444
|
get active() {
|
|
376
445
|
return !!this.resources;
|
|
377
446
|
}
|
|
378
447
|
set(target, type) {
|
|
379
|
-
let resource = null;
|
|
380
448
|
if (!isValidTarget(target)) {
|
|
381
|
-
return
|
|
449
|
+
return null;
|
|
382
450
|
}
|
|
383
|
-
|
|
384
|
-
if (
|
|
385
|
-
|
|
386
|
-
this.refs.set(resource.id, target);
|
|
387
|
-
this.resources.set(target, resource);
|
|
451
|
+
const existing = this.resources.get(target);
|
|
452
|
+
if (existing) {
|
|
453
|
+
return existing;
|
|
388
454
|
}
|
|
455
|
+
const resource = createResource(this, target, type);
|
|
456
|
+
this.refs.set(resource.id, target);
|
|
457
|
+
this.resources.set(target, resource);
|
|
389
458
|
return resource;
|
|
390
459
|
}
|
|
460
|
+
/**
|
|
461
|
+
* Returns true only when the target is registered AND its weakref is still
|
|
462
|
+
* alive. Checks both maps to avoid the asymmetry where WeakMap.has() returns
|
|
463
|
+
* true for a target whose WeakValueMap entry has already been collected.
|
|
464
|
+
*/
|
|
391
465
|
has(target) {
|
|
392
|
-
|
|
466
|
+
if (!this.resources.has(target)) {
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
const resource = this.resources.get(target);
|
|
470
|
+
// Confirm the forward ref is still alive too
|
|
471
|
+
return resource !== undefined && this.refs.get(resource.id) !== undefined;
|
|
393
472
|
}
|
|
394
473
|
get({ id }) {
|
|
395
474
|
return this.getById(id);
|
|
@@ -409,21 +488,26 @@ class ResourcePool extends IdOwner {
|
|
|
409
488
|
return false;
|
|
410
489
|
}
|
|
411
490
|
clear() {
|
|
412
|
-
|
|
491
|
+
this.refs.forEach((_value, key) => {
|
|
413
492
|
const target = this.refs.get(key);
|
|
414
|
-
|
|
415
|
-
|
|
493
|
+
if (target !== undefined) {
|
|
494
|
+
this.resources.delete(target);
|
|
495
|
+
}
|
|
496
|
+
});
|
|
416
497
|
this.refs.clear();
|
|
417
498
|
}
|
|
418
499
|
}
|
|
419
500
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
501
|
+
let defaultResourcePool;
|
|
502
|
+
const getDefaultResourcePool = () => {
|
|
503
|
+
if (!defaultResourcePool) {
|
|
504
|
+
defaultResourcePool = new ResourcePool();
|
|
423
505
|
}
|
|
424
|
-
return
|
|
506
|
+
return defaultResourcePool;
|
|
507
|
+
};
|
|
508
|
+
const setDefaultResourcePool = (pool) => {
|
|
509
|
+
defaultResourcePool = pool;
|
|
425
510
|
};
|
|
426
|
-
const getDefaultResourcePool = generateGetDefaultResourcePool();
|
|
427
511
|
|
|
428
512
|
class ResourcePoolRegistry extends IdOwner {
|
|
429
513
|
constructor() {
|
|
@@ -443,7 +527,7 @@ class ResourcePoolRegistry extends IdOwner {
|
|
|
443
527
|
* Register ResourcePool instance.
|
|
444
528
|
*/
|
|
445
529
|
register(pool) {
|
|
446
|
-
if (
|
|
530
|
+
if (Object.hasOwn(this.pools, pool.id))
|
|
447
531
|
return false;
|
|
448
532
|
this.pools[pool.id] = pool;
|
|
449
533
|
return true;
|
|
@@ -458,7 +542,7 @@ class ResourcePoolRegistry extends IdOwner {
|
|
|
458
542
|
* Check if ResourcePool registered in this registry instance.
|
|
459
543
|
*/
|
|
460
544
|
isRegistered(pool) {
|
|
461
|
-
return
|
|
545
|
+
return Object.hasOwn(this.pools, pool.id);
|
|
462
546
|
}
|
|
463
547
|
/**
|
|
464
548
|
* Remove ResourcePool from current registry instance.
|
|
@@ -468,61 +552,38 @@ class ResourcePoolRegistry extends IdOwner {
|
|
|
468
552
|
return delete this.pools[poolId];
|
|
469
553
|
}
|
|
470
554
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
555
|
+
let defaultRegistry;
|
|
556
|
+
const getRegistry = () => {
|
|
557
|
+
if (!defaultRegistry) {
|
|
558
|
+
defaultRegistry = new ResourcePoolRegistry();
|
|
474
559
|
}
|
|
475
|
-
return
|
|
560
|
+
return defaultRegistry;
|
|
561
|
+
};
|
|
562
|
+
const setRegistry = (registry) => {
|
|
563
|
+
defaultRegistry = registry;
|
|
476
564
|
};
|
|
477
|
-
const getRegistry = generateGetRegistry();
|
|
478
565
|
|
|
479
566
|
const calls = new Map();
|
|
480
567
|
let latest = Promise.resolve();
|
|
481
|
-
|
|
568
|
+
// Silently swallow unhandled rejections from tracked calls so that cleanup
|
|
569
|
+
// always runs — callers are responsible for handling errors on the original promise.
|
|
570
|
+
const noop = () => undefined;
|
|
482
571
|
const latestCall = () => latest;
|
|
483
572
|
const latestCallFor = (context) => calls.get(unwrapProxy(context));
|
|
484
573
|
const clearLatestCalls = () => calls.clear();
|
|
485
574
|
const recordHandlerCalls = (handler) => (command, context, wrap) => {
|
|
486
575
|
const promise = handler(command, context, wrap);
|
|
487
|
-
|
|
576
|
+
// Only track the *first* call per context — subsequent calls for the same
|
|
577
|
+
// context update `latest` but do not overwrite the stored per-context entry.
|
|
578
|
+
// Use strict identity (not truthiness) so falsy-but-valid contexts aren't skipped.
|
|
579
|
+
if (context !== undefined && context !== null && !calls.has(context)) {
|
|
488
580
|
calls.set(context, promise);
|
|
489
|
-
|
|
581
|
+
// Clean up the entry once the call settles (regardless of outcome)
|
|
582
|
+
promise.then(() => calls.delete(context), noop);
|
|
490
583
|
}
|
|
491
584
|
latest = promise;
|
|
492
585
|
return promise;
|
|
493
586
|
};
|
|
494
587
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
exports.IdOwner = IdOwner;
|
|
498
|
-
exports.Resource = Resource;
|
|
499
|
-
exports.ResourcePool = ResourcePool;
|
|
500
|
-
exports.ResourcePoolRegistry = ResourcePoolRegistry;
|
|
501
|
-
exports.clearLatestCalls = clearLatestCalls;
|
|
502
|
-
exports.createCommandHandler = createCommandHandler;
|
|
503
|
-
exports.createProxyTrapsObject = createProxyTrapsObject;
|
|
504
|
-
exports.createResource = createResource;
|
|
505
|
-
exports.createUIDGenerator = createUIDGenerator;
|
|
506
|
-
exports.followCommandChain = followCommandChain;
|
|
507
|
-
exports.generateId = generateId;
|
|
508
|
-
exports.generateProxyCommand = generateProxyCommand;
|
|
509
|
-
exports.getDefaultResourcePool = getDefaultResourcePool;
|
|
510
|
-
exports.getDefaultValidTargets = getDefaultValidTargets;
|
|
511
|
-
exports.getMethodCallContext = getMethodCallContext;
|
|
512
|
-
exports.getMethodName = getMethodName;
|
|
513
|
-
exports.getRegistry = getRegistry;
|
|
514
|
-
exports.handle = handle;
|
|
515
|
-
exports.isNameExcluded = isNameExcluded;
|
|
516
|
-
exports.isNameSymbol = isNameSymbol;
|
|
517
|
-
exports.isReservedPropertyName = isReservedPropertyName;
|
|
518
|
-
exports.isResourceObject = isResourceObject;
|
|
519
|
-
exports.isValidTarget = isValidTarget;
|
|
520
|
-
exports.isWrappedWithProxy = isWrappedWithProxy;
|
|
521
|
-
exports.latestCall = latestCall;
|
|
522
|
-
exports.latestCallFor = latestCallFor;
|
|
523
|
-
exports.recordHandlerCalls = recordHandlerCalls;
|
|
524
|
-
exports.reject = reject;
|
|
525
|
-
exports.setValidTargets = setValidTargets;
|
|
526
|
-
exports.unwrapProxy = unwrapProxy;
|
|
527
|
-
exports.wrapWithProxy = wrapWithProxy;
|
|
528
|
-
//# sourceMappingURL=deferred-data-access.js.map
|
|
588
|
+
export { Command, CommandChain, IdOwner, ProxyCommand, ReservedPropertyNames, Resource, ResourcePool, ResourcePoolRegistry, clearLatestCalls, createCommandHandler, createProxyTrapsObject, createResource, createUIDGenerator, followCommandChain, generateId, generateProxyCommand, getCustomFinalizationRegistryClass, getDefaultResourcePool, getDefaultValidTargets, getMethodCallContext, getMethodName, getRegistry, handle, isNameExcluded, isNameSymbol, isReservedPropertyName, isResourceObject, isValidTarget, isWrappedWithProxy, latestCall, latestCallFor, recordHandlerCalls, reject, setCustomFinalizationRegistryClass, setDefaultResourcePool, setRegistry, setValidTargets, unwrapProxy, wrapWithProxy };
|
|
589
|
+
//# sourceMappingURL=index.es.js.map
|
package/index.es.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../../packages/deferred-data-access/command/src/command.ts","../../../../packages/deferred-data-access/command/src/command-chain.ts","../../../../packages/deferred-data-access/command/src/command-handler.ts","../../../../packages/deferred-data-access/utils/src/utils.ts","../../../../packages/deferred-data-access/proxy/src/command.ts","../../../../packages/deferred-data-access/proxy/src/types.ts","../../../../packages/deferred-data-access/proxy/src/proxy.ts","../../../../packages/deferred-data-access/proxy/src/utils.ts","../../../../packages/deferred-data-access/proxy/src/traps.ts","../../../../packages/deferred-data-access/core/core.ts","../../../../packages/deferred-data-access/resource/src/finalization-registry.ts","../../../../packages/deferred-data-access/resource/src/resource.ts","../../../../packages/deferred-data-access/resource/src/utils.ts","../../../../packages/deferred-data-access/resource/src/resource-pool.ts","../../../../packages/deferred-data-access/resource/src/default-resource-pool.ts","../../../../packages/deferred-data-access/resource/src/resource-pool-registry.ts","../../../../packages/deferred-data-access/record/record.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|