@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
package/resource/index.js
CHANGED
|
@@ -1,6 +1,206 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@actualwave/deferred-data-access/utils');
|
|
4
|
+
var weakStorage = require('@actualwave/weak-storage');
|
|
5
|
+
|
|
6
|
+
let finalizationRegistryClass;
|
|
7
|
+
/**
|
|
8
|
+
* Returns class of a custom FinalizationRegistry if set with setCustomFinalizationRegistryClass()
|
|
9
|
+
* @returns {IFinalizationRegistryConstructor}
|
|
10
|
+
*/
|
|
11
|
+
const getCustomFinalizationRegistryClass = () => {
|
|
12
|
+
return finalizationRegistryClass;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Allows to setup custom FinalizationRegistry in environments where
|
|
16
|
+
* it is not available natively. It is used to cleanup stored weak
|
|
17
|
+
* references in ResourcePools.
|
|
18
|
+
* @param definition FinalizationRegistry, its mock or polyfill, etc.
|
|
19
|
+
*/
|
|
20
|
+
const setCustomFinalizationRegistryClass = (definition) => {
|
|
21
|
+
finalizationRegistryClass = definition;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
class Resource extends utils.IdOwner {
|
|
25
|
+
constructor(pool, type) {
|
|
26
|
+
super();
|
|
27
|
+
this.pool = pool;
|
|
28
|
+
this.type = type;
|
|
29
|
+
Object.defineProperty(this, 'pool', { value: pool, writable: false, configurable: false });
|
|
30
|
+
Object.defineProperty(this, 'type', { value: type, writable: false, configurable: false });
|
|
31
|
+
}
|
|
32
|
+
toObject() {
|
|
33
|
+
return { id: this.id, poolId: this.pool.id, type: this.type };
|
|
34
|
+
}
|
|
35
|
+
toJSON() {
|
|
36
|
+
return JSON.stringify(this.toObject());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const createResource = (pool, target, type) => new Resource(pool, type || typeof target);
|
|
40
|
+
const isResourceObject = (obj) => obj != null &&
|
|
41
|
+
typeof obj === 'object' &&
|
|
42
|
+
typeof obj.id === 'string' &&
|
|
43
|
+
typeof obj.poolId === 'string';
|
|
44
|
+
|
|
45
|
+
// Valid target types are scoped per-module and intentionally not shared across
|
|
46
|
+
// ResourcePool instances. If you need per-pool validity rules, pass a custom
|
|
47
|
+
// isValidTarget predicate into ResourcePool directly.
|
|
48
|
+
const validTargets = new Set();
|
|
49
|
+
const getDefaultValidTargets = () => ['object', 'function'];
|
|
50
|
+
const isValidTarget = (value) => {
|
|
51
|
+
// typeof null === 'object' but null cannot be used as a WeakMap key
|
|
52
|
+
if (value === null)
|
|
53
|
+
return false;
|
|
54
|
+
return validTargets.has(typeof value);
|
|
55
|
+
};
|
|
56
|
+
const setValidTargets = (list) => {
|
|
57
|
+
validTargets.clear();
|
|
58
|
+
list.forEach((item) => validTargets.add(item));
|
|
59
|
+
};
|
|
60
|
+
setValidTargets(getDefaultValidTargets());
|
|
61
|
+
|
|
62
|
+
/* eslint-disable @typescript-eslint/ban-types */
|
|
63
|
+
class ResourcePool extends utils.IdOwner {
|
|
64
|
+
constructor(FinalizationRegistry = getCustomFinalizationRegistryClass()) {
|
|
65
|
+
super();
|
|
66
|
+
// target → Resource: allows lookup by target object
|
|
67
|
+
this.resources = new WeakMap();
|
|
68
|
+
this.refs = new weakStorage.WeakValueMap(FinalizationRegistry);
|
|
69
|
+
}
|
|
70
|
+
get active() {
|
|
71
|
+
return !!this.resources;
|
|
72
|
+
}
|
|
73
|
+
set(target, type) {
|
|
74
|
+
if (!isValidTarget(target)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const existing = this.resources.get(target);
|
|
78
|
+
if (existing) {
|
|
79
|
+
return existing;
|
|
80
|
+
}
|
|
81
|
+
const resource = createResource(this, target, type);
|
|
82
|
+
this.refs.set(resource.id, target);
|
|
83
|
+
this.resources.set(target, resource);
|
|
84
|
+
return resource;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Returns true only when the target is registered AND its weakref is still
|
|
88
|
+
* alive. Checks both maps to avoid the asymmetry where WeakMap.has() returns
|
|
89
|
+
* true for a target whose WeakValueMap entry has already been collected.
|
|
90
|
+
*/
|
|
91
|
+
has(target) {
|
|
92
|
+
if (!this.resources.has(target)) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
const resource = this.resources.get(target);
|
|
96
|
+
// Confirm the forward ref is still alive too
|
|
97
|
+
return resource !== undefined && this.refs.get(resource.id) !== undefined;
|
|
98
|
+
}
|
|
99
|
+
get({ id }) {
|
|
100
|
+
return this.getById(id);
|
|
101
|
+
}
|
|
102
|
+
getById(id) {
|
|
103
|
+
return this.refs.get(id);
|
|
104
|
+
}
|
|
105
|
+
getResource(target) {
|
|
106
|
+
return this.resources.get(target);
|
|
107
|
+
}
|
|
108
|
+
remove(target) {
|
|
109
|
+
const resource = this.resources.get(target);
|
|
110
|
+
if (resource) {
|
|
111
|
+
this.refs.delete(resource.id);
|
|
112
|
+
return this.resources.delete(target);
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
clear() {
|
|
117
|
+
this.refs.forEach((_value, key) => {
|
|
118
|
+
const target = this.refs.get(key);
|
|
119
|
+
if (target !== undefined) {
|
|
120
|
+
this.resources.delete(target);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
this.refs.clear();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let defaultResourcePool;
|
|
128
|
+
const getDefaultResourcePool = () => {
|
|
129
|
+
if (!defaultResourcePool) {
|
|
130
|
+
defaultResourcePool = new ResourcePool();
|
|
131
|
+
}
|
|
132
|
+
return defaultResourcePool;
|
|
133
|
+
};
|
|
134
|
+
const setDefaultResourcePool = (pool) => {
|
|
135
|
+
defaultResourcePool = pool;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
class ResourcePoolRegistry extends utils.IdOwner {
|
|
139
|
+
constructor() {
|
|
140
|
+
super();
|
|
141
|
+
this.pools = {};
|
|
142
|
+
this.register(getDefaultResourcePool());
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create and register ResourcePool
|
|
146
|
+
*/
|
|
147
|
+
createPool() {
|
|
148
|
+
const pool = new ResourcePool();
|
|
149
|
+
this.register(pool);
|
|
150
|
+
return pool;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Register ResourcePool instance.
|
|
154
|
+
*/
|
|
155
|
+
register(pool) {
|
|
156
|
+
if (Object.hasOwn(this.pools, pool.id))
|
|
157
|
+
return false;
|
|
158
|
+
this.pools[pool.id] = pool;
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Retrieve ResourcePool instance from registry by its Id.
|
|
163
|
+
*/
|
|
164
|
+
get(poolId) {
|
|
165
|
+
return this.pools[poolId] || null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check if ResourcePool registered in this registry instance.
|
|
169
|
+
*/
|
|
170
|
+
isRegistered(pool) {
|
|
171
|
+
return Object.hasOwn(this.pools, pool.id);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Remove ResourcePool from current registry instance.
|
|
175
|
+
*/
|
|
176
|
+
remove(pool) {
|
|
177
|
+
const poolId = typeof pool === 'string' ? pool : pool.id;
|
|
178
|
+
return delete this.pools[poolId];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
let defaultRegistry;
|
|
182
|
+
const getRegistry = () => {
|
|
183
|
+
if (!defaultRegistry) {
|
|
184
|
+
defaultRegistry = new ResourcePoolRegistry();
|
|
185
|
+
}
|
|
186
|
+
return defaultRegistry;
|
|
187
|
+
};
|
|
188
|
+
const setRegistry = (registry) => {
|
|
189
|
+
defaultRegistry = registry;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
exports.Resource = Resource;
|
|
193
|
+
exports.ResourcePool = ResourcePool;
|
|
194
|
+
exports.ResourcePoolRegistry = ResourcePoolRegistry;
|
|
195
|
+
exports.createResource = createResource;
|
|
196
|
+
exports.getCustomFinalizationRegistryClass = getCustomFinalizationRegistryClass;
|
|
197
|
+
exports.getDefaultResourcePool = getDefaultResourcePool;
|
|
198
|
+
exports.getDefaultValidTargets = getDefaultValidTargets;
|
|
199
|
+
exports.getRegistry = getRegistry;
|
|
200
|
+
exports.isResourceObject = isResourceObject;
|
|
201
|
+
exports.isValidTarget = isValidTarget;
|
|
202
|
+
exports.setCustomFinalizationRegistryClass = setCustomFinalizationRegistryClass;
|
|
203
|
+
exports.setDefaultResourcePool = setDefaultResourcePool;
|
|
204
|
+
exports.setRegistry = setRegistry;
|
|
205
|
+
exports.setValidTargets = setValidTargets;
|
|
206
|
+
//# sourceMappingURL=index.js.map
|
package/resource/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../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"],"sourcesContent":[null,null,null,null,null,null],"names":["IdOwner","WeakValueMap"],"mappings":"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"}
|
package/resource/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-resource-pool.d.ts","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/default-resource-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,eAAO,MAAM,sBAAsB,QAAO,YAKzC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,MAAM,YAAY,KAAG,IAE3D,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { ResourcePool } from "./resource-pool";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
let defaultResourcePool;
|
|
3
|
+
export const getDefaultResourcePool = () => {
|
|
4
|
+
if (!defaultResourcePool) {
|
|
5
|
+
defaultResourcePool = new ResourcePool();
|
|
5
6
|
}
|
|
6
|
-
return
|
|
7
|
+
return defaultResourcePool;
|
|
8
|
+
};
|
|
9
|
+
export const setDefaultResourcePool = (pool) => {
|
|
10
|
+
defaultResourcePool = pool;
|
|
7
11
|
};
|
|
8
|
-
export const getDefaultResourcePool = generateGetDefaultResourcePool();
|
|
9
12
|
//# sourceMappingURL=default-resource-pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-resource-pool.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/default-resource-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"default-resource-pool.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/default-resource-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,IAAI,mBAA6C,CAAC;AAElD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAiB,EAAE;IACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAkB,EAAQ,EAAE;IACjE,mBAAmB,GAAG,IAAI,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IFinalizationRegistryConstructor } from '@actualwave/weak-storage';
|
|
2
|
+
/**
|
|
3
|
+
* Returns class of a custom FinalizationRegistry if set with setCustomFinalizationRegistryClass()
|
|
4
|
+
* @returns {IFinalizationRegistryConstructor}
|
|
5
|
+
*/
|
|
6
|
+
export declare const getCustomFinalizationRegistryClass: () => IFinalizationRegistryConstructor | null | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Allows to setup custom FinalizationRegistry in environments where
|
|
9
|
+
* it is not available natively. It is used to cleanup stored weak
|
|
10
|
+
* references in ResourcePools.
|
|
11
|
+
* @param definition FinalizationRegistry, its mock or polyfill, etc.
|
|
12
|
+
*/
|
|
13
|
+
export declare const setCustomFinalizationRegistryClass: (definition: IFinalizationRegistryConstructor | null | undefined) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finalization-registry.d.ts","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/finalization-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAO5E;;;GAGG;AACH,eAAO,MAAM,kCAAkC,QAC3C,gCAAgC,GAChC,IAAI,GACJ,SAEH,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,GAC7C,YAAY,gCAAgC,GAAG,IAAI,GAAG,SAAS,KAC9D,IAEF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
let finalizationRegistryClass;
|
|
2
|
+
/**
|
|
3
|
+
* Returns class of a custom FinalizationRegistry if set with setCustomFinalizationRegistryClass()
|
|
4
|
+
* @returns {IFinalizationRegistryConstructor}
|
|
5
|
+
*/
|
|
6
|
+
export const getCustomFinalizationRegistryClass = () => {
|
|
7
|
+
return finalizationRegistryClass;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Allows to setup custom FinalizationRegistry in environments where
|
|
11
|
+
* it is not available natively. It is used to cleanup stored weak
|
|
12
|
+
* references in ResourcePools.
|
|
13
|
+
* @param definition FinalizationRegistry, its mock or polyfill, etc.
|
|
14
|
+
*/
|
|
15
|
+
export const setCustomFinalizationRegistryClass = (definition) => {
|
|
16
|
+
finalizationRegistryClass = definition;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=finalization-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finalization-registry.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/finalization-registry.ts"],"names":[],"mappings":"AAEA,IAAI,yBAGS,CAAC;AAEd;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAGpC,EAAE;IACd,OAAO,yBAAyB,CAAC;AACnC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAChD,UAA+D,EACzD,EAAE;IACR,yBAAyB,GAAG,UAAU,CAAC;AACzC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-pool-registry.d.ts","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource-pool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;;IAO7D;;OAEG;IACH,UAAU;IAMV;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAOrC;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAIxC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAIzC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,OAAO;CAK7C;AAID,eAAO,MAAM,WAAW,QAAO,oBAK9B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,UAAU,oBAAoB,KAAG,IAE5D,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { hasOwn } from '@actualwave/has-own';
|
|
2
1
|
import { IdOwner } from '@actualwave/deferred-data-access/utils';
|
|
3
2
|
import { getDefaultResourcePool } from './default-resource-pool';
|
|
4
3
|
import { ResourcePool } from './resource-pool';
|
|
@@ -20,7 +19,7 @@ export class ResourcePoolRegistry extends IdOwner {
|
|
|
20
19
|
* Register ResourcePool instance.
|
|
21
20
|
*/
|
|
22
21
|
register(pool) {
|
|
23
|
-
if (hasOwn(this.pools, pool.id))
|
|
22
|
+
if (Object.hasOwn(this.pools, pool.id))
|
|
24
23
|
return false;
|
|
25
24
|
this.pools[pool.id] = pool;
|
|
26
25
|
return true;
|
|
@@ -35,7 +34,7 @@ export class ResourcePoolRegistry extends IdOwner {
|
|
|
35
34
|
* Check if ResourcePool registered in this registry instance.
|
|
36
35
|
*/
|
|
37
36
|
isRegistered(pool) {
|
|
38
|
-
return hasOwn(this.pools, pool.id);
|
|
37
|
+
return Object.hasOwn(this.pools, pool.id);
|
|
39
38
|
}
|
|
40
39
|
/**
|
|
41
40
|
* Remove ResourcePool from current registry instance.
|
|
@@ -45,11 +44,14 @@ export class ResourcePoolRegistry extends IdOwner {
|
|
|
45
44
|
return delete this.pools[poolId];
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
let defaultRegistry;
|
|
48
|
+
export const getRegistry = () => {
|
|
49
|
+
if (!defaultRegistry) {
|
|
50
|
+
defaultRegistry = new ResourcePoolRegistry();
|
|
51
51
|
}
|
|
52
|
-
return
|
|
52
|
+
return defaultRegistry;
|
|
53
|
+
};
|
|
54
|
+
export const setRegistry = (registry) => {
|
|
55
|
+
defaultRegistry = registry;
|
|
53
56
|
};
|
|
54
|
-
export const getRegistry = generateGetRegistry();
|
|
55
57
|
//# sourceMappingURL=resource-pool-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-pool-registry.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource-pool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resource-pool-registry.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource-pool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,OAAO,oBAAqB,SAAQ,OAAO;IAG/C;QACE,KAAK,EAAE,CAAC;QAHO,UAAK,GAAoC,EAAE,CAAC;QAI3D,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAkB;QACzB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAErD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAkB;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAA2B;QAChC,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAEzD,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF;AAED,IAAI,eAAiD,CAAC;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAyB,EAAE;IACpD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAA8B,EAAQ,EAAE;IAClE,eAAe,GAAG,QAAQ,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { IdOwner } from '@actualwave/deferred-data-access/utils';
|
|
2
|
+
import { type IFinalizationRegistryConstructor } from '@actualwave/weak-storage';
|
|
2
3
|
import { Resource } from './resource';
|
|
3
4
|
export declare class ResourcePool extends IdOwner {
|
|
4
5
|
private refs;
|
|
6
|
+
constructor(FinalizationRegistry?: IFinalizationRegistryConstructor | null | undefined);
|
|
5
7
|
private resources;
|
|
6
8
|
get active(): boolean;
|
|
7
9
|
set(target: object, type?: string): Resource | null;
|
|
10
|
+
/**
|
|
11
|
+
* Returns true only when the target is registered AND its weakref is still
|
|
12
|
+
* alive. Checks both maps to avoid the asymmetry where WeakMap.has() returns
|
|
13
|
+
* true for a target whose WeakValueMap entry has already been collected.
|
|
14
|
+
*/
|
|
8
15
|
has(target: object): boolean;
|
|
9
16
|
get({ id }: {
|
|
10
17
|
id: string;
|
|
11
18
|
}): unknown;
|
|
12
19
|
getById(id: string): unknown;
|
|
13
|
-
getResource(target: object): Resource;
|
|
20
|
+
getResource(target: object): Resource | undefined;
|
|
14
21
|
remove(target: object): boolean;
|
|
15
22
|
clear(): void;
|
|
16
23
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-pool.d.ts","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource-pool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAkB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItD,qBAAa,YAAa,SAAQ,OAAO;IAEvC,OAAO,CAAC,IAAI,CAAe;gBAGzB,oBAAoB,GAChB,gCAAgC,GAChC,IAAI,GACJ,SAAgD;IAOtD,OAAO,CAAC,SAAS,CAAiB;IAElC,IAAI,MAAM,YAET;IAED,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAkBnD;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAS5B,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAIpC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIjD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAW/B,KAAK,IAAI,IAAI;CAUd"}
|
|
@@ -1,34 +1,44 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
2
|
import { IdOwner } from '@actualwave/deferred-data-access/utils';
|
|
3
|
-
import { WeakValueMap } from '@actualwave/weak-storage';
|
|
3
|
+
import { WeakValueMap, } from '@actualwave/weak-storage';
|
|
4
4
|
import { createResource } from './resource';
|
|
5
5
|
import { isValidTarget } from './utils';
|
|
6
|
+
import { getCustomFinalizationRegistryClass } from './finalization-registry';
|
|
6
7
|
export class ResourcePool extends IdOwner {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(
|
|
9
|
-
//
|
|
10
|
-
this.refs = new WeakValueMap();
|
|
11
|
-
// { [weakref]: Resource }
|
|
8
|
+
constructor(FinalizationRegistry = getCustomFinalizationRegistryClass()) {
|
|
9
|
+
super();
|
|
10
|
+
// target → Resource: allows lookup by target object
|
|
12
11
|
this.resources = new WeakMap();
|
|
12
|
+
this.refs = new WeakValueMap(FinalizationRegistry);
|
|
13
13
|
}
|
|
14
14
|
get active() {
|
|
15
15
|
return !!this.resources;
|
|
16
16
|
}
|
|
17
17
|
set(target, type) {
|
|
18
|
-
let resource = null;
|
|
19
18
|
if (!isValidTarget(target)) {
|
|
20
|
-
return
|
|
19
|
+
return null;
|
|
21
20
|
}
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
this.refs.set(resource.id, target);
|
|
26
|
-
this.resources.set(target, resource);
|
|
21
|
+
const existing = this.resources.get(target);
|
|
22
|
+
if (existing) {
|
|
23
|
+
return existing;
|
|
27
24
|
}
|
|
25
|
+
const resource = createResource(this, target, type);
|
|
26
|
+
this.refs.set(resource.id, target);
|
|
27
|
+
this.resources.set(target, resource);
|
|
28
28
|
return resource;
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns true only when the target is registered AND its weakref is still
|
|
32
|
+
* alive. Checks both maps to avoid the asymmetry where WeakMap.has() returns
|
|
33
|
+
* true for a target whose WeakValueMap entry has already been collected.
|
|
34
|
+
*/
|
|
30
35
|
has(target) {
|
|
31
|
-
|
|
36
|
+
if (!this.resources.has(target)) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const resource = this.resources.get(target);
|
|
40
|
+
// Confirm the forward ref is still alive too
|
|
41
|
+
return resource !== undefined && this.refs.get(resource.id) !== undefined;
|
|
32
42
|
}
|
|
33
43
|
get({ id }) {
|
|
34
44
|
return this.getById(id);
|
|
@@ -48,10 +58,12 @@ export class ResourcePool extends IdOwner {
|
|
|
48
58
|
return false;
|
|
49
59
|
}
|
|
50
60
|
clear() {
|
|
51
|
-
|
|
61
|
+
this.refs.forEach((_value, key) => {
|
|
52
62
|
const target = this.refs.get(key);
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
if (target !== undefined) {
|
|
64
|
+
this.resources.delete(target);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
55
67
|
this.refs.clear();
|
|
56
68
|
}
|
|
57
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-pool.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource-pool.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"resource-pool.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,4 +13,4 @@ export type ResourceObject = {
|
|
|
13
13
|
type: string;
|
|
14
14
|
};
|
|
15
15
|
export declare const createResource: (pool: ResourcePool, target: unknown, type?: string) => Resource;
|
|
16
|
-
export declare const isResourceObject: (obj:
|
|
16
|
+
export declare const isResourceObject: (obj: unknown) => obj is ResourceObject;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,qBAAa,QAAS,SAAQ,OAAO;aAEjB,IAAI,EAAE,YAAY;aAClB,IAAI,EAAE,MAAM;gBADZ,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM;IAO9B,QAAQ,IAAI,cAAc;IAI1B,MAAM;CAGP;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,MAAM,YAAY,EAClB,QAAQ,OAAO,EACf,OAAO,MAAM,aAC+B,CAAC;AAE/C,eAAO,MAAM,gBAAgB,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,cAIM,CAAC"}
|
package/resource/src/resource.js
CHANGED
|
@@ -4,6 +4,8 @@ export class Resource extends IdOwner {
|
|
|
4
4
|
super();
|
|
5
5
|
this.pool = pool;
|
|
6
6
|
this.type = type;
|
|
7
|
+
Object.defineProperty(this, 'pool', { value: pool, writable: false, configurable: false });
|
|
8
|
+
Object.defineProperty(this, 'type', { value: type, writable: false, configurable: false });
|
|
7
9
|
}
|
|
8
10
|
toObject() {
|
|
9
11
|
return { id: this.id, poolId: this.pool.id, type: this.type };
|
|
@@ -13,8 +15,7 @@ export class Resource extends IdOwner {
|
|
|
13
15
|
}
|
|
14
16
|
}
|
|
15
17
|
export const createResource = (pool, target, type) => new Resource(pool, type || typeof target);
|
|
16
|
-
export const isResourceObject = (obj) => obj &&
|
|
17
|
-
// type signature is not enough for non-ts env
|
|
18
|
+
export const isResourceObject = (obj) => obj != null &&
|
|
18
19
|
typeof obj === 'object' &&
|
|
19
20
|
typeof obj.id === 'string' &&
|
|
20
21
|
typeof obj.poolId === 'string';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAGjE,MAAM,OAAO,QAAS,SAAQ,OAAO;IACnC,YACkB,IAAkB,EAClB,IAAY;QAE5B,KAAK,EAAE,CAAC;QAHQ,SAAI,GAAJ,IAAI,CAAc;QAClB,SAAI,GAAJ,IAAI,CAAQ;
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAGjE,MAAM,OAAO,QAAS,SAAQ,OAAO;IACnC,YACkB,IAAkB,EAClB,IAAY;QAE5B,KAAK,EAAE,CAAC;QAHQ,SAAI,GAAJ,IAAI,CAAc;QAClB,SAAI,GAAJ,IAAI,CAAQ;QAG5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,CAAC;CACF;AAQD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAAkB,EAClB,MAAe,EACf,IAAa,EACb,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,OAAO,MAAM,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAyB,EAAE,CACtE,GAAG,IAAI,IAAI;IACX,OAAO,GAAG,KAAK,QAAQ;IACvB,OAAQ,GAA+B,CAAC,EAAE,KAAK,QAAQ;IACvD,OAAQ,GAA+B,CAAC,MAAM,KAAK,QAAQ,CAAC"}
|
package/resource/src/utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/utils.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,QAAO,MAAM,EAA4B,CAAC;AAE7E,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,OAI9C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,KAAG,IAGhD,CAAC"}
|
package/resource/src/utils.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
// Valid target types are scoped per-module and intentionally not shared across
|
|
2
|
+
// ResourcePool instances. If you need per-pool validity rules, pass a custom
|
|
3
|
+
// isValidTarget predicate into ResourcePool directly.
|
|
1
4
|
const validTargets = new Set();
|
|
2
5
|
export const getDefaultValidTargets = () => ['object', 'function'];
|
|
3
|
-
export const isValidTarget = (value) =>
|
|
6
|
+
export const isValidTarget = (value) => {
|
|
7
|
+
// typeof null === 'object' but null cannot be used as a WeakMap key
|
|
8
|
+
if (value === null)
|
|
9
|
+
return false;
|
|
10
|
+
return validTargets.has(typeof value);
|
|
11
|
+
};
|
|
4
12
|
export const setValidTargets = (list) => {
|
|
5
13
|
validTargets.clear();
|
|
6
14
|
list.forEach((item) => validTargets.add(item));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../packages/deferred-data-access/resource/src/utils.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,sDAAsD;AACtD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AAEvC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAW,EAAE;IACvD,oEAAoE;IACpE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAc,EAAQ,EAAE;IACtD,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,eAAe,CAAC,sBAAsB,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/deferred-data-access/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Subtract a small random offset so IDs generated in the same millisecond
|
|
2
|
+
// across separate module loads remain unique.
|
|
3
|
+
const DATE_NOW = Date.now() - Math.floor(Math.random() * 1000);
|
|
4
|
+
let index = 0;
|
|
5
|
+
var ReservedPropertyNames;
|
|
6
|
+
(function (ReservedPropertyNames) {
|
|
7
|
+
ReservedPropertyNames["THEN"] = "then";
|
|
8
|
+
ReservedPropertyNames["CATCH"] = "catch";
|
|
9
|
+
})(ReservedPropertyNames || (ReservedPropertyNames = {}));
|
|
10
|
+
/**
|
|
11
|
+
* Returns true only for string property names that match reserved Promise
|
|
12
|
+
* method names. Symbol names are never reserved — they always pass through
|
|
13
|
+
* to the proxy handler.
|
|
14
|
+
*/
|
|
15
|
+
const isReservedPropertyName = (name) => typeof name === 'string' &&
|
|
16
|
+
(name === ReservedPropertyNames.THEN || name === ReservedPropertyNames.CATCH);
|
|
17
|
+
/**
|
|
18
|
+
* Returns a rejected Promise. Throws the message as a value (not an Error
|
|
19
|
+
* instance) to preserve the original behaviour expected by callers.
|
|
20
|
+
*/
|
|
21
|
+
const reject = (message) => Promise.reject(message);
|
|
22
|
+
/**
|
|
23
|
+
* Returns a function that generates monotonically increasing unique IDs.
|
|
24
|
+
* All generators in this module share the same counter so IDs are globally
|
|
25
|
+
* unique within a single process.
|
|
26
|
+
*
|
|
27
|
+
* @param key - Optional namespace prefix included in every generated ID.
|
|
28
|
+
*/
|
|
29
|
+
const createUIDGenerator = (key = '') => {
|
|
30
|
+
const prefix = `${key ? `${key}/` : ''}${DATE_NOW}/`;
|
|
31
|
+
return () => `${prefix}${++index};`;
|
|
32
|
+
};
|
|
33
|
+
const generateId = createUIDGenerator();
|
|
34
|
+
class IdOwner {
|
|
35
|
+
constructor(id = generateId()) {
|
|
36
|
+
this.id = id;
|
|
37
|
+
// Prevent external mutation while remaining compatible with subclasses
|
|
38
|
+
// that call super() without explicitly sealing.
|
|
39
|
+
Object.defineProperty(this, 'id', {
|
|
40
|
+
value: this.id,
|
|
41
|
+
writable: false,
|
|
42
|
+
configurable: false,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { IdOwner, ReservedPropertyNames, createUIDGenerator, generateId, isReservedPropertyName, reject };
|
|
48
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../../../../packages/deferred-data-access/utils/src/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;AACA;AACA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC9D,IAAI,KAAK,GAAG,CAAC;IAED;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,qBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;AAKjC;;;;AAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,IAAkB,KACvD,OAAO,IAAI,KAAK,QAAQ;AACxB,KAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,IAAI,IAAI,KAAK,qBAAqB,CAAC,KAAK;AAE9E;;;AAGG;AACI,MAAM,MAAM,GAAG,CAAC,OAAe,KACpC,OAAO,CAAC,MAAM,CAAC,OAAO;AAExB;;;;;;AAMG;MACU,kBAAkB,GAAG,CAAC,GAAG,GAAG,EAAE,KAAkB;AAC3D,IAAA,MAAM,MAAM,GAAG,CAAA,EAAG,GAAG,GAAG,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,EAAG,QAAQ,GAAG;IACpD,OAAO,MAAM,CAAA,EAAG,MAAM,CAAA,EAAG,EAAE,KAAK,CAAA,CAAA,CAAG;AACrC;AAEO,MAAM,UAAU,GAAG,kBAAkB;MAE/B,OAAO,CAAA;IAGlB,WAAA,CAAY,EAAA,GAAa,UAAU,EAAE,EAAA;AACnC,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;;;AAGZ,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;YAChC,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,YAAY,EAAE,KAAK;AACpB,SAAA,CAAC;IACJ;AACD;;;;"}
|