opshot 0.5.1 → 0.5.2

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 +76 -74
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -257,9 +257,83 @@ function evict(handle, node) {
257
257
  cascade(handle, rawNode, membership.keys);
258
258
  }
259
259
 
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
+
260
332
  // src/handle.ts
261
333
  function handleOf(state) {
262
- const raw = rawOf(state);
334
+ const peeled = peelReadProxy(state);
335
+ if (!isObjectLike(peeled)) return void 0;
336
+ const raw = rawOf(peeled);
263
337
  const record = recordOf(raw);
264
338
  if (record === void 0) return void 0;
265
339
  for (const handle of record.memberships.keys()) {
@@ -395,9 +469,6 @@ function flushWindow(handle) {
395
469
  drainDeliveries();
396
470
  }
397
471
 
398
- // src/utils/predicates.ts
399
- var isObjectLike = (value) => value !== null && (typeof value === "object" || typeof value === "function");
400
-
401
472
  // src/proxy.ts
402
473
  var prototypeFunctionOf = (target, key) => {
403
474
  for (let holder = Reflect.getPrototypeOf(target); holder !== null; holder = Reflect.getPrototypeOf(holder)) {
@@ -591,7 +662,7 @@ var handler = {
591
662
  // src/createMutableState.ts
592
663
  installProxyHandler(handler);
593
664
  function createMutableState(properties, options) {
594
- const incoming = properties;
665
+ const incoming = peelReadProxy(properties);
595
666
  if (typeof incoming !== "object" || incoming === null) return properties;
596
667
  if (isIgnored(incoming)) return properties;
597
668
  if (Object.isFrozen(incoming)) return properties;
@@ -612,75 +683,6 @@ function createMutableState(properties, options) {
612
683
  return proxy;
613
684
  }
614
685
 
615
- // src/identity.ts
616
- var readProxyTargets = /* @__PURE__ */ new WeakMap();
617
- var identityRecords = /* @__PURE__ */ new WeakMap();
618
- var nextInternId = 0;
619
- var registerReadProxyTarget = (readProxy, target) => {
620
- readProxyTargets.set(readProxy, target);
621
- };
622
- var getRegisteredReadProxyTarget = (readProxy) => readProxyTargets.get(readProxy);
623
- function resolveIdentity(value) {
624
- let current = value;
625
- while (isObjectLike(current)) {
626
- const readTarget = getRegisteredReadProxyTarget(current);
627
- if (readTarget !== void 0 && readTarget !== current) {
628
- current = readTarget;
629
- continue;
630
- }
631
- const raw = rawOf(current);
632
- if (raw !== current) {
633
- current = raw;
634
- continue;
635
- }
636
- break;
637
- }
638
- return current;
639
- }
640
- var recordFor = (key) => {
641
- let record = identityRecords.get(key);
642
- if (record === void 0) {
643
- record = {};
644
- identityRecords.set(key, record);
645
- }
646
- return record;
647
- };
648
- function identify(value) {
649
- const target = resolveIdentity(value);
650
- if (!isObjectLike(target)) return value;
651
- const record = recordFor(target);
652
- if (record.token !== void 0) return record.token;
653
- const token = Object.freeze({});
654
- record.token = token;
655
- return token;
656
- }
657
- var internIdentity = (key) => {
658
- const resolved = resolveIdentity(key);
659
- const record = recordFor(resolved);
660
- if (record.id !== void 0) return record.id;
661
- const id = nextInternId;
662
- nextInternId += 1;
663
- record.id = id;
664
- return id;
665
- };
666
- function isSameIdentity(first, second) {
667
- const resolvedFirst = resolveIdentity(first);
668
- const resolvedSecond = resolveIdentity(second);
669
- return resolvedFirst === resolvedSecond;
670
- }
671
-
672
- // src/peelReadProxy.ts
673
- function peelReadProxy(value) {
674
- if (!isObjectLike(value)) return value;
675
- let current = value;
676
- while (isObjectLike(current)) {
677
- const registeredTarget = getRegisteredReadProxyTarget(current);
678
- if (registeredTarget === void 0) break;
679
- current = registeredTarget;
680
- }
681
- return current;
682
- }
683
-
684
686
  // src/isState.ts
685
687
  function isState(value) {
686
688
  const resolved = peelReadProxy(value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opshot",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
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": {