@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.
Files changed (128) hide show
  1. package/README.md +400 -27
  2. package/SKILL.md +106 -0
  3. package/command/index.d.ts.map +1 -0
  4. package/command/index.es.js +98 -0
  5. package/command/index.es.js.map +1 -0
  6. package/command/index.js +102 -4
  7. package/command/index.js.map +1 -1
  8. package/command/package.json +4 -1
  9. package/command/src/command-chain.d.ts +8 -1
  10. package/command/src/command-chain.d.ts.map +1 -0
  11. package/command/src/command-chain.js +9 -0
  12. package/command/src/command-chain.js.map +1 -1
  13. package/command/src/command-handler.d.ts.map +1 -0
  14. package/command/src/command.d.ts +2 -2
  15. package/command/src/command.d.ts.map +1 -0
  16. package/command/src/command.js +5 -6
  17. package/command/src/command.js.map +1 -1
  18. package/core/core.d.ts.map +1 -0
  19. package/core/core.js +23 -25
  20. package/core/core.js.map +1 -1
  21. package/core/index.d.ts.map +1 -0
  22. package/deferred-data-access.umd.js +2 -0
  23. package/deferred-data-access.umd.js.map +1 -0
  24. package/index.d.ts.map +1 -0
  25. package/{dist/deferred-data-access.js → index.es.js} +199 -138
  26. package/index.es.js.map +1 -0
  27. package/index.js +627 -2
  28. package/index.js.map +1 -1
  29. package/interface/index.d.ts.map +1 -0
  30. package/interface/index.es.js +380 -0
  31. package/interface/index.es.js.map +1 -0
  32. package/interface/index.js +396 -7
  33. package/interface/index.js.map +1 -1
  34. package/interface/package.json +4 -1
  35. package/interface/src/handshake.d.ts.map +1 -0
  36. package/interface/src/handshake.js +6 -4
  37. package/interface/src/handshake.js.map +1 -1
  38. package/interface/src/helpers.d.ts.map +1 -0
  39. package/interface/src/intialize.d.ts +5 -2
  40. package/interface/src/intialize.d.ts.map +1 -0
  41. package/interface/src/intialize.js +37 -57
  42. package/interface/src/intialize.js.map +1 -1
  43. package/interface/src/request.d.ts +3 -2
  44. package/interface/src/request.d.ts.map +1 -0
  45. package/interface/src/request.js +39 -29
  46. package/interface/src/request.js.map +1 -1
  47. package/interface/src/types.d.ts.map +1 -0
  48. package/interface/src/utils.d.ts +2 -2
  49. package/interface/src/utils.d.ts.map +1 -0
  50. package/interface/src/utils.js +44 -29
  51. package/interface/src/utils.js.map +1 -1
  52. package/package.json +8 -6
  53. package/proxy/index.d.ts.map +1 -0
  54. package/proxy/index.es.js +144 -0
  55. package/proxy/index.es.js.map +1 -0
  56. package/proxy/index.js +155 -5
  57. package/proxy/index.js.map +1 -1
  58. package/proxy/package.json +4 -1
  59. package/proxy/src/command.d.ts.map +1 -0
  60. package/proxy/src/proxy.d.ts +2 -2
  61. package/proxy/src/proxy.d.ts.map +1 -0
  62. package/proxy/src/proxy.js +13 -3
  63. package/proxy/src/proxy.js.map +1 -1
  64. package/proxy/src/traps.d.ts +1 -1
  65. package/proxy/src/traps.d.ts.map +1 -0
  66. package/proxy/src/traps.js +4 -14
  67. package/proxy/src/traps.js.map +1 -1
  68. package/proxy/src/types.d.ts.map +1 -0
  69. package/proxy/src/utils.d.ts +6 -0
  70. package/proxy/src/utils.d.ts.map +1 -0
  71. package/proxy/src/utils.js +11 -5
  72. package/proxy/src/utils.js.map +1 -1
  73. package/record/index.d.ts.map +1 -0
  74. package/record/index.es.js +26 -0
  75. package/record/index.es.js.map +1 -0
  76. package/record/index.js +31 -2
  77. package/record/index.js.map +1 -1
  78. package/record/package.json +4 -1
  79. package/record/record.d.ts +2 -2
  80. package/record/record.d.ts.map +1 -0
  81. package/record/record.js +9 -3
  82. package/record/record.js.map +1 -1
  83. package/resource/index.d.ts +1 -0
  84. package/resource/index.d.ts.map +1 -0
  85. package/resource/index.es.js +191 -0
  86. package/resource/index.es.js.map +1 -0
  87. package/resource/index.js +206 -6
  88. package/resource/index.js.map +1 -1
  89. package/resource/package.json +4 -1
  90. package/resource/src/default-resource-pool.d.ts +1 -0
  91. package/resource/src/default-resource-pool.d.ts.map +1 -0
  92. package/resource/src/default-resource-pool.js +8 -5
  93. package/resource/src/default-resource-pool.js.map +1 -1
  94. package/resource/src/finalization-registry.d.ts +13 -0
  95. package/resource/src/finalization-registry.d.ts.map +1 -0
  96. package/resource/src/finalization-registry.js +18 -0
  97. package/resource/src/finalization-registry.js.map +1 -0
  98. package/resource/src/resource-pool-registry.d.ts +1 -0
  99. package/resource/src/resource-pool-registry.d.ts.map +1 -0
  100. package/resource/src/resource-pool-registry.js +10 -8
  101. package/resource/src/resource-pool-registry.js.map +1 -1
  102. package/resource/src/resource-pool.d.ts +8 -1
  103. package/resource/src/resource-pool.d.ts.map +1 -0
  104. package/resource/src/resource-pool.js +29 -17
  105. package/resource/src/resource-pool.js.map +1 -1
  106. package/resource/src/resource.d.ts +1 -1
  107. package/resource/src/resource.d.ts.map +1 -0
  108. package/resource/src/resource.js +3 -2
  109. package/resource/src/resource.js.map +1 -1
  110. package/resource/src/utils.d.ts +1 -1
  111. package/resource/src/utils.d.ts.map +1 -0
  112. package/resource/src/utils.js +9 -1
  113. package/resource/src/utils.js.map +1 -1
  114. package/utils/index.d.ts.map +1 -0
  115. package/utils/index.es.js +48 -0
  116. package/utils/index.es.js.map +1 -0
  117. package/utils/index.js +54 -3
  118. package/utils/index.js.map +1 -1
  119. package/utils/package.json +4 -1
  120. package/utils/src/types.d.ts +3 -3
  121. package/utils/src/types.d.ts.map +1 -0
  122. package/utils/src/utils.d.ts +18 -2
  123. package/utils/src/utils.d.ts.map +1 -0
  124. package/utils/src/utils.js +28 -4
  125. package/utils/src/utils.js.map +1 -1
  126. package/dist/deferred-data-access.js.map +0 -1
  127. package/dist/deferred-data-access.umd.js +0 -2
  128. package/dist/deferred-data-access.umd.js.map +0 -1
