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/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
- return [readSignal.bind(s), value => {
184
- if (typeof value === "function") {
185
- if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.pending !== NOTPENDING ? s.pending : s.tValue);else value = value(s.pending !== NOTPENDING ? s.pending : s.value);
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(s, value);
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 readSignal.bind(c);
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.initialValue),
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, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);
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 += 1) {
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
- writeSignal(data, pending);
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
- if (Scheduler || SuspenseContext) {
452
- Transition || (Transition = {
453
- sources: new Set(),
454
- effects: [],
455
- promises: new Set(),
456
- disposed: new Set(),
457
- queue: new Set(),
458
- running: true,
459
- cb: []
460
- });
461
- cb && Transition.cb.push(cb);
462
- Transition.running = true;
463
- }
464
- batch(fn);
465
- if (!Scheduler && !SuspenseContext && cb) cb();
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 readSignal() {
495
- if (this.state && this.sources) {
496
- const updates = Updates;
497
- Updates = null;
498
- this.state === STALE || Transition && Transition.running && this.tState ? updateComputation(this) : lookDownstream(this);
499
- Updates = updates;
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 (Listener) {
502
- const sSlot = this.observers ? this.observers.length : 0;
503
- if (!Listener.sources) {
504
- Listener.sources = [this];
505
- Listener.sourceSlots = [sSlot];
506
- } else {
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
- if (Transition && Transition.running && Transition.sources.has(this)) return this.tValue;
519
- return this.value;
520
- }
521
- function writeSignal(node, value, isComp) {
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
- let TransitionRunning = false;
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 += 1) {
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 && (TransitionRunning && !o.tState || !TransitionRunning && !o.state)) markUpstream(o);
548
- if (TransitionRunning) o.tState = STALE;else o.state = STALE;
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
- writeSignal(node, nextValue, true);
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: null,
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 (Transition && Transition.running && Owner.pure) {
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
- const runningTransition = Transition && Transition.running;
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 (runningTransition && Transition.disposed.has(node)) return;
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 (runningTransition) {
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 || runningTransition && node.tState === 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 sources = Transition.sources;
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
- sources.forEach(v => {
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 += 1) {
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 || Transition && Transition.running && source.tState) runTop(source);else if (source.state === PENDING) lookDownstream(source);
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
- const runningTransition = Transition && Transition.running;
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 || runningTransition && !o.tState) {
755
- if (runningTransition) o.tState = PENDING;else o.state = PENDING;
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 (Transition && Transition.running && node.pure) {
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
- if (Transition && Transition.running) node.tState = 0;else node.state = 0;
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.2",
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": "d4a2ede2deb7e75275fd1a6f821bfd908c80718b"
123
+ "gitHead": "9333aee148900824222538fed46a75eb996e96ff"
124
124
  }
@@ -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.$(node, undefined);
132
- notify && (node = nodes._) && node.$(node, undefined);
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.$(node, undefined);
128
- notify && (node = nodes._) && node.$(node, undefined);
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);
@@ -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.$(node, undefined);
127
- notify && (node = nodes._) && node.$(node, undefined);
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);
@@ -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.$(node, undefined);
123
- notify && (node = nodes._) && node.$(node, undefined);
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);
@@ -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 | ArrayFilterFn<T>;
58
- export declare type Next<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;
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<Next<T, K1>>>(...args: [K1, Setter]): void;
62
- <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, Setter extends StoreSetter<Next<Next<T, K1>, K2>>>(...args: [K1, K2, Setter]): void;
63
- <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, Setter extends StoreSetter<Next<Next<Next<T, K1>, K2>, K3>>>(...args: [K1, K2, K3, Setter]): void;
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<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>>(...args: [K1, K2, K3, K4, 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>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>>(...args: [K1, K2, K3, K4, K5, 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>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>>(...args: [K1, K2, K3, K4, K5, K6, 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>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, Setter]): void;
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>): {