@signal-tree/vue 15.1.3 → 15.2.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.
@@ -1,117 +1 @@
1
- import { computed, shallowRef, triggerRef } from 'vue';
2
-
3
- const wrapReadonlyCell = source => {
4
- const cell = () => source.value;
5
- Object.defineProperties(cell, {
6
- __v_isRef: {
7
- value: true
8
- },
9
- __v_isReadonly: {
10
- value: true
11
- },
12
- effect: {
13
- value: source.effect
14
- },
15
- value: {
16
- get: () => source.value
17
- }
18
- });
19
- return cell;
20
- };
21
- const createReadonlyCell = read => wrapReadonlyCell(computed(read));
22
- const createWritableCell = read => {
23
- const cell = () => read();
24
- Object.defineProperties(cell, {
25
- __v_isRef: {
26
- value: true
27
- },
28
- value: {
29
- get: read,
30
- set: value => cell.set(value)
31
- }
32
- });
33
- cell.set = () => undefined;
34
- cell.update = update => cell.set(update(read()));
35
- let readonly;
36
- cell.asReadonly = () => readonly ??= createReadonlyCell(read);
37
- return cell;
38
- };
39
- const createVueObservationAdapter = () => {
40
- let invalidationGroupDepth = 0;
41
- const pendingInvalidations = new Set();
42
- const scheduleInvalidation = invalidate => {
43
- if (invalidationGroupDepth > 0) {
44
- pendingInvalidations.add(invalidate);
45
- return;
46
- }
47
- invalidate();
48
- };
49
- const createObservationToken = () => {
50
- const revision = shallowRef(0);
51
- const invalidate = () => triggerRef(revision);
52
- return {
53
- observe: () => void revision.value,
54
- invalidate: () => scheduleInvalidation(invalidate)
55
- };
56
- };
57
- return {
58
- createToken: createObservationToken,
59
- createWritableCell: read => {
60
- let published = read();
61
- const revision = shallowRef(0);
62
- const invalidate = () => triggerRef(revision);
63
- return {
64
- cell: createWritableCell(() => {
65
- void revision.value;
66
- return published;
67
- }),
68
- peek: read,
69
- token: {
70
- observe: () => void revision.value,
71
- invalidate: () => {
72
- published = read();
73
- scheduleInvalidation(invalidate);
74
- }
75
- }
76
- };
77
- },
78
- createWritableProjection: computeValue => ({
79
- cell: createWritableCell(computeValue),
80
- peek: computeValue
81
- }),
82
- createReadonlyCell: computeValue => {
83
- const source = computed(computeValue);
84
- return wrapReadonlyCell(source);
85
- },
86
- runInvalidationGroup(run) {
87
- let failure;
88
- let hasFailure = false;
89
- invalidationGroupDepth += 1;
90
- try {
91
- run();
92
- } catch (error) {
93
- failure = error;
94
- hasFailure = true;
95
- } finally {
96
- invalidationGroupDepth -= 1;
97
- if (invalidationGroupDepth === 0 && pendingInvalidations.size > 0) {
98
- const invalidations = [...pendingInvalidations];
99
- pendingInvalidations.clear();
100
- for (const invalidate of invalidations) {
101
- try {
102
- invalidate();
103
- } catch (error) {
104
- if (!hasFailure) {
105
- failure = error;
106
- hasFailure = true;
107
- }
108
- }
109
- }
110
- }
111
- }
112
- if (hasFailure) throw failure;
113
- }
114
- };
115
- };
116
-
117
- export { createVueObservationAdapter };
1
+ import{computed,shallowRef,triggerRef}from"vue";const EPOCH_REF=Symbol("signaltree.vue.epoch");const wrapReadonlyCell=source=>{const cell=()=>source.value;Object.defineProperties(cell,{__v_isRef:{value:true},__v_isReadonly:{value:true},effect:{value:source.effect},value:{get:()=>source.value}});return cell};const createReadonlyCell=read=>wrapReadonlyCell(computed(read));const createWritableCell=read=>{const cell=()=>read();Object.defineProperties(cell,{__v_isRef:{value:true},value:{get:read,set:value=>cell.set(value)}});cell.set=()=>void 0;cell.update=update=>cell.set(update(read()));let readonly;cell.asReadonly=()=>readonly??=createReadonlyCell(read);return cell};const createVueObservationAdapter=()=>{let invalidationGroupDepth=0;const pendingInvalidations=new Set;const scheduleInvalidation=invalidate=>{if(invalidationGroupDepth>0){pendingInvalidations.add(invalidate);return}invalidate()};const createObservationToken=()=>{const revision=shallowRef(0);const invalidate=()=>triggerRef(revision);return{observe:()=>void revision.value,invalidate:()=>scheduleInvalidation(invalidate)}};return{createToken:createObservationToken,createWritableCell:read=>{let published=read();const revision=shallowRef(0);const invalidate=()=>triggerRef(revision);return{cell:createWritableCell(()=>{void revision.value;return published}),peek:read,token:{observe:()=>void revision.value,invalidate:()=>{published=read();scheduleInvalidation(invalidate)}}}},createEpoch:()=>{const revision=shallowRef(0);const epoch=()=>revision.value;epoch[EPOCH_REF]=revision;return epoch},advanceEpoch:epoch=>{const revision=epoch[EPOCH_REF];if(revision)scheduleInvalidation(()=>triggerRef(revision))},createWritableProjection:computeValue=>({cell:createWritableCell(computeValue),peek:computeValue}),createReadonlyCell:computeValue=>{const source=computed(computeValue);return wrapReadonlyCell(source)},runInvalidationGroup(run){let failure;let hasFailure=false;invalidationGroupDepth+=1;try{run()}catch(error){failure=error;hasFailure=true}finally{invalidationGroupDepth-=1;if(invalidationGroupDepth===0&&pendingInvalidations.size>0){const invalidations=[...pendingInvalidations];pendingInvalidations.clear();for(const invalidate of invalidations){try{invalidate()}catch(error){if(!hasFailure){failure=error;hasFailure=true}}}}}if(hasFailure)throw failure}}};export{createVueObservationAdapter};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signal-tree/vue",
3
- "version": "15.1.3",
3
+ "version": "15.2.1",
4
4
  "description": "Vue observation for SignalTree.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -25,7 +25,7 @@
25
25
  "llms.txt"
26
26
  ],
27
27
  "dependencies": {
28
- "@signal-tree/kernel": "15.1.3"
28
+ "@signal-tree/kernel": "15.2.1"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "tslib": "^2.0.0",