solid-js 1.1.2 → 1.1.6-beta.0
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/dev.cjs +169 -147
- package/dist/dev.js +169 -147
- package/dist/solid.cjs +159 -145
- package/dist/solid.js +159 -145
- package/package.json +2 -2
- package/store/dist/dev.cjs +2 -2
- package/store/dist/dev.js +2 -2
- package/store/dist/store.cjs +2 -2
- package/store/dist/store.js +2 -2
- package/store/types/store.d.ts +15 -9
- package/types/jsx.d.ts +4 -0
- package/types/reactive/array.d.ts +14 -0
- package/types/reactive/observable.d.ts +10 -0
- package/types/reactive/signal noarray.d.ts +429 -0
- package/types/reactive/signal option.d.ts +178 -0
- package/types/reactive/signal.d.ts +279 -30
- package/types/render/Suspense.d.ts +16 -0
- package/types/render/component.d.ts +10 -4
- package/types/render/flow.d.ts +70 -2
- package/web/dist/dev.cjs +11 -7
- package/web/dist/dev.js +11 -7
- package/web/dist/server.cjs +2 -2
- package/web/dist/server.js +2 -2
- package/web/dist/web.cjs +11 -7
- package/web/dist/web.js +11 -7
- package/web/types/index.d.ts +14 -0
package/dist/solid.js
CHANGED
|
@@ -141,7 +141,6 @@ const UNOWNED = {
|
|
|
141
141
|
context: null,
|
|
142
142
|
owner: null
|
|
143
143
|
};
|
|
144
|
-
const [transPending, setTransPending] = /*@__PURE__*/createSignal(false);
|
|
145
144
|
var Owner = null;
|
|
146
145
|
let Transition = null;
|
|
147
146
|
let Scheduler = null;
|
|
@@ -150,6 +149,7 @@ let Pending = null;
|
|
|
150
149
|
let Updates = null;
|
|
151
150
|
let Effects = null;
|
|
152
151
|
let ExecCount = 0;
|
|
152
|
+
const [transPending, setTransPending] = /*@__PURE__*/createSignal(false);
|
|
153
153
|
function createRoot(fn, detachedOwner) {
|
|
154
154
|
detachedOwner && (Owner = detachedOwner);
|
|
155
155
|
const listener = Listener,
|
|
@@ -180,11 +180,23 @@ function createSignal(value, options) {
|
|
|
180
180
|
pending: NOTPENDING,
|
|
181
181
|
comparator: options.equals || undefined
|
|
182
182
|
};
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
183
|
+
if (Transition && Transition.running) Transition.sources.add(s);
|
|
184
|
+
return [() => {
|
|
185
|
+
let sig = s;
|
|
186
|
+
Transition && Transition.running && (sig = Transition.lookup.get(s) || sig);
|
|
187
|
+
if (Listener !== null) logRead(sig, Listener);
|
|
188
|
+
return sig.value;
|
|
189
|
+
}, value => {
|
|
190
|
+
let sig = s;
|
|
191
|
+
if (Transition) {
|
|
192
|
+
if (Transition.running && !(sig = Transition.lookup.get(s))) {
|
|
193
|
+
sig = forkSource(s);
|
|
194
|
+
} else if (!Transition.running) {
|
|
195
|
+
const other = Transition.lookup.get(s);
|
|
196
|
+
if (other) writeSignal(other, value);
|
|
197
|
+
}
|
|
186
198
|
}
|
|
187
|
-
return writeSignal(
|
|
199
|
+
return writeSignal(sig, value);
|
|
188
200
|
}];
|
|
189
201
|
}
|
|
190
202
|
function createComputed(fn, value, options) {
|
|
@@ -209,9 +221,20 @@ function createMemo(fn, value, options) {
|
|
|
209
221
|
c.observerSlots = null;
|
|
210
222
|
c.comparator = options.equals || undefined;
|
|
211
223
|
updateComputation(c);
|
|
212
|
-
return
|
|
224
|
+
return () => {
|
|
225
|
+
let sig = c;
|
|
226
|
+
Transition && Transition.running && (sig = Transition.lookup.get(c) || sig);
|
|
227
|
+
if (c.state && c.sources) {
|
|
228
|
+
const updates = Updates;
|
|
229
|
+
Updates = null;
|
|
230
|
+
c.state === STALE ? updateComputation(c) : lookDownstream(c);
|
|
231
|
+
Updates = updates;
|
|
232
|
+
}
|
|
233
|
+
if (Listener !== null) logRead(sig, Listener);
|
|
234
|
+
return sig.value;
|
|
235
|
+
};
|
|
213
236
|
}
|
|
214
|
-
function createResource(source, fetcher, options
|
|
237
|
+
function createResource(source, fetcher, options) {
|
|
215
238
|
if (arguments.length === 2) {
|
|
216
239
|
if (typeof fetcher === "object") {
|
|
217
240
|
options = fetcher;
|
|
@@ -223,7 +246,7 @@ function createResource(source, fetcher, options = {}) {
|
|
|
223
246
|
source = true;
|
|
224
247
|
}
|
|
225
248
|
const contexts = new Set(),
|
|
226
|
-
[s, set] = createSignal(options
|
|
249
|
+
[s, set] = createSignal(options?.initialValue),
|
|
227
250
|
[track, trigger] = createSignal(undefined, {
|
|
228
251
|
equals: false
|
|
229
252
|
}),
|
|
@@ -344,8 +367,9 @@ function createDeferred(source, options) {
|
|
|
344
367
|
}
|
|
345
368
|
function createSelector(source, fn = equalFn, options) {
|
|
346
369
|
const subs = new Map();
|
|
370
|
+
let current;
|
|
347
371
|
const node = createComputation(p => {
|
|
348
|
-
const v = source();
|
|
372
|
+
const v = current = source();
|
|
349
373
|
for (const key of subs.keys()) if (fn(key, v) || p !== undefined && fn(key, p)) {
|
|
350
374
|
const l = subs.get(key);
|
|
351
375
|
for (const c of l.values()) {
|
|
@@ -361,11 +385,9 @@ function createSelector(source, fn = equalFn, options) {
|
|
|
361
385
|
if (listener = Listener) {
|
|
362
386
|
let l;
|
|
363
387
|
if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));
|
|
364
|
-
onCleanup(() =>
|
|
365
|
-
l.size > 1 ? l.delete(listener) : subs.delete(key);
|
|
366
|
-
});
|
|
388
|
+
onCleanup(() => l.size > 1 ? l.delete(listener) : subs.delete(key));
|
|
367
389
|
}
|
|
368
|
-
return fn(key,
|
|
390
|
+
return fn(key, current);
|
|
369
391
|
};
|
|
370
392
|
}
|
|
371
393
|
function batch(fn) {
|
|
@@ -378,12 +400,12 @@ function batch(fn) {
|
|
|
378
400
|
Pending = null;
|
|
379
401
|
}
|
|
380
402
|
runUpdates(() => {
|
|
381
|
-
for (let i = 0; i < q.length; i
|
|
403
|
+
for (let i = 0; i < q.length; i++) {
|
|
382
404
|
const data = q[i];
|
|
383
405
|
if (data.pending !== NOTPENDING) {
|
|
384
406
|
const pending = data.pending;
|
|
385
407
|
data.pending = NOTPENDING;
|
|
386
|
-
|
|
408
|
+
writeSource(data, pending);
|
|
387
409
|
}
|
|
388
410
|
}
|
|
389
411
|
}, false);
|
|
@@ -448,27 +470,29 @@ function enableScheduling(scheduler = requestCallback) {
|
|
|
448
470
|
Scheduler = scheduler;
|
|
449
471
|
}
|
|
450
472
|
function startTransition(fn, cb) {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
473
|
+
queueMicrotask(() => {
|
|
474
|
+
if (Scheduler || SuspenseContext) {
|
|
475
|
+
Transition || (Transition = {
|
|
476
|
+
sources: new Set(),
|
|
477
|
+
lookup: new Map(),
|
|
478
|
+
updated: new Set(),
|
|
479
|
+
effects: [],
|
|
480
|
+
promises: new Set(),
|
|
481
|
+
queue: new Set(),
|
|
482
|
+
running: true,
|
|
483
|
+
cb: []
|
|
484
|
+
});
|
|
485
|
+
cb && Transition.cb.push(cb);
|
|
486
|
+
Transition.running = true;
|
|
487
|
+
}
|
|
488
|
+
batch(fn);
|
|
489
|
+
if (!Scheduler && !SuspenseContext && cb) cb();
|
|
490
|
+
});
|
|
466
491
|
}
|
|
467
492
|
function useTransition() {
|
|
468
493
|
return [transPending, startTransition];
|
|
469
494
|
}
|
|
470
495
|
function resumeEffects(e) {
|
|
471
|
-
Transition && (Transition.running = true);
|
|
472
496
|
Effects.push.apply(Effects, e);
|
|
473
497
|
e.length = 0;
|
|
474
498
|
}
|
|
@@ -491,61 +515,44 @@ let SuspenseContext;
|
|
|
491
515
|
function getSuspenseContext() {
|
|
492
516
|
return SuspenseContext || (SuspenseContext = createContext({}));
|
|
493
517
|
}
|
|
494
|
-
function
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
518
|
+
function logRead(node, to) {
|
|
519
|
+
const sSlot = node.observers ? node.observers.length : 0;
|
|
520
|
+
if (!to.sources) {
|
|
521
|
+
to.sources = [node];
|
|
522
|
+
to.sourceSlots = [sSlot];
|
|
523
|
+
} else {
|
|
524
|
+
to.sources.push(node);
|
|
525
|
+
to.sourceSlots.push(sSlot);
|
|
500
526
|
}
|
|
501
|
-
if (
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
Listener.sources.push(this);
|
|
508
|
-
Listener.sourceSlots.push(sSlot);
|
|
509
|
-
}
|
|
510
|
-
if (!this.observers) {
|
|
511
|
-
this.observers = [Listener];
|
|
512
|
-
this.observerSlots = [Listener.sources.length - 1];
|
|
513
|
-
} else {
|
|
514
|
-
this.observers.push(Listener);
|
|
515
|
-
this.observerSlots.push(Listener.sources.length - 1);
|
|
516
|
-
}
|
|
527
|
+
if (!node.observers) {
|
|
528
|
+
node.observers = [to];
|
|
529
|
+
node.observerSlots = [to.sources.length - 1];
|
|
530
|
+
} else {
|
|
531
|
+
node.observers.push(to);
|
|
532
|
+
node.observerSlots.push(to.sources.length - 1);
|
|
517
533
|
}
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
if (node.comparator) {
|
|
523
|
-
if (Transition && Transition.running && Transition.sources.has(node)) {
|
|
524
|
-
if (node.comparator(node.tValue, value)) return value;
|
|
525
|
-
} else if (node.comparator(node.value, value)) return value;
|
|
534
|
+
}
|
|
535
|
+
function writeSignal(node, value) {
|
|
536
|
+
if (typeof value === "function") {
|
|
537
|
+
value = value(node.pending !== NOTPENDING ? node.pending : node.value);
|
|
526
538
|
}
|
|
539
|
+
return writeSource(node, value);
|
|
540
|
+
}
|
|
541
|
+
function writeSource(node, value) {
|
|
542
|
+
if (node.comparator && node.comparator(node.value, value)) return value;
|
|
527
543
|
if (Pending) {
|
|
528
544
|
if (node.pending === NOTPENDING) Pending.push(node);
|
|
529
545
|
node.pending = value;
|
|
530
546
|
return value;
|
|
531
547
|
}
|
|
532
|
-
|
|
533
|
-
if (Transition) {
|
|
534
|
-
TransitionRunning = Transition.running;
|
|
535
|
-
if (TransitionRunning || !isComp && Transition.sources.has(node)) {
|
|
536
|
-
Transition.sources.add(node);
|
|
537
|
-
node.tValue = value;
|
|
538
|
-
}
|
|
539
|
-
if (!TransitionRunning) node.value = value;
|
|
540
|
-
} else node.value = value;
|
|
548
|
+
node.value = value;
|
|
541
549
|
if (node.observers && node.observers.length) {
|
|
542
550
|
runUpdates(() => {
|
|
543
|
-
for (let i = 0; i < node.observers.length; i
|
|
551
|
+
for (let i = 0; i < node.observers.length; i++) {
|
|
544
552
|
const o = node.observers[i];
|
|
545
|
-
if (TransitionRunning && Transition.disposed.has(o)) continue;
|
|
546
553
|
if (o.pure) Updates.push(o);else Effects.push(o);
|
|
547
|
-
if (o.observers &&
|
|
548
|
-
|
|
554
|
+
if (o.observers && !o.state) markUpstream(o);
|
|
555
|
+
o.state = STALE;
|
|
549
556
|
}
|
|
550
557
|
if (Updates.length > 10e5) {
|
|
551
558
|
Updates = [];
|
|
@@ -558,17 +565,21 @@ function writeSignal(node, value, isComp) {
|
|
|
558
565
|
}
|
|
559
566
|
function updateComputation(node) {
|
|
560
567
|
if (!node.fn) return;
|
|
568
|
+
if (Transition && Transition.sources.has(node)) {
|
|
569
|
+
Transition.updated.add(node);
|
|
570
|
+
if (!Transition.running) {
|
|
571
|
+
return queueMicrotask(() => runUpdates(() => {
|
|
572
|
+
Transition.running = true;
|
|
573
|
+
updateComputation(node);
|
|
574
|
+
}, false));
|
|
575
|
+
}
|
|
576
|
+
}
|
|
561
577
|
cleanNode(node);
|
|
562
578
|
const owner = Owner,
|
|
563
579
|
listener = Listener,
|
|
564
580
|
time = ExecCount;
|
|
565
581
|
Listener = Owner = node;
|
|
566
582
|
runComputation(node, node.value, time);
|
|
567
|
-
if (Transition && !Transition.running && Transition.sources.has(node)) {
|
|
568
|
-
Transition.running = true;
|
|
569
|
-
runComputation(node, node.tValue, time);
|
|
570
|
-
Transition.running = false;
|
|
571
|
-
}
|
|
572
583
|
Listener = listener;
|
|
573
584
|
Owner = owner;
|
|
574
585
|
}
|
|
@@ -581,10 +592,7 @@ function runComputation(node, value, time) {
|
|
|
581
592
|
}
|
|
582
593
|
if (!node.updatedAt || node.updatedAt <= time) {
|
|
583
594
|
if (node.observers && node.observers.length) {
|
|
584
|
-
|
|
585
|
-
} else if (Transition && Transition.running && node.pure) {
|
|
586
|
-
Transition.sources.add(node);
|
|
587
|
-
node.tValue = nextValue;
|
|
595
|
+
writeSource(node, nextValue);
|
|
588
596
|
} else node.value = nextValue;
|
|
589
597
|
node.updatedAt = time;
|
|
590
598
|
}
|
|
@@ -593,7 +601,7 @@ function createComputation(fn, init, pure, state = STALE, options) {
|
|
|
593
601
|
const c = {
|
|
594
602
|
fn,
|
|
595
603
|
state: state,
|
|
596
|
-
updatedAt:
|
|
604
|
+
updatedAt: 0,
|
|
597
605
|
owned: null,
|
|
598
606
|
sources: null,
|
|
599
607
|
sourceSlots: null,
|
|
@@ -603,41 +611,24 @@ function createComputation(fn, init, pure, state = STALE, options) {
|
|
|
603
611
|
context: null,
|
|
604
612
|
pure
|
|
605
613
|
};
|
|
606
|
-
if (Transition && Transition.running) {
|
|
607
|
-
c.state = 0;
|
|
608
|
-
c.tState = state;
|
|
609
|
-
}
|
|
610
614
|
if (Owner === null) ;else if (Owner !== UNOWNED) {
|
|
611
|
-
if (
|
|
612
|
-
if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);
|
|
613
|
-
} else {
|
|
614
|
-
if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);
|
|
615
|
-
}
|
|
615
|
+
if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);
|
|
616
616
|
}
|
|
617
|
+
if (Transition && Transition.running) Transition.sources.add(c);
|
|
617
618
|
return c;
|
|
618
619
|
}
|
|
619
620
|
function runTop(node) {
|
|
620
|
-
|
|
621
|
-
if (!runningTransition && node.state !== STALE) return node.state = 0;
|
|
622
|
-
if (runningTransition && node.tState !== STALE) return node.tState = 0;
|
|
621
|
+
if (node.state !== STALE) return node.state = 0;
|
|
623
622
|
if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);
|
|
624
623
|
const ancestors = [node];
|
|
625
624
|
while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {
|
|
626
|
-
if (
|
|
627
|
-
if (node.state || runningTransition && node.tState) ancestors.push(node);
|
|
625
|
+
if (node.state) ancestors.push(node);
|
|
628
626
|
}
|
|
629
627
|
for (let i = ancestors.length - 1; i >= 0; i--) {
|
|
630
628
|
node = ancestors[i];
|
|
631
|
-
if (
|
|
632
|
-
let top = node,
|
|
633
|
-
prev = ancestors[i + 1];
|
|
634
|
-
while ((top = top.owner) && top !== prev) {
|
|
635
|
-
if (Transition.disposed.has(top)) return;
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
if (node.state === STALE || runningTransition && node.tState === STALE) {
|
|
629
|
+
if (node.state === STALE) {
|
|
639
630
|
updateComputation(node);
|
|
640
|
-
} else if (node.state === PENDING
|
|
631
|
+
} else if (node.state === PENDING) {
|
|
641
632
|
const updates = Updates;
|
|
642
633
|
Updates = null;
|
|
643
634
|
lookDownstream(node);
|
|
@@ -674,24 +665,11 @@ function completeUpdates(wait) {
|
|
|
674
665
|
setTransPending(true);
|
|
675
666
|
return;
|
|
676
667
|
}
|
|
677
|
-
const
|
|
668
|
+
const t = Transition;
|
|
678
669
|
cbs = Transition.cb;
|
|
679
|
-
Effects.forEach(e => {
|
|
680
|
-
e.state = STALE;
|
|
681
|
-
delete e.tState;
|
|
682
|
-
});
|
|
683
670
|
Transition = null;
|
|
684
671
|
batch(() => {
|
|
685
|
-
|
|
686
|
-
v.value = v.tValue;
|
|
687
|
-
if (v.owned) {
|
|
688
|
-
for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);
|
|
689
|
-
}
|
|
690
|
-
if (v.tOwned) v.owned = v.tOwned;
|
|
691
|
-
delete v.tValue;
|
|
692
|
-
delete v.tOwned;
|
|
693
|
-
v.tState = 0;
|
|
694
|
-
});
|
|
672
|
+
mergeTransition(t);
|
|
695
673
|
setTransPending(false);
|
|
696
674
|
});
|
|
697
675
|
}
|
|
@@ -740,24 +718,75 @@ function runUserEffects(queue) {
|
|
|
740
718
|
}
|
|
741
719
|
function lookDownstream(node) {
|
|
742
720
|
node.state = 0;
|
|
743
|
-
for (let i = 0; i < node.sources.length; i
|
|
721
|
+
for (let i = 0; i < node.sources.length; i++) {
|
|
744
722
|
const source = node.sources[i];
|
|
745
723
|
if (source.sources) {
|
|
746
|
-
if (source.state === STALE
|
|
724
|
+
if (source.state === STALE) runTop(source);else if (source.state === PENDING) lookDownstream(source);
|
|
747
725
|
}
|
|
748
726
|
}
|
|
749
727
|
}
|
|
750
728
|
function markUpstream(node) {
|
|
751
|
-
|
|
752
|
-
for (let i = 0; i < node.observers.length; i += 1) {
|
|
729
|
+
for (let i = 0; i < node.observers.length; i++) {
|
|
753
730
|
const o = node.observers[i];
|
|
754
|
-
if (!o.state
|
|
755
|
-
|
|
731
|
+
if (!o.state) {
|
|
732
|
+
o.state = PENDING;
|
|
756
733
|
if (o.pure) Updates.push(o);else Effects.push(o);
|
|
757
734
|
o.observers && markUpstream(o);
|
|
758
735
|
}
|
|
759
736
|
}
|
|
760
737
|
}
|
|
738
|
+
function forkSource(s, p, slot) {
|
|
739
|
+
let fork;
|
|
740
|
+
if (!(fork = Transition.lookup.get(s) || Transition.sources.has(s) && s)) {
|
|
741
|
+
Transition.lookup.set(s, fork = { ...s
|
|
742
|
+
});
|
|
743
|
+
Transition.sources.add(fork);
|
|
744
|
+
if (fork.observers) {
|
|
745
|
+
fork.observers = [...new Set(fork.observers)];
|
|
746
|
+
fork.observerSlots = [];
|
|
747
|
+
fork.observers.forEach((o, i) => forkSource(o, fork, i));
|
|
748
|
+
}
|
|
749
|
+
if (fork.sources) {
|
|
750
|
+
fork.sources = [p];
|
|
751
|
+
fork.sourceSlots = [slot];
|
|
752
|
+
replaceObservers(fork, p, slot, 0);
|
|
753
|
+
}
|
|
754
|
+
fork.owned && (fork.owned = null);
|
|
755
|
+
fork.cleanups && (fork.cleanups = null);
|
|
756
|
+
} else if ("sources" in fork) {
|
|
757
|
+
fork.sources.push(p);
|
|
758
|
+
fork.sourceSlots.push(slot);
|
|
759
|
+
replaceObservers(fork, p, slot, fork.sources.length - 1);
|
|
760
|
+
}
|
|
761
|
+
return fork;
|
|
762
|
+
}
|
|
763
|
+
function replaceObservers(node, source, slot, sourceSlot) {
|
|
764
|
+
source.observers || (source.observers = []);
|
|
765
|
+
source.observerSlots || (source.observerSlots = []);
|
|
766
|
+
source.observers[slot] = node;
|
|
767
|
+
source.observerSlots[slot] = sourceSlot;
|
|
768
|
+
}
|
|
769
|
+
function mergeTransition(transition) {
|
|
770
|
+
const reverse = new Map(Array.from(transition.lookup, entry => [entry[1], entry[0]]));
|
|
771
|
+
transition.lookup.forEach((fork, og) => {
|
|
772
|
+
if ("sources" in fork && (fork.state || transition.updated.has(fork))) cleanNode(og);
|
|
773
|
+
});
|
|
774
|
+
transition.lookup.forEach((fork, og) => {
|
|
775
|
+
if ("sources" in fork && !fork.state && !transition.updated.has(fork)) return;
|
|
776
|
+
transition.updated.delete(fork);
|
|
777
|
+
Object.assign(og, fork);
|
|
778
|
+
if (og.sources) {
|
|
779
|
+
og.sourceSlots.forEach((slot, i) => {
|
|
780
|
+
og.sources[i] = reverse.get(og.sources[i]) || og.sources[i];
|
|
781
|
+
replaceObservers(og, og.sources[i], slot, i);
|
|
782
|
+
});
|
|
783
|
+
}
|
|
784
|
+
});
|
|
785
|
+
Effects.forEach((e, i) => {
|
|
786
|
+
const replace = reverse.get(e);
|
|
787
|
+
if (replace) Effects[i] = replace;
|
|
788
|
+
});
|
|
789
|
+
}
|
|
761
790
|
function cleanNode(node) {
|
|
762
791
|
let i;
|
|
763
792
|
if (node.sources) {
|
|
@@ -776,13 +805,7 @@ function cleanNode(node) {
|
|
|
776
805
|
}
|
|
777
806
|
}
|
|
778
807
|
}
|
|
779
|
-
if (
|
|
780
|
-
if (node.tOwned) {
|
|
781
|
-
for (i = 0; i < node.tOwned.length; i++) cleanNode(node.tOwned[i]);
|
|
782
|
-
delete node.tOwned;
|
|
783
|
-
}
|
|
784
|
-
reset(node, true);
|
|
785
|
-
} else if (node.owned) {
|
|
808
|
+
if (node.owned) {
|
|
786
809
|
for (i = 0; i < node.owned.length; i++) cleanNode(node.owned[i]);
|
|
787
810
|
node.owned = null;
|
|
788
811
|
}
|
|
@@ -790,18 +813,9 @@ function cleanNode(node) {
|
|
|
790
813
|
for (i = 0; i < node.cleanups.length; i++) node.cleanups[i]();
|
|
791
814
|
node.cleanups = null;
|
|
792
815
|
}
|
|
793
|
-
|
|
816
|
+
node.state = 0;
|
|
794
817
|
node.context = null;
|
|
795
818
|
}
|
|
796
|
-
function reset(node, top) {
|
|
797
|
-
if (!top) {
|
|
798
|
-
node.tState = 0;
|
|
799
|
-
Transition.disposed.add(node);
|
|
800
|
-
}
|
|
801
|
-
if (node.owned) {
|
|
802
|
-
for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
819
|
function handleError(err) {
|
|
806
820
|
const fns = ERROR && lookup(Owner, ERROR);
|
|
807
821
|
if (!fns) throw err;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solid-js",
|
|
3
3
|
"description": "A declarative JavaScript library for building user interfaces.",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.6-beta.0",
|
|
5
5
|
"author": "Ryan Carniato",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/solidjs/solid#readme",
|
|
@@ -120,5 +120,5 @@
|
|
|
120
120
|
"compiler",
|
|
121
121
|
"performance"
|
|
122
122
|
],
|
|
123
|
-
"gitHead": "
|
|
123
|
+
"gitHead": "9333aee148900824222538fed46a75eb996e96ff"
|
|
124
124
|
}
|
package/store/dist/dev.cjs
CHANGED
|
@@ -128,8 +128,8 @@ function setProperty(state, property, value) {
|
|
|
128
128
|
let nodes = getDataNodes(state),
|
|
129
129
|
node;
|
|
130
130
|
(node = nodes[property]) && node.$();
|
|
131
|
-
if (array && state.length !== len) (node = nodes.length) && node.$(
|
|
132
|
-
notify && (node = nodes._) && node.$(
|
|
131
|
+
if (array && state.length !== len) (node = nodes.length) && node.$();
|
|
132
|
+
notify && (node = nodes._) && node.$();
|
|
133
133
|
}
|
|
134
134
|
function mergeStoreNode(state, value) {
|
|
135
135
|
const keys = Object.keys(value);
|
package/store/dist/dev.js
CHANGED
|
@@ -124,8 +124,8 @@ function setProperty(state, property, value) {
|
|
|
124
124
|
let nodes = getDataNodes(state),
|
|
125
125
|
node;
|
|
126
126
|
(node = nodes[property]) && node.$();
|
|
127
|
-
if (array && state.length !== len) (node = nodes.length) && node.$(
|
|
128
|
-
notify && (node = nodes._) && node.$(
|
|
127
|
+
if (array && state.length !== len) (node = nodes.length) && node.$();
|
|
128
|
+
notify && (node = nodes._) && node.$();
|
|
129
129
|
}
|
|
130
130
|
function mergeStoreNode(state, value) {
|
|
131
131
|
const keys = Object.keys(value);
|
package/store/dist/store.cjs
CHANGED
|
@@ -123,8 +123,8 @@ function setProperty(state, property, value) {
|
|
|
123
123
|
let nodes = getDataNodes(state),
|
|
124
124
|
node;
|
|
125
125
|
(node = nodes[property]) && node.$();
|
|
126
|
-
if (array && state.length !== len) (node = nodes.length) && node.$(
|
|
127
|
-
notify && (node = nodes._) && node.$(
|
|
126
|
+
if (array && state.length !== len) (node = nodes.length) && node.$();
|
|
127
|
+
notify && (node = nodes._) && node.$();
|
|
128
128
|
}
|
|
129
129
|
function mergeStoreNode(state, value) {
|
|
130
130
|
const keys = Object.keys(value);
|
package/store/dist/store.js
CHANGED
|
@@ -119,8 +119,8 @@ function setProperty(state, property, value) {
|
|
|
119
119
|
let nodes = getDataNodes(state),
|
|
120
120
|
node;
|
|
121
121
|
(node = nodes[property]) && node.$();
|
|
122
|
-
if (array && state.length !== len) (node = nodes.length) && node.$(
|
|
123
|
-
notify && (node = nodes._) && node.$(
|
|
122
|
+
if (array && state.length !== len) (node = nodes.length) && node.$();
|
|
123
|
+
notify && (node = nodes._) && node.$();
|
|
124
124
|
}
|
|
125
125
|
function mergeStoreNode(state, value) {
|
|
126
126
|
const keys = Object.keys(value);
|
package/store/types/store.d.ts
CHANGED
|
@@ -54,19 +54,25 @@ export declare type StorePathRange = {
|
|
|
54
54
|
by?: number;
|
|
55
55
|
};
|
|
56
56
|
export declare type ArrayFilterFn<T> = (item: T extends any[] ? T[number] : never, index: number) => boolean;
|
|
57
|
-
export declare type Part<T> = keyof T | Array<keyof T> | StorePathRange |
|
|
58
|
-
export declare type
|
|
57
|
+
export declare type Part<T> = T extends any[] ? keyof T | Array<keyof T> | ArrayFilterFn<T> | StorePathRange : T extends object ? keyof T | Array<keyof T> : never;
|
|
58
|
+
export declare type NullableNext<T, K> = K extends keyof T ? T[K] : K extends Array<keyof T> ? T[K[number]] : T extends any[] ? K extends StorePathRange ? T[number] : K extends ArrayFilterFn<T> ? T[number] : never : never;
|
|
59
|
+
export declare type Next<T, K> = NonNullable<NullableNext<T, K>>;
|
|
59
60
|
export interface SetStoreFunction<T> {
|
|
60
61
|
<Setter extends StoreSetter<T>>(...args: [Setter]): void;
|
|
61
|
-
<K1 extends Part<T>, Setter extends StoreSetter<
|
|
62
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, Setter extends StoreSetter<
|
|
63
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, Setter extends StoreSetter<
|
|
64
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, Setter extends StoreSetter<
|
|
65
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, Setter extends StoreSetter<
|
|
66
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, Setter extends StoreSetter<
|
|
67
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, Setter extends StoreSetter<
|
|
62
|
+
<K1 extends Part<T>, Setter extends StoreSetter<NullableNext<T, K1>>>(...args: [K1, Setter]): void;
|
|
63
|
+
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, Setter extends StoreSetter<NullableNext<Next<T, K1>, K2>>>(...args: [K1, K2, Setter]): void;
|
|
64
|
+
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, Setter extends StoreSetter<NullableNext<Next<Next<T, K1>, K2>, K3>>>(...args: [K1, K2, K3, Setter]): void;
|
|
65
|
+
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, Setter extends StoreSetter<NullableNext<Next<Next<Next<T, K1>, K2>, K3>, K4>>>(...args: [K1, K2, K3, K4, Setter]): void;
|
|
66
|
+
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, Setter extends StoreSetter<NullableNext<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>>(...args: [K1, K2, K3, K4, K5, Setter]): void;
|
|
67
|
+
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, Setter extends StoreSetter<NullableNext<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>>(...args: [K1, K2, K3, K4, K5, K6, Setter]): void;
|
|
68
|
+
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, Setter extends StoreSetter<NullableNext<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, Setter]): void;
|
|
68
69
|
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, K8 extends Part<Next<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, K8, ...(Part<any> | StoreSetter<any>)[]]): void;
|
|
69
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* creates a reactive store that can be read through a proxy object and written with a setter function
|
|
73
|
+
*
|
|
74
|
+
* @description https://www.solidjs.com/docs/latest/api#createstore
|
|
75
|
+
*/
|
|
70
76
|
export declare function createStore<T extends StoreNode>(store: T | Store<T>, options?: {
|
|
71
77
|
name?: string;
|
|
72
78
|
}): [get: Store<T>, set: SetStoreFunction<T>];
|
package/types/jsx.d.ts
CHANGED
|
@@ -93,6 +93,7 @@ export namespace JSX {
|
|
|
93
93
|
onBlur?: EventHandlerUnion<T, FocusEvent>;
|
|
94
94
|
onChange?: EventHandlerUnion<T, Event>;
|
|
95
95
|
onInput?: EventHandlerUnion<T, InputEvent>;
|
|
96
|
+
onBeforeInput?: EventHandlerUnion<T, InputEvent>;
|
|
96
97
|
onReset?: EventHandlerUnion<T, Event>;
|
|
97
98
|
onSubmit?: EventHandlerUnion<
|
|
98
99
|
T,
|
|
@@ -180,6 +181,7 @@ export namespace JSX {
|
|
|
180
181
|
onblur?: EventHandlerUnion<T, FocusEvent>;
|
|
181
182
|
onchange?: EventHandlerUnion<T, Event>;
|
|
182
183
|
oninput?: EventHandlerUnion<T, InputEvent>;
|
|
184
|
+
onbeforeinput?: EventHandlerUnion<T, InputEvent>;
|
|
183
185
|
onreset?: EventHandlerUnion<T, Event>;
|
|
184
186
|
onsubmit?: EventHandlerUnion<
|
|
185
187
|
T,
|
|
@@ -2125,6 +2127,8 @@ export namespace JSX {
|
|
|
2125
2127
|
crossorigin?: HTMLCrossorigin;
|
|
2126
2128
|
decoding?: "sync" | "async" | "auto";
|
|
2127
2129
|
height?: number | string;
|
|
2130
|
+
ismap?: boolean;
|
|
2131
|
+
isMap?: boolean;
|
|
2128
2132
|
loading?: "eager" | "lazy";
|
|
2129
2133
|
referrerpolicy?: HTMLReferrerPolicy;
|
|
2130
2134
|
referrerPolicy?: HTMLReferrerPolicy;
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { Accessor } from "./signal";
|
|
2
|
+
/**
|
|
3
|
+
* reactively transforms an array with a callback function - underlying helper for the `<For>` control flow
|
|
4
|
+
*
|
|
5
|
+
* similar to `Array.prototype.map`, but gets the index as accessor, transforms only values that changed and returns an accessor and reactively tracks changes to the list.
|
|
6
|
+
*
|
|
7
|
+
* @description https://www.solidjs.com/docs/latest/api#maparray
|
|
8
|
+
*/
|
|
2
9
|
export declare function mapArray<T, U>(list: Accessor<readonly T[] | undefined | null | false>, mapFn: (v: T, i: Accessor<number>) => U, options?: {
|
|
3
10
|
fallback?: Accessor<any>;
|
|
4
11
|
}): () => U[];
|
|
12
|
+
/**
|
|
13
|
+
* reactively maps arrays by index instead of value - underlying helper for the `<Index>` control flow
|
|
14
|
+
*
|
|
15
|
+
* similar to `Array.prototype.map`, but gets the value as an accessor, transforms only changed items of the original arrays anew and returns an accessor.
|
|
16
|
+
*
|
|
17
|
+
* @description https://www.solidjs.com/docs/latest/api#indexarray
|
|
18
|
+
*/
|
|
5
19
|
export declare function indexArray<T, U>(list: Accessor<readonly T[] | undefined | null | false>, mapFn: (v: Accessor<T>, i: number) => U, options?: {
|
|
6
20
|
fallback?: Accessor<any>;
|
|
7
21
|
}): () => U[];
|
|
@@ -4,6 +4,16 @@ export declare type ObservableObserver<T> = ((v: T) => void) | {
|
|
|
4
4
|
error?: (v: any) => void;
|
|
5
5
|
complete?: (v: boolean) => void;
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* creates a simple observable from a signal's accessor to be used with the `from` operator of observable libraries like e.g. rxjs
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { from } from "rxjs";
|
|
11
|
+
* const [s, set] = createSignal(0);
|
|
12
|
+
* const obsv$ = from(observable(s));
|
|
13
|
+
* obsv$.subscribe((v) => console.log(v));
|
|
14
|
+
* ```
|
|
15
|
+
* description https://www.solidjs.com/docs/latest/api#observable
|
|
16
|
+
*/
|
|
7
17
|
export declare function observable<T>(input: Accessor<T>): {
|
|
8
18
|
[x: number]: () => any;
|
|
9
19
|
subscribe(observer: ObservableObserver<T>): {
|