package/resource/index.js CHANGED
@@ -1,6 +1,206 @@
1
- export * from './src/resource-pool-registry';
2
- export * from './src/resource-pool';
3
- export * from './src/default-resource-pool';
4
- export * from './src/resource';
5
- export * from './src/utils';
6
- //# sourceMappingURL=index.js.map
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/deferred-data-access/resource/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
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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"}
@@ -1,4 +1,7 @@
1
1
  {
2
2
  "name": "@actualwave/deferred-data-access/resource",
3
- "version": "2.0.0"
3
+ "version": "2.0.0",
4
+ "main": "index.js",
5
+ "module": "index.es.js",
6
+ "types": "index.d.ts"
4
7
  }
@@ -1,2 +1,3 @@
1
1
  import { ResourcePool } from "./resource-pool";
2
2
  export declare const getDefaultResourcePool: () => ResourcePool;
3
+ export declare const setDefaultResourcePool: (pool: ResourcePool) => void;
@@ -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
- const generateGetDefaultResourcePool = (pool) => () => {
3
- if (!pool) {
4
- pool = new ResourcePool();
2
+ let defaultResourcePool;
3
+ export const getDefaultResourcePool = () => {
4
+ if (!defaultResourcePool) {
5
+ defaultResourcePool = new ResourcePool();
5
6
  }
6
- return pool;
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,MAAM,8BAA8B,GAClC,CAAC,IAAmB,EAAE,EAAE,CAAC,GAAiB,EAAE;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,8BAA8B,EAAE,CAAC"}
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"}
@@ -25,3 +25,4 @@ export declare class ResourcePoolRegistry extends IdOwner {
25
25
  remove(pool: string | ResourcePool): boolean;
26
26
  }
27
27
  export declare const getRegistry: () => ResourcePoolRegistry;
28
+ export declare const setRegistry: (registry: ResourcePoolRegistry) => void;
@@ -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
- const generateGetRegistry = (registry) => () => {
49
- if (!registry) {
50
- registry = new ResourcePoolRegistry();
47
+ let defaultRegistry;
48
+ export const getRegistry = () => {
49
+ if (!defaultRegistry) {
50
+ defaultRegistry = new ResourcePoolRegistry();
51
51
  }
52
- return registry;
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,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,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,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9C,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,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,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,MAAM,mBAAmB,GACvB,CAAC,QAA+B,EAAE,EAAE,CAAC,GAAyB,EAAE;IAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC"}
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(...arguments);
9
- // { [string]: weakref }
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 resource;
19
+ return null;
21
20
  }
22
- resource = this.resources.get(target);
23
- if (!resource) {
24
- resource = createResource(this, target, type);
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
- return this.resources.has(target);
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
- for (const key of this.refs.keys()) {
61
+ this.refs.forEach((_value, key) => {
52
62
  const target = this.refs.get(key);
53
- this.resources.delete(target);
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,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAY,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,OAAO,YAAa,SAAQ,OAAO;IAAzC;;QACE,wBAAwB;QAChB,SAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QAElC,0BAA0B;QAClB,cAAS,GAAG,IAAI,OAAO,EAAE,CAAC;IA2DpC,CAAC;IAzDC,IAAI,MAAM;QACR,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,IAAa;QAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,EAAE,EAAE,EAAkB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;CACF"}
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: any) => any;
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"}
@@ -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;IAG9B,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,GAAQ,EAAE,EAAE,CAC3C,GAAG;IACH,8CAA8C;IAC9C,OAAO,GAAG,KAAK,QAAQ;IACvB,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;IAC1B,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC"}
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"}
@@ -1,3 +1,3 @@
1
1
  export declare const getDefaultValidTargets: () => string[];
2
2
  export declare const isValidTarget: (value: unknown) => boolean;
3
- export declare const setValidTargets: (list: unknown[]) => void;
3
+ export declare const setValidTargets: (list: string[]) => void;
@@ -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"}
@@ -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) => validTargets.has(typeof 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,EAAE,CAAC;AAE/B,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;AAEzF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAe,EAAQ,EAAE;IACvD,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"}
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;;;;"}