rask-ui 0.17.0 → 0.18.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/dist/batch.d.ts.map +1 -1
- package/dist/batch.js +32 -18
- package/dist/component.d.ts +14 -11
- package/dist/component.d.ts.map +1 -1
- package/dist/component.js +109 -81
- package/dist/useDerived.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/batch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AA+BlE,wBAAgB,KAAK,CAAC,EAAE,EAAE,cAAc,QAgBvC;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,QA6CvC"}
|
package/dist/batch.js
CHANGED
|
@@ -23,23 +23,9 @@ function flushAsyncQueue() {
|
|
|
23
23
|
}
|
|
24
24
|
asyncQueue.length = 0;
|
|
25
25
|
}
|
|
26
|
-
function flushSyncQueue(queue) {
|
|
27
|
-
if (!queue.length)
|
|
28
|
-
return;
|
|
29
|
-
// No snapshot, just iterate.
|
|
30
|
-
// New callbacks queued via nested syncBatch will create
|
|
31
|
-
// their own queue on the stack and flush independently.
|
|
32
|
-
for (let i = 0; i < queue.length; i++) {
|
|
33
|
-
const cb = queue[i];
|
|
34
|
-
queue[i] = undefined;
|
|
35
|
-
cb();
|
|
36
|
-
cb.__queued = false;
|
|
37
|
-
}
|
|
38
|
-
queue.length = 0;
|
|
39
|
-
}
|
|
40
26
|
export function queue(cb) {
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
if (cb.__queued)
|
|
28
|
+
return;
|
|
43
29
|
cb.__queued = true;
|
|
44
30
|
// If we're in a sync batch, push to the current sync queue
|
|
45
31
|
if (syncQueueStack.length) {
|
|
@@ -64,7 +50,35 @@ export function syncBatch(cb) {
|
|
|
64
50
|
syncQueueStack.pop();
|
|
65
51
|
throw e;
|
|
66
52
|
}
|
|
67
|
-
//
|
|
53
|
+
// CASCADING SYNCHRONOUS UPDATES
|
|
54
|
+
// ------------------------------
|
|
55
|
+
// Keep flushing the queue in a loop while it has work. This is critical for handling
|
|
56
|
+
// cascading reactive updates where one observer's notification triggers another.
|
|
57
|
+
//
|
|
58
|
+
// Example cascade: state → derived → component
|
|
59
|
+
// 1. User updates state in a syncBatch
|
|
60
|
+
// 2. Derived observer is notified and queued
|
|
61
|
+
// 3. Derived observer runs, marks derived as dirty
|
|
62
|
+
// 4. Derived's signal notifies component observers
|
|
63
|
+
// 5. Component observers are added to the SAME queue (because it's still on the stack)
|
|
64
|
+
// 6. Loop continues, flushing component observers
|
|
65
|
+
//
|
|
66
|
+
// By keeping the queue on the stack during the flush loop, all synchronous cascades
|
|
67
|
+
// are captured in the same batch. This ensures:
|
|
68
|
+
// - No updates escape to the async queue
|
|
69
|
+
// - Components render with fully updated derived values
|
|
70
|
+
// - Deduplication works across the entire cascade (same observer can't be queued twice)
|
|
71
|
+
//
|
|
72
|
+
// The loop terminates when all cascades have settled (queue is empty).
|
|
73
|
+
while (queue.length > 0) {
|
|
74
|
+
for (let i = 0; i < queue.length; i++) {
|
|
75
|
+
const cb = queue[i];
|
|
76
|
+
queue[i] = undefined;
|
|
77
|
+
cb();
|
|
78
|
+
cb.__queued = false;
|
|
79
|
+
}
|
|
80
|
+
queue.length = 0;
|
|
81
|
+
}
|
|
82
|
+
// Pop the queue after everything is flushed
|
|
68
83
|
syncQueueStack.pop();
|
|
69
|
-
flushSyncQueue(queue);
|
|
70
84
|
}
|
package/dist/component.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { VNode, Component, Props } from "inferno";
|
|
1
|
+
import { VNode, Component, Props, InfernoNode } from "inferno";
|
|
2
2
|
import { Observer } from "./observation";
|
|
3
3
|
export type RaskStatelessFunctionComponent<P extends Props<any>> = (() => VNode) | ((props: P) => VNode);
|
|
4
4
|
export declare class RaskStatelessComponent extends Component {
|
|
5
5
|
renderFn: RaskStatelessFunctionComponent<any>;
|
|
6
|
+
private isNotified;
|
|
7
|
+
private isReconciling;
|
|
6
8
|
observer: Observer;
|
|
7
|
-
|
|
9
|
+
private reactiveProps;
|
|
10
|
+
shouldComponentUpdate(): boolean;
|
|
11
|
+
componentWillMount(): void;
|
|
12
|
+
componentWillReceiveProps(nextProps: any): void;
|
|
8
13
|
render(): VNode;
|
|
9
14
|
}
|
|
10
15
|
export declare function getCurrentComponent(): RaskStatefulComponent<any> | undefined;
|
|
@@ -15,10 +20,10 @@ export declare class RaskStatefulComponent<P extends Props<any>> extends Compone
|
|
|
15
20
|
setup: RaskStatefulFunctionComponent<P>;
|
|
16
21
|
private renderFn?;
|
|
17
22
|
private reactiveProps?;
|
|
18
|
-
private
|
|
23
|
+
private isNotified;
|
|
24
|
+
private isReconciling;
|
|
25
|
+
observer: Observer;
|
|
19
26
|
isRendering: boolean;
|
|
20
|
-
private willRender;
|
|
21
|
-
private nextProps;
|
|
22
27
|
effects: Array<{
|
|
23
28
|
isDirty: boolean;
|
|
24
29
|
run: () => void;
|
|
@@ -27,14 +32,12 @@ export declare class RaskStatefulComponent<P extends Props<any>> extends Compone
|
|
|
27
32
|
getChildContext(): any;
|
|
28
33
|
onMounts: Array<() => void>;
|
|
29
34
|
onCleanups: Array<() => void>;
|
|
30
|
-
private createReactiveProps;
|
|
31
35
|
componentDidMount(): void;
|
|
32
36
|
componentWillUnmount(): void;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
shouldComponentUpdate(nextProps: Props<any>): boolean;
|
|
37
|
+
componentWillReceiveProps(nextProps: Readonly<{
|
|
38
|
+
children?: InfernoNode;
|
|
39
|
+
} & P>): void;
|
|
40
|
+
shouldComponentUpdate(): boolean;
|
|
38
41
|
render(): any;
|
|
39
42
|
}
|
|
40
43
|
export declare function createComponent(props: Props<any>, key?: string): VNode;
|
package/dist/component.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,SAAS,EACT,KAAK,EACL,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAsB,QAAQ,EAAU,MAAM,eAAe,CAAC;AAIrE,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAC3D,CAAC,MAAM,KAAK,CAAC,GACb,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;AAE1B,qBAAa,sBAAuB,SAAQ,SAAS;IAC3C,QAAQ,EAAE,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,QAAQ,WAML;IACH,OAAO,CAAC,aAAa,CAAc;IAEnC,qBAAqB,IAAI,OAAO;IAMhC,kBAAkB,IAAI,IAAI;IAG1B,yBAAyB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;IAe/C,MAAM;CAOP;AAID,wBAAgB,mBAAmB,2CAElC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,IAAI,QAM5C;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,QAMxC;AAED,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAC1D,CAAC,MAAM,MAAM,KAAK,CAAC,GACnB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC;AAEhC,qBAAa,qBAAqB,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IACnE,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAa;IAwBnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAE9B,QAAQ,WAOL;IAEH,WAAW,UAAS;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAM;IAC3D,QAAQ,gBAAa;IACrB,eAAe;IAUf,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IACjC,UAAU,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IAEnC,iBAAiB,IAAI,IAAI;IAGzB,oBAAoB,IAAI,IAAI;IAI5B,yBAAyB,CACvB,SAAS,EAAE,QAAQ,CAAC;QAAE,QAAQ,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,CAAC,CAAC,GAClD,IAAI;IAcP,qBAAqB,IAAI,OAAO;IAMhC,MAAM;CAyCP;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,SAO9D"}
|
package/dist/component.js
CHANGED
|
@@ -1,23 +1,43 @@
|
|
|
1
|
-
import { createComponentVNode, Component } from "inferno";
|
|
1
|
+
import { createComponentVNode, Component, } from "inferno";
|
|
2
2
|
import { getCurrentObserver, Observer, Signal } from "./observation";
|
|
3
3
|
import { syncBatch } from "./batch";
|
|
4
4
|
import { PROXY_MARKER } from "./useState";
|
|
5
5
|
export class RaskStatelessComponent extends Component {
|
|
6
|
+
isNotified = false;
|
|
7
|
+
isReconciling = false;
|
|
6
8
|
observer = new Observer(() => {
|
|
9
|
+
if (this.isReconciling) {
|
|
10
|
+
this.isNotified = true;
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
7
13
|
this.forceUpdate();
|
|
8
14
|
});
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
reactiveProps;
|
|
16
|
+
shouldComponentUpdate() {
|
|
17
|
+
const shouldRender = this.isNotified;
|
|
18
|
+
this.isNotified = false;
|
|
19
|
+
this.isReconciling = false;
|
|
20
|
+
return shouldRender;
|
|
21
|
+
}
|
|
22
|
+
componentWillMount() {
|
|
23
|
+
this.reactiveProps = createReactiveProps(this);
|
|
24
|
+
}
|
|
25
|
+
componentWillReceiveProps(nextProps) {
|
|
26
|
+
this.isReconciling = true;
|
|
27
|
+
syncBatch(() => {
|
|
28
|
+
for (const prop in nextProps) {
|
|
29
|
+
if (this.props[prop] === nextProps[prop]) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
this.reactiveProps[prop] = nextProps[prop];
|
|
14
34
|
}
|
|
15
|
-
}
|
|
16
|
-
|
|
35
|
+
});
|
|
36
|
+
this.props = nextProps;
|
|
17
37
|
}
|
|
18
38
|
render() {
|
|
19
39
|
const stopObserving = this.observer.observe();
|
|
20
|
-
const result = this.renderFn(this.
|
|
40
|
+
const result = this.renderFn(this.reactiveProps);
|
|
21
41
|
stopObserving();
|
|
22
42
|
return result;
|
|
23
43
|
}
|
|
@@ -41,19 +61,39 @@ export function useCleanup(cb) {
|
|
|
41
61
|
export class RaskStatefulComponent extends Component {
|
|
42
62
|
renderFn;
|
|
43
63
|
reactiveProps;
|
|
64
|
+
// RECONCILIATION FLAGS
|
|
65
|
+
// --------------------
|
|
66
|
+
// These flags coordinate observer notifications with Inferno's reconciliation lifecycle
|
|
67
|
+
// to prevent double-rendering while ensuring effects can update state synchronously.
|
|
68
|
+
//
|
|
69
|
+
// isReconciling: Set to true during componentWillReceiveProps. When true, the observer
|
|
70
|
+
// will NOT call forceUpdate() immediately, avoiding a render while Inferno is already
|
|
71
|
+
// in the middle of updating this component (which would cause a double-render).
|
|
72
|
+
//
|
|
73
|
+
// isNotified: Tracks whether the observer was notified during reconciliation. If true,
|
|
74
|
+
// it means reactive prop updates or effects have modified state, and the component
|
|
75
|
+
// should render to reflect those changes.
|
|
76
|
+
//
|
|
77
|
+
// Flow example (props change triggers effect that updates state):
|
|
78
|
+
// 1. componentWillReceiveProps → isReconciling = true
|
|
79
|
+
// 2. Prop updates in syncBatch → reactive prop signals notify
|
|
80
|
+
// 3. Observer fires → sees isReconciling → sets isNotified = true, skips forceUpdate()
|
|
81
|
+
// 4. shouldComponentUpdate → checks isNotified → returns true
|
|
82
|
+
// 5. Component renders once with all updates (props + effect state changes)
|
|
83
|
+
//
|
|
84
|
+
// This ensures components render synchronously with fully updated state, without
|
|
85
|
+
// calling forceUpdate() at the wrong time during Inferno's reconciliation.
|
|
86
|
+
isNotified = false;
|
|
87
|
+
isReconciling = false;
|
|
44
88
|
observer = new Observer(() => {
|
|
45
|
-
if (this.
|
|
89
|
+
if (this.isReconciling) {
|
|
90
|
+
this.isNotified = true;
|
|
46
91
|
return;
|
|
47
92
|
}
|
|
48
93
|
this.forceUpdate();
|
|
49
94
|
});
|
|
50
95
|
// Flag to prevent props from tracking in render scope (We use props reconciliation)
|
|
51
96
|
isRendering = false;
|
|
52
|
-
// Flag to prevent observer notifications to cause render during reconciliation
|
|
53
|
-
willRender = true;
|
|
54
|
-
// Since reactive props updates before the reconciliation (without causing a new one), we
|
|
55
|
-
// need to return these from the reactive props
|
|
56
|
-
nextProps = this.props;
|
|
57
97
|
effects = [];
|
|
58
98
|
contexts = new Map();
|
|
59
99
|
getChildContext() {
|
|
@@ -67,90 +107,35 @@ export class RaskStatefulComponent extends Component {
|
|
|
67
107
|
}
|
|
68
108
|
onMounts = [];
|
|
69
109
|
onCleanups = [];
|
|
70
|
-
createReactiveProps() {
|
|
71
|
-
const reactiveProps = {};
|
|
72
|
-
const self = this;
|
|
73
|
-
const signals = new Map();
|
|
74
|
-
for (const prop in this.nextProps) {
|
|
75
|
-
const value = this.nextProps[prop];
|
|
76
|
-
// Skip known non-reactive props
|
|
77
|
-
if (prop === "key" || prop === "ref") {
|
|
78
|
-
reactiveProps[prop] = value;
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
// Skip objects/arrays - they're already reactive if they're proxies
|
|
82
|
-
// No need to wrap them in additional signals
|
|
83
|
-
if (typeof value === "object" &&
|
|
84
|
-
value !== null &&
|
|
85
|
-
PROXY_MARKER in value) {
|
|
86
|
-
reactiveProps[prop] = value;
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
// Only create reactive getters for primitives
|
|
90
|
-
Object.defineProperty(reactiveProps, prop, {
|
|
91
|
-
enumerable: true,
|
|
92
|
-
get() {
|
|
93
|
-
const observer = getCurrentObserver();
|
|
94
|
-
if (observer) {
|
|
95
|
-
// Lazy create signal only when accessed in reactive context
|
|
96
|
-
let signal = signals.get(prop);
|
|
97
|
-
if (!signal) {
|
|
98
|
-
signal = new Signal();
|
|
99
|
-
signals.set(prop, signal);
|
|
100
|
-
}
|
|
101
|
-
observer.subscribeSignal(signal);
|
|
102
|
-
}
|
|
103
|
-
// @ts-ignore
|
|
104
|
-
return self.nextProps[prop];
|
|
105
|
-
},
|
|
106
|
-
set(value) {
|
|
107
|
-
// Only notify if signal was created (i.e., prop was accessed reactively)
|
|
108
|
-
const signal = signals.get(prop);
|
|
109
|
-
if (signal) {
|
|
110
|
-
signal.notify();
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
return reactiveProps;
|
|
116
|
-
}
|
|
117
110
|
componentDidMount() {
|
|
118
111
|
this.onMounts.forEach((cb) => cb());
|
|
119
112
|
}
|
|
120
113
|
componentWillUnmount() {
|
|
121
114
|
this.onCleanups.forEach((cb) => cb());
|
|
122
115
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
*/
|
|
126
|
-
componentWillUpdate(nextProps) {
|
|
127
|
-
this.willRender = true;
|
|
128
|
-
this.nextProps = nextProps;
|
|
116
|
+
componentWillReceiveProps(nextProps) {
|
|
117
|
+
this.isReconciling = true;
|
|
129
118
|
syncBatch(() => {
|
|
130
119
|
for (const prop in nextProps) {
|
|
131
|
-
if (prop ===
|
|
132
|
-
this.props[prop] === nextProps[prop]) {
|
|
120
|
+
if (this.props[prop] === nextProps[prop]) {
|
|
133
121
|
continue;
|
|
134
122
|
}
|
|
135
123
|
// @ts-ignore
|
|
136
124
|
this.reactiveProps[prop] = nextProps[prop];
|
|
137
125
|
}
|
|
138
126
|
});
|
|
127
|
+
this.props = nextProps;
|
|
139
128
|
}
|
|
140
|
-
shouldComponentUpdate(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return false;
|
|
129
|
+
shouldComponentUpdate() {
|
|
130
|
+
const shouldRender = this.isNotified;
|
|
131
|
+
this.isNotified = false;
|
|
132
|
+
this.isReconciling = false;
|
|
133
|
+
return shouldRender;
|
|
149
134
|
}
|
|
150
135
|
render() {
|
|
151
136
|
currentComponent = this;
|
|
152
137
|
if (!this.renderFn) {
|
|
153
|
-
this.reactiveProps =
|
|
138
|
+
this.reactiveProps = createReactiveProps(this);
|
|
154
139
|
try {
|
|
155
140
|
this.renderFn = this.setup(this.reactiveProps);
|
|
156
141
|
if (typeof this.renderFn !== "function") {
|
|
@@ -171,7 +156,6 @@ export class RaskStatefulComponent extends Component {
|
|
|
171
156
|
this.isRendering = true;
|
|
172
157
|
result = this.renderFn();
|
|
173
158
|
this.isRendering = false;
|
|
174
|
-
this.willRender = false;
|
|
175
159
|
}
|
|
176
160
|
catch (error) {
|
|
177
161
|
if (typeof this.context.notifyError !== "function") {
|
|
@@ -189,3 +173,47 @@ export class RaskStatefulComponent extends Component {
|
|
|
189
173
|
export function createComponent(props, key) {
|
|
190
174
|
return createComponentVNode(4 /* VNodeFlags.ComponentClass */, RaskStatefulComponent, props, key);
|
|
191
175
|
}
|
|
176
|
+
function createReactiveProps(comp) {
|
|
177
|
+
const reactiveProps = {};
|
|
178
|
+
const signals = new Map();
|
|
179
|
+
for (const prop in comp.props) {
|
|
180
|
+
const value = comp.props[prop];
|
|
181
|
+
// Skip known non-reactive props
|
|
182
|
+
if (prop === "key" || prop === "ref") {
|
|
183
|
+
reactiveProps[prop] = value;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
// Skip objects/arrays - they're already reactive if they're proxies
|
|
187
|
+
// No need to wrap them in additional signals
|
|
188
|
+
if (typeof value === "object" && value !== null && PROXY_MARKER in value) {
|
|
189
|
+
reactiveProps[prop] = value;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
// Only create reactive getters for primitives
|
|
193
|
+
Object.defineProperty(reactiveProps, prop, {
|
|
194
|
+
enumerable: true,
|
|
195
|
+
get() {
|
|
196
|
+
const observer = getCurrentObserver();
|
|
197
|
+
if (observer) {
|
|
198
|
+
// Lazy create signal only when accessed in reactive context
|
|
199
|
+
let signal = signals.get(prop);
|
|
200
|
+
if (!signal) {
|
|
201
|
+
signal = new Signal();
|
|
202
|
+
signals.set(prop, signal);
|
|
203
|
+
}
|
|
204
|
+
observer.subscribeSignal(signal);
|
|
205
|
+
}
|
|
206
|
+
return comp.props[prop];
|
|
207
|
+
},
|
|
208
|
+
set(value) {
|
|
209
|
+
comp.props[prop] = value;
|
|
210
|
+
// Only notify if signal was created (i.e., prop was accessed reactively)
|
|
211
|
+
const signal = signals.get(prop);
|
|
212
|
+
if (signal) {
|
|
213
|
+
signal.notify();
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return reactiveProps;
|
|
219
|
+
}
|
package/dist/useDerived.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDerived.d.ts","sourceRoot":"","sources":["../src/useDerived.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDerived.d.ts","sourceRoot":"","sources":["../src/useDerived.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAC5D,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAiFZ"}
|