tinybase 9.1.0-beta.0 → 9.1.0-beta.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 (106) hide show
  1. package/@types/_internal/store/with-schemas/index.d.ts +133 -2
  2. package/@types/common/index.d.ts +17 -2
  3. package/@types/common/with-schemas/index.d.ts +18 -2
  4. package/@types/indexes/index.d.ts +97 -0
  5. package/@types/indexes/with-schemas/index.d.ts +137 -0
  6. package/@types/store/index.d.ts +133 -25
  7. package/@types/store/with-schemas/index.d.ts +145 -51
  8. package/@types/ui-react/index.d.ts +48 -2
  9. package/@types/ui-react/with-schemas/index.d.ts +108 -34
  10. package/@types/ui-solid/index.d.ts +51 -2
  11. package/@types/ui-solid/with-schemas/index.d.ts +111 -34
  12. package/@types/ui-svelte/index.d.ts +84 -2
  13. package/@types/ui-svelte/with-schemas/index.d.ts +122 -25
  14. package/index.js +155 -38
  15. package/indexes/index.js +39 -0
  16. package/indexes/with-schemas/index.js +39 -0
  17. package/mergeable-store/index.js +116 -38
  18. package/mergeable-store/with-schemas/index.js +116 -38
  19. package/min/index.js +1 -1
  20. package/min/index.js.gz +0 -0
  21. package/min/indexes/index.js +1 -1
  22. package/min/indexes/index.js.gz +0 -0
  23. package/min/indexes/with-schemas/index.js +1 -1
  24. package/min/indexes/with-schemas/index.js.gz +0 -0
  25. package/min/mergeable-store/index.js +1 -1
  26. package/min/mergeable-store/index.js.gz +0 -0
  27. package/min/mergeable-store/with-schemas/index.js +1 -1
  28. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  29. package/min/omni/index.js +1 -1
  30. package/min/omni/index.js.gz +0 -0
  31. package/min/omni/with-schemas/index.js +1 -1
  32. package/min/omni/with-schemas/index.js.gz +0 -0
  33. package/min/store/index.js +1 -1
  34. package/min/store/index.js.gz +0 -0
  35. package/min/store/with-schemas/index.js +1 -1
  36. package/min/store/with-schemas/index.js.gz +0 -0
  37. package/min/ui-react/index.js +1 -1
  38. package/min/ui-react/index.js.gz +0 -0
  39. package/min/ui-react/with-schemas/index.js +1 -1
  40. package/min/ui-react/with-schemas/index.js.gz +0 -0
  41. package/min/ui-react-dom/index.js +1 -1
  42. package/min/ui-react-dom/index.js.gz +0 -0
  43. package/min/ui-react-dom/with-schemas/index.js +1 -1
  44. package/min/ui-react-dom/with-schemas/index.js.gz +0 -0
  45. package/min/ui-react-dom-charts/index.js +1 -1
  46. package/min/ui-react-dom-charts/index.js.gz +0 -0
  47. package/min/ui-react-dom-charts/with-schemas/index.js +1 -1
  48. package/min/ui-react-dom-charts/with-schemas/index.js.gz +0 -0
  49. package/min/ui-react-inspector/index.js +1 -1
  50. package/min/ui-react-inspector/index.js.gz +0 -0
  51. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  52. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  53. package/min/ui-solid/index.js +1 -1
  54. package/min/ui-solid/index.js.gz +0 -0
  55. package/min/ui-solid/with-schemas/index.js +1 -1
  56. package/min/ui-solid/with-schemas/index.js.gz +0 -0
  57. package/min/ui-solid-dom/index.js +1 -1
  58. package/min/ui-solid-dom/index.js.gz +0 -0
  59. package/min/ui-solid-dom/with-schemas/index.js +1 -1
  60. package/min/ui-solid-dom/with-schemas/index.js.gz +0 -0
  61. package/min/ui-solid-inspector/index.js +1 -1
  62. package/min/ui-solid-inspector/index.js.gz +0 -0
  63. package/min/ui-solid-inspector/with-schemas/index.js +1 -1
  64. package/min/ui-solid-inspector/with-schemas/index.js.gz +0 -0
  65. package/min/ui-svelte/index.js +1 -1
  66. package/min/ui-svelte/index.js.gz +0 -0
  67. package/min/ui-svelte/with-schemas/index.js +1 -1
  68. package/min/ui-svelte/with-schemas/index.js.gz +0 -0
  69. package/min/ui-svelte-dom/index.js +1 -1
  70. package/min/ui-svelte-dom/index.js.gz +0 -0
  71. package/min/ui-svelte-dom/with-schemas/index.js +1 -1
  72. package/min/ui-svelte-dom/with-schemas/index.js.gz +0 -0
  73. package/min/ui-svelte-inspector/index.js +1 -1
  74. package/min/ui-svelte-inspector/index.js.gz +0 -0
  75. package/min/ui-svelte-inspector/with-schemas/index.js +1 -1
  76. package/min/ui-svelte-inspector/with-schemas/index.js.gz +0 -0
  77. package/min/with-schemas/index.js +1 -1
  78. package/min/with-schemas/index.js.gz +0 -0
  79. package/omni/index.js +155 -38
  80. package/omni/with-schemas/index.js +155 -38
  81. package/package.json +3 -3
  82. package/readme.md +14 -14
  83. package/releases.md +101 -60
  84. package/store/index.js +116 -38
  85. package/store/with-schemas/index.js +116 -38
  86. package/ui-react/index.js +52 -6
  87. package/ui-react/with-schemas/index.js +52 -6
  88. package/ui-react-dom/index.js +24 -4
  89. package/ui-react-dom/with-schemas/index.js +24 -4
  90. package/ui-react-dom-charts/index.js +24 -4
  91. package/ui-react-dom-charts/with-schemas/index.js +24 -4
  92. package/ui-react-inspector/index.js +140 -42
  93. package/ui-react-inspector/with-schemas/index.js +140 -42
  94. package/ui-solid/index.js +48 -2
  95. package/ui-solid/with-schemas/index.js +48 -2
  96. package/ui-solid-dom/index.js +17 -1
  97. package/ui-solid-dom/with-schemas/index.js +17 -1
  98. package/ui-solid-inspector/index.js +133 -39
  99. package/ui-solid-inspector/with-schemas/index.js +133 -39
  100. package/ui-svelte/index.js +91 -31
  101. package/ui-svelte/with-schemas/index.js +91 -31
  102. package/ui-svelte-dom/index.js +35 -14
  103. package/ui-svelte-dom/with-schemas/index.js +35 -14
  104. package/ui-svelte-inspector/index.js +151 -52
  105. package/ui-svelte-inspector/with-schemas/index.js +151 -52
  106. package/with-schemas/index.js +155 -38
