opshot 0.5.2 → 0.5.3

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 (2) hide show
  1. package/dist/index.js +78 -77
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -98,6 +98,28 @@ function classifyValue(value) {
98
98
  return classifyChain(value.constructor);
99
99
  }
100
100
 
101
+ // src/readProxyRegistry.ts
102
+ var readProxyTargets = /* @__PURE__ */ new WeakMap();
103
+ var registerReadProxyTarget = (readProxy, target) => {
104
+ readProxyTargets.set(readProxy, target);
105
+ };
106
+ var getRegisteredReadProxyTarget = (readProxy) => readProxyTargets.get(readProxy);
107
+
108
+ // src/utils/predicates.ts
109
+ var isObjectLike = (value) => value !== null && (typeof value === "object" || typeof value === "function");
110
+
111
+ // src/peelReadProxy.ts
112
+ function peelReadProxy(value) {
113
+ if (!isObjectLike(value)) return value;
114
+ let current = value;
115
+ while (isObjectLike(current)) {
116
+ const registeredTarget = getRegisteredReadProxyTarget(current);
117
+ if (registeredTarget === void 0) break;
118
+ current = registeredTarget;
119
+ }
120
+ return current;
121
+ }
122
+
101
123
  // src/node.ts
102
124
  var byRaw = /* @__PURE__ */ new WeakMap();
103
125
  var byProxy = /* @__PURE__ */ new WeakMap();
@@ -106,10 +128,11 @@ function installProxyHandler(handler2) {
106
128
  proxyHandler = handler2;
107
129
  }
108
130
  function recordOf(value) {
109
- return byRaw.get(value) ?? byProxy.get(value);
131
+ const peeled = peelReadProxy(value);
132
+ return byRaw.get(peeled) ?? byProxy.get(peeled);
110
133
  }
111
134
  function rawOf(value) {
112
- return recordOf(value)?.raw ?? value;
135
+ return recordOf(value)?.raw ?? peelReadProxy(value);
113
136
  }
114
137
  function proxyOf(raw) {
115
138
  const existing = recordOf(raw);
@@ -257,83 +280,9 @@ function evict(handle, node) {
257
280
  cascade(handle, rawNode, membership.keys);
258
281
  }
259
282
 
260
- // src/utils/predicates.ts
261
- var isObjectLike = (value) => value !== null && (typeof value === "object" || typeof value === "function");
262
-
263
- // src/identity.ts
264
- var readProxyTargets = /* @__PURE__ */ new WeakMap();
265
- var identityRecords = /* @__PURE__ */ new WeakMap();
266
- var nextInternId = 0;
267
- var registerReadProxyTarget = (readProxy, target) => {
268
- readProxyTargets.set(readProxy, target);
269
- };
270
- var getRegisteredReadProxyTarget = (readProxy) => readProxyTargets.get(readProxy);
271
- function resolveIdentity(value) {
272
- let current = value;
273
- while (isObjectLike(current)) {
274
- const readTarget = getRegisteredReadProxyTarget(current);
275
- if (readTarget !== void 0 && readTarget !== current) {
276
- current = readTarget;
277
- continue;
278
- }
279
- const raw = rawOf(current);
280
- if (raw !== current) {
281
- current = raw;
282
- continue;
283
- }
284
- break;
285
- }
286
- return current;
287
- }
288
- var recordFor = (key) => {
289
- let record = identityRecords.get(key);
290
- if (record === void 0) {
291
- record = {};
292
- identityRecords.set(key, record);
293
- }
294
- return record;
295
- };
296
- function identify(value) {
297
- const target = resolveIdentity(value);
298
- if (!isObjectLike(target)) return value;
299
- const record = recordFor(target);
300
- if (record.token !== void 0) return record.token;
301
- const token = Object.freeze({});
302
- record.token = token;
303
- return token;
304
- }
305
- var internIdentity = (key) => {
306
- const resolved = resolveIdentity(key);
307
- const record = recordFor(resolved);
308
- if (record.id !== void 0) return record.id;
309
- const id = nextInternId;
310
- nextInternId += 1;
311
- record.id = id;
312
- return id;
313
- };
314
- function isSameIdentity(first, second) {
315
- const resolvedFirst = resolveIdentity(first);
316
- const resolvedSecond = resolveIdentity(second);
317
- return resolvedFirst === resolvedSecond;
318
- }
319
-
320
- // src/peelReadProxy.ts
321
- function peelReadProxy(value) {
322
- if (!isObjectLike(value)) return value;
323
- let current = value;
324
- while (isObjectLike(current)) {
325
- const registeredTarget = getRegisteredReadProxyTarget(current);
326
- if (registeredTarget === void 0) break;
327
- current = registeredTarget;
328
- }
329
- return current;
330
- }
331
-
332
283
  // src/handle.ts
333
284
  function handleOf(state) {
334
- const peeled = peelReadProxy(state);
335
- if (!isObjectLike(peeled)) return void 0;
336
- const raw = rawOf(peeled);
285
+ const raw = rawOf(state);
337
286
  const record = recordOf(raw);
338
287
  if (record === void 0) return void 0;
339
288
  for (const handle of record.memberships.keys()) {
@@ -683,6 +632,58 @@ function createMutableState(properties, options) {
683
632
  return proxy;
684
633
  }
685
634
 
635
+ // src/identity.ts
636
+ var identityRecords = /* @__PURE__ */ new WeakMap();
637
+ var nextInternId = 0;
638
+ function resolveIdentity(value) {
639
+ let current = value;
640
+ while (isObjectLike(current)) {
641
+ const readTarget = getRegisteredReadProxyTarget(current);
642
+ if (readTarget !== void 0 && readTarget !== current) {
643
+ current = readTarget;
644
+ continue;
645
+ }
646
+ const raw = rawOf(current);
647
+ if (raw !== current) {
648
+ current = raw;
649
+ continue;
650
+ }
651
+ break;
652
+ }
653
+ return current;
654
+ }
655
+ var recordFor = (key) => {
656
+ let record = identityRecords.get(key);
657
+ if (record === void 0) {
658
+ record = {};
659
+ identityRecords.set(key, record);
660
+ }
661
+ return record;
662
+ };
663
+ function identify(value) {
664
+ const target = resolveIdentity(value);
665
+ if (!isObjectLike(target)) return value;
666
+ const record = recordFor(target);
667
+ if (record.token !== void 0) return record.token;
668
+ const token = Object.freeze({});
669
+ record.token = token;
670
+ return token;
671
+ }
672
+ var internIdentity = (key) => {
673
+ const resolved = resolveIdentity(key);
674
+ const record = recordFor(resolved);
675
+ if (record.id !== void 0) return record.id;
676
+ const id = nextInternId;
677
+ nextInternId += 1;
678
+ record.id = id;
679
+ return id;
680
+ };
681
+ function isSameIdentity(first, second) {
682
+ const resolvedFirst = resolveIdentity(first);
683
+ const resolvedSecond = resolveIdentity(second);
684
+ return resolvedFirst === resolvedSecond;
685
+ }
686
+
686
687
  // src/isState.ts
687
688
  function isState(value) {
688
689
  const resolved = peelReadProxy(value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opshot",
3
- "version": "0.5.2",
3
+ "version": "0.5.3",
4
4
  "description": "Plain-object state for React: mutate it directly, re-render only the components that read what changed, and track every change operation",
5
5
  "type": "module",
6
6
  "exports": {