@@ -28,6 +28,7 @@ const VALUE = 'Value';
28
28
  const VALUES = VALUE + 's';
29
29
  const VALUE_IDS = VALUE + IDS;
30
30
  const TRANSACTION = 'Transaction';
31
+ const REQUIRED = 'required';
31
32
  const JSON_PREFIX = '\uFFFD';
32
33
  const id = (key) => EMPTY_STRING + key;
33
34
  const strStartsWith = (str, prefix) => str.startsWith(prefix);
@@ -568,6 +569,7 @@ const createStore = () => {
568
569
  const valuesSchemaMap = mapNew();
569
570
  const valuesDefaulted = mapNew();
570
571
  const valuesNonDefaulted = setNew();
572
+ const valuesRequiredNonDefaulted = setNew();
571
573
  const tablePoolFunctions = mapNew();
572
574
  const tableCellIds = mapNew();
573
575
  const tablesMap = mapNew();
@@ -620,7 +622,7 @@ const createStore = () => {
620
622
  const validateCellOrValueSchema = (schema) => {
621
623
  if (
622
624
  !objValidate(schema, (_child, id2) =>
623
- arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
625
+ arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
624
626
  )
625
627
  ) {
626
628
  return false;
@@ -655,20 +657,32 @@ const createStore = () => {
655
657
  (row, rowId) => validateRow(tableId, rowId, row),
656
658
  () => cellInvalid(tableId),
657
659
  );
658
- const validateRow = (tableId, rowId, row, skipDefaults) =>
659
- objValidate(
660
- skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
661
- (cell, cellId) =>
662
- ifNotUndefined(
663
- getValidatedCell(tableId, rowId, cellId, cell),
664
- (validCell) => {
665
- row[cellId] = validCell;
666
- return true;
667
- },
668
- () => false,
669
- ),
670
- () => cellInvalid(tableId, rowId),
660
+ const validateRow = (tableId, rowId, row, skipDefaults) => {
661
+ const rowWithDefaults = skipDefaults
662
+ ? row
663
+ : addDefaultsToRow(row, tableId, rowId);
664
+ return (
665
+ objValidate(
666
+ rowWithDefaults,
667
+ (cell, cellId) =>
668
+ ifNotUndefined(
669
+ getValidatedCell(tableId, rowId, cellId, cell),
670
+ (validCell) => {
671
+ row[cellId] = validCell;
672
+ return true;
673
+ },
674
+ () => false,
675
+ ),
676
+ () => cellInvalid(tableId, rowId),
677
+ ) &&
678
+ (skipDefaults
679
+ ? true
680
+ : arrayEvery(
681
+ collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
682
+ (cellId) => objHas(rowWithDefaults, cellId),
683
+ ))
671
684
  );
685
+ };
672
686
  const getValidatedCell = (tableId, rowId, cellId, cell) =>
673
687
  hasTablesSchema
674
688
  ? ifNotUndefined(
@@ -694,20 +708,31 @@ const createStore = () => {
694
708
  : isUndefined(getCellOrValueType(cell))
695
709
  ? cellInvalid(tableId, rowId, cellId, cell)
696
710
  : encodeIfJson(cell);
697
- const validateValues = (values, skipDefaults) =>
698
- objValidate(
699
- skipDefaults ? values : addDefaultsToValues(values),
700
- (value, valueId) =>
701
- ifNotUndefined(
702
- getValidatedValue(valueId, value),
703
- (validValue) => {
704
- values[valueId] = validValue;
705
- return true;
706
- },
707
- () => false,
708
- ),
709
- () => valueInvalid(),
711
+ const validateValues = (values, skipDefaults) => {
712
+ const valuesWithDefaults = skipDefaults
713
+ ? values
714
+ : addDefaultsToValues(values);
715
+ return (
716
+ objValidate(
717
+ valuesWithDefaults,
718
+ (value, valueId) =>
719
+ ifNotUndefined(
720
+ getValidatedValue(valueId, value),
721
+ (validValue) => {
722
+ values[valueId] = validValue;
723
+ return true;
724
+ },
725
+ () => false,
726
+ ),
727
+ () => valueInvalid(),
728
+ ) &&
729
+ (skipDefaults
730
+ ? true
731
+ : arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
732
+ objHas(valuesWithDefaults, valueId),
733
+ ))
710
734
  );
735
+ };
711
736
  const getValidatedValue = (valueId, value) =>
712
737
  hasValuesSchema
713
738
  ? ifNotUndefined(
@@ -778,6 +803,7 @@ const createStore = () => {
778
803
  (_tablesSchema, tableId, tableSchema) => {
779
804
  const rowDefaulted = mapNew();
780
805
  const rowNonDefaulted = setNew();
806
+ const rowRequiredNonDefaulted = setNew();
781
807
  mapMatch(
782
808
  mapEnsure(tablesSchemaMap, tableId, mapNew),
783
809
  tableSchema,
@@ -785,12 +811,23 @@ const createStore = () => {
785
811
  mapSet(tableSchemaMap, cellId, cellSchema);
786
812
  ifNotUndefined(
787
813
  cellSchema[DEFAULT],
788
- (def) => mapSet(rowDefaulted, cellId, def),
789
- () => setAdd(rowNonDefaulted, cellId),
814
+ (defaultCell) => {
815
+ mapSet(rowDefaulted, cellId, defaultCell);
816
+ },
817
+ () => {
818
+ setAdd(rowNonDefaulted, cellId);
819
+ if (cellSchema[REQUIRED] === true) {
820
+ setAdd(rowRequiredNonDefaulted, cellId);
821
+ }
822
+ },
790
823
  );
791
824
  },
792
825
  );
793
- mapSet(tablesSchemaRowCache, tableId, [rowDefaulted, rowNonDefaulted]);
826
+ mapSet(tablesSchemaRowCache, tableId, [
827
+ rowDefaulted,
828
+ rowNonDefaulted,
829
+ rowRequiredNonDefaulted,
830
+ ]);
794
831
  },
795
832
  (_tablesSchema, tableId) => {
796
833
  mapSet(tablesSchemaMap, tableId);
@@ -805,14 +842,27 @@ const createStore = () => {
805
842
  mapSet(valuesSchemaMap, valueId, valueSchema);
806
843
  ifNotUndefined(
807
844
  valueSchema[DEFAULT],
808
- (def) => mapSet(valuesDefaulted, valueId, def),
809
- () => setAdd(valuesNonDefaulted, valueId),
845
+ (defaultValue) => {
846
+ mapSet(valuesDefaulted, valueId, defaultValue);
847
+ collDel(valuesNonDefaulted, valueId);
848
+ collDel(valuesRequiredNonDefaulted, valueId);
849
+ },
850
+ () => {
851
+ mapSet(valuesDefaulted, valueId);
852
+ setAdd(valuesNonDefaulted, valueId);
853
+ if (valueSchema[REQUIRED] === true) {
854
+ setAdd(valuesRequiredNonDefaulted, valueId);
855
+ } else {
856
+ collDel(valuesRequiredNonDefaulted, valueId);
857
+ }
858
+ },
810
859
  );
811
860
  },
812
861
  (_valuesSchema, valueId) => {
813
862
  mapSet(valuesSchemaMap, valueId);
814
863
  mapSet(valuesDefaulted, valueId);
815
864
  collDel(valuesNonDefaulted, valueId);
865
+ collDel(valuesRequiredNonDefaulted, valueId);
816
866
  },
817
867
  );
818
868
  const setOrDelTables = (tables) =>
@@ -1485,13 +1535,36 @@ const createStore = () => {
1485
1535
  listener,
1486
1536
  mutator,
1487
1537
  ) => {
1488
- let sortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
1538
+ const [descending, offset, limit, sorter] = otherArgs;
1539
+ let sortedRowIds = getSortedRowIds(
1540
+ tableId,
1541
+ cellId,
1542
+ descending,
1543
+ offset,
1544
+ limit,
1545
+ sorter,
1546
+ );
1489
1547
  return addListener(
1490
1548
  () => {
1491
- const newSortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
1549
+ const newSortedRowIds = getSortedRowIds(
1550
+ tableId,
1551
+ cellId,
1552
+ descending,
1553
+ offset,
1554
+ limit,
1555
+ sorter,
1556
+ );
1492
1557
  if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
1493
1558
  sortedRowIds = newSortedRowIds;
1494
- listener(store, tableId, cellId, ...otherArgs, sortedRowIds);
1559
+ listener(
1560
+ store,
1561
+ tableId,
1562
+ cellId,
1563
+ descending,
1564
+ offset,
1565
+ limit,
1566
+ sortedRowIds,
1567
+ );
1495
1568
  }
1496
1569
  },
1497
1570
  sortedRowIdsListeners[mutator ? 1 : 0],
@@ -1545,6 +1618,7 @@ const createStore = () => {
1545
1618
  descending,
1546
1619
  offset = 0,
1547
1620
  limit,
1621
+ sorter = defaultSorter,
1548
1622
  ) =>
1549
1623
  isObject(tableIdOrArgs)
1550
1624
  ? getSortedRowIds(
@@ -1553,16 +1627,19 @@ const createStore = () => {
1553
1627
  tableIdOrArgs.descending,
1554
1628
  tableIdOrArgs.offset,
1555
1629
  tableIdOrArgs.limit,
1630
+ tableIdOrArgs.sorter,
1556
1631
  )
1557
1632
  : arrayMap(
1558
1633
  slice(
1559
1634
  arraySort(
1560
1635
  mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
1561
- isUndefined(cellId) ? rowId : mapGet(row, id(cellId)),
1636
+ isUndefined(cellId)
1637
+ ? rowId
1638
+ : decodeIfJson(mapGet(row, id(cellId))),
1562
1639
  rowId,
1563
1640
  ]),
1564
1641
  ([cell1], [cell2]) =>
1565
- defaultSorter(cell1, cell2) * (descending ? -1 : 1),
1642
+ sorter(cell1, cell2) * (descending ? -1 : 1),
1566
1643
  ),
1567
1644
  offset,
1568
1645
  isUndefined(limit) ? limit : offset + limit,
@@ -2040,6 +2117,7 @@ const createStore = () => {
2040
2117
  tableIdOrArgs.descending ?? false,
2041
2118
  tableIdOrArgs.offset ?? 0,
2042
2119
  tableIdOrArgs.limit,
2120
+ tableIdOrArgs.sorter,
2043
2121
  ],
2044
2122
  cellIdOrListener,
2045
2123
  descendingOrMutator,
@@ -2047,7 +2125,7 @@ const createStore = () => {
2047
2125
  : addSortedRowIdsListenerImpl(
2048
2126
  tableIdOrArgs,
2049
2127
  cellIdOrListener,
2050
- [descendingOrMutator, offset, limit],
2128
+ [descendingOrMutator, offset, limit, void 0],
2051
2129
  listener,
2052
2130
  mutator,
2053
2131
  );
@@ -28,6 +28,7 @@ const VALUE = 'Value';
28
28
  const VALUES = VALUE + 's';
29
29
  const VALUE_IDS = VALUE + IDS;
30
30
  const TRANSACTION = 'Transaction';
31
+ const REQUIRED = 'required';
31
32
  const JSON_PREFIX = '\uFFFD';
32
33
  const id = (key) => EMPTY_STRING + key;
33
34
  const strStartsWith = (str, prefix) => str.startsWith(prefix);
@@ -568,6 +569,7 @@ const createStore = () => {
568
569
  const valuesSchemaMap = mapNew();
569
570
  const valuesDefaulted = mapNew();
570
571
  const valuesNonDefaulted = setNew();
572
+ const valuesRequiredNonDefaulted = setNew();
571
573
  const tablePoolFunctions = mapNew();
572
574
  const tableCellIds = mapNew();
573
575
  const tablesMap = mapNew();
@@ -620,7 +622,7 @@ const createStore = () => {
620
622
  const validateCellOrValueSchema = (schema) => {
621
623
  if (
622
624
  !objValidate(schema, (_child, id2) =>
623
- arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
625
+ arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
624
626
  )
625
627
  ) {
626
628
  return false;
@@ -655,20 +657,32 @@ const createStore = () => {
655
657
  (row, rowId) => validateRow(tableId, rowId, row),
656
658
  () => cellInvalid(tableId),
657
659
  );
658
- const validateRow = (tableId, rowId, row, skipDefaults) =>
659
- objValidate(
660
- skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
661
- (cell, cellId) =>
662
- ifNotUndefined(
663
- getValidatedCell(tableId, rowId, cellId, cell),
664
- (validCell) => {
665
- row[cellId] = validCell;
666
- return true;
667
- },
668
- () => false,
669
- ),
670
- () => cellInvalid(tableId, rowId),
660
+ const validateRow = (tableId, rowId, row, skipDefaults) => {
661
+ const rowWithDefaults = skipDefaults
662
+ ? row
663
+ : addDefaultsToRow(row, tableId, rowId);
664
+ return (
665
+ objValidate(
666
+ rowWithDefaults,
667
+ (cell, cellId) =>
668
+ ifNotUndefined(
669
+ getValidatedCell(tableId, rowId, cellId, cell),
670
+ (validCell) => {
671
+ row[cellId] = validCell;
672
+ return true;
673
+ },
674
+ () => false,
675
+ ),
676
+ () => cellInvalid(tableId, rowId),
677
+ ) &&
678
+ (skipDefaults
679
+ ? true
680
+ : arrayEvery(
681
+ collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
682
+ (cellId) => objHas(rowWithDefaults, cellId),
683
+ ))
671
684
  );
685
+ };
672
686
  const getValidatedCell = (tableId, rowId, cellId, cell) =>
673
687
  hasTablesSchema
674
688
  ? ifNotUndefined(
@@ -694,20 +708,31 @@ const createStore = () => {
694
708
  : isUndefined(getCellOrValueType(cell))
695
709
  ? cellInvalid(tableId, rowId, cellId, cell)
696
710
  : encodeIfJson(cell);
697
- const validateValues = (values, skipDefaults) =>
698
- objValidate(
699
- skipDefaults ? values : addDefaultsToValues(values),
700
- (value, valueId) =>
701
- ifNotUndefined(
702
- getValidatedValue(valueId, value),
703
- (validValue) => {
704
- values[valueId] = validValue;
705
- return true;
706
- },
707
- () => false,
708
- ),
709
- () => valueInvalid(),
711
+ const validateValues = (values, skipDefaults) => {
712
+ const valuesWithDefaults = skipDefaults
713
+ ? values
714
+ : addDefaultsToValues(values);
715
+ return (
716
+ objValidate(
717
+ valuesWithDefaults,
718
+ (value, valueId) =>
719
+ ifNotUndefined(
720
+ getValidatedValue(valueId, value),
721
+ (validValue) => {
722
+ values[valueId] = validValue;
723
+ return true;
724
+ },
725
+ () => false,
726
+ ),
727
+ () => valueInvalid(),
728
+ ) &&
729
+ (skipDefaults
730
+ ? true
731
+ : arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
732
+ objHas(valuesWithDefaults, valueId),
733
+ ))
710
734
  );
735
+ };
711
736
  const getValidatedValue = (valueId, value) =>
712
737
  hasValuesSchema
713
738
  ? ifNotUndefined(
@@ -778,6 +803,7 @@ const createStore = () => {
778
803
  (_tablesSchema, tableId, tableSchema) => {
779
804
  const rowDefaulted = mapNew();
780
805
  const rowNonDefaulted = setNew();
806
+ const rowRequiredNonDefaulted = setNew();
781
807
  mapMatch(
782
808
  mapEnsure(tablesSchemaMap, tableId, mapNew),
783
809
  tableSchema,
@@ -785,12 +811,23 @@ const createStore = () => {
785
811
  mapSet(tableSchemaMap, cellId, cellSchema);
786
812
  ifNotUndefined(
787
813
  cellSchema[DEFAULT],
788
- (def) => mapSet(rowDefaulted, cellId, def),
789
- () => setAdd(rowNonDefaulted, cellId),
814
+ (defaultCell) => {
815
+ mapSet(rowDefaulted, cellId, defaultCell);
816
+ },
817
+ () => {
818
+ setAdd(rowNonDefaulted, cellId);
819
+ if (cellSchema[REQUIRED] === true) {
820
+ setAdd(rowRequiredNonDefaulted, cellId);
821
+ }
822
+ },
790
823
  );
791
824
  },
792
825
  );
793
- mapSet(tablesSchemaRowCache, tableId, [rowDefaulted, rowNonDefaulted]);
826
+ mapSet(tablesSchemaRowCache, tableId, [
827
+ rowDefaulted,
828
+ rowNonDefaulted,
829
+ rowRequiredNonDefaulted,
830
+ ]);
794
831
  },
795
832
  (_tablesSchema, tableId) => {
796
833
  mapSet(tablesSchemaMap, tableId);
@@ -805,14 +842,27 @@ const createStore = () => {
805
842
  mapSet(valuesSchemaMap, valueId, valueSchema);
806
843
  ifNotUndefined(
807
844
  valueSchema[DEFAULT],
808
- (def) => mapSet(valuesDefaulted, valueId, def),
809
- () => setAdd(valuesNonDefaulted, valueId),
845
+ (defaultValue) => {
846
+ mapSet(valuesDefaulted, valueId, defaultValue);
847
+ collDel(valuesNonDefaulted, valueId);
848
+ collDel(valuesRequiredNonDefaulted, valueId);
849
+ },
850
+ () => {
851
+ mapSet(valuesDefaulted, valueId);
852
+ setAdd(valuesNonDefaulted, valueId);
853
+ if (valueSchema[REQUIRED] === true) {
854
+ setAdd(valuesRequiredNonDefaulted, valueId);
855
+ } else {
856
+ collDel(valuesRequiredNonDefaulted, valueId);
857
+ }
858
+ },
810
859
  );
811
860
  },
812
861
  (_valuesSchema, valueId) => {
813
862
  mapSet(valuesSchemaMap, valueId);
814
863
  mapSet(valuesDefaulted, valueId);
815
864
  collDel(valuesNonDefaulted, valueId);
865
+ collDel(valuesRequiredNonDefaulted, valueId);
816
866
  },
817
867
  );
818
868
  const setOrDelTables = (tables) =>
@@ -1485,13 +1535,36 @@ const createStore = () => {
1485
1535
  listener,
1486
1536
  mutator,
1487
1537
  ) => {
1488
- let sortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
1538
+ const [descending, offset, limit, sorter] = otherArgs;
1539
+ let sortedRowIds = getSortedRowIds(
1540
+ tableId,
1541
+ cellId,
1542
+ descending,
1543
+ offset,
1544
+ limit,
1545
+ sorter,
1546
+ );
1489
1547
  return addListener(
1490
1548
  () => {
1491
- const newSortedRowIds = getSortedRowIds(tableId, cellId, ...otherArgs);
1549
+ const newSortedRowIds = getSortedRowIds(
1550
+ tableId,
1551
+ cellId,
1552
+ descending,
1553
+ offset,
1554
+ limit,
1555
+ sorter,
1556
+ );
1492
1557
  if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
1493
1558
  sortedRowIds = newSortedRowIds;
1494
- listener(store, tableId, cellId, ...otherArgs, sortedRowIds);
1559
+ listener(
1560
+ store,
1561
+ tableId,
1562
+ cellId,
1563
+ descending,
1564
+ offset,
1565
+ limit,
1566
+ sortedRowIds,
1567
+ );
1495
1568
  }
1496
1569
  },
1497
1570
  sortedRowIdsListeners[mutator ? 1 : 0],
@@ -1545,6 +1618,7 @@ const createStore = () => {
1545
1618
  descending,
1546
1619
  offset = 0,
1547
1620
  limit,
1621
+ sorter = defaultSorter,
1548
1622
  ) =>
1549
1623
  isObject(tableIdOrArgs)
1550
1624
  ? getSortedRowIds(
@@ -1553,16 +1627,19 @@ const createStore = () => {
1553
1627
  tableIdOrArgs.descending,
1554
1628
  tableIdOrArgs.offset,
1555
1629
  tableIdOrArgs.limit,
1630
+ tableIdOrArgs.sorter,
1556
1631
  )
1557
1632
  : arrayMap(
1558
1633
  slice(
1559
1634
  arraySort(
1560
1635
  mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
1561
- isUndefined(cellId) ? rowId : mapGet(row, id(cellId)),
1636
+ isUndefined(cellId)
1637
+ ? rowId
1638
+ : decodeIfJson(mapGet(row, id(cellId))),
1562
1639
  rowId,
1563
1640
  ]),
1564
1641
  ([cell1], [cell2]) =>
1565
- defaultSorter(cell1, cell2) * (descending ? -1 : 1),
1642
+ sorter(cell1, cell2) * (descending ? -1 : 1),
1566
1643
  ),
1567
1644
  offset,
1568
1645
  isUndefined(limit) ? limit : offset + limit,
@@ -2040,6 +2117,7 @@ const createStore = () => {
2040
2117
  tableIdOrArgs.descending ?? false,
2041
2118
  tableIdOrArgs.offset ?? 0,
2042
2119
  tableIdOrArgs.limit,
2120
+ tableIdOrArgs.sorter,
2043
2121
  ],
2044
2122
  cellIdOrListener,
2045
2123
  descendingOrMutator,
@@ -2047,7 +2125,7 @@ const createStore = () => {
2047
2125
  : addSortedRowIdsListenerImpl(
2048
2126
  tableIdOrArgs,
2049
2127
  cellIdOrListener,
2050
- [descendingOrMutator, offset, limit],
2128
+ [descendingOrMutator, offset, limit, void 0],
2051
2129
  listener,
2052
2130
  mutator,
2053
2131
  );