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.
- package/@types/_internal/store/with-schemas/index.d.ts +133 -2
- package/@types/common/index.d.ts +17 -2
- package/@types/common/with-schemas/index.d.ts +18 -2
- package/@types/indexes/index.d.ts +97 -0
- package/@types/indexes/with-schemas/index.d.ts +137 -0
- package/@types/store/index.d.ts +133 -25
- package/@types/store/with-schemas/index.d.ts +145 -51
- package/@types/ui-react/index.d.ts +48 -2
- package/@types/ui-react/with-schemas/index.d.ts +108 -34
- package/@types/ui-solid/index.d.ts +51 -2
- package/@types/ui-solid/with-schemas/index.d.ts +111 -34
- package/@types/ui-svelte/index.d.ts +84 -2
- package/@types/ui-svelte/with-schemas/index.d.ts +122 -25
- package/index.js +155 -38
- package/indexes/index.js +39 -0
- package/indexes/with-schemas/index.js +39 -0
- package/mergeable-store/index.js +116 -38
- package/mergeable-store/with-schemas/index.js +116 -38
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/indexes/index.js +1 -1
- package/min/indexes/index.js.gz +0 -0
- package/min/indexes/with-schemas/index.js +1 -1
- package/min/indexes/with-schemas/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/ui-react/index.js +1 -1
- package/min/ui-react/index.js.gz +0 -0
- package/min/ui-react/with-schemas/index.js +1 -1
- package/min/ui-react/with-schemas/index.js.gz +0 -0
- package/min/ui-react-dom/index.js +1 -1
- package/min/ui-react-dom/index.js.gz +0 -0
- package/min/ui-react-dom/with-schemas/index.js +1 -1
- package/min/ui-react-dom/with-schemas/index.js.gz +0 -0
- package/min/ui-react-dom-charts/index.js +1 -1
- package/min/ui-react-dom-charts/index.js.gz +0 -0
- package/min/ui-react-dom-charts/with-schemas/index.js +1 -1
- package/min/ui-react-dom-charts/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/ui-solid/index.js +1 -1
- package/min/ui-solid/index.js.gz +0 -0
- package/min/ui-solid/with-schemas/index.js +1 -1
- package/min/ui-solid/with-schemas/index.js.gz +0 -0
- package/min/ui-solid-dom/index.js +1 -1
- package/min/ui-solid-dom/index.js.gz +0 -0
- package/min/ui-solid-dom/with-schemas/index.js +1 -1
- package/min/ui-solid-dom/with-schemas/index.js.gz +0 -0
- package/min/ui-solid-inspector/index.js +1 -1
- package/min/ui-solid-inspector/index.js.gz +0 -0
- package/min/ui-solid-inspector/with-schemas/index.js +1 -1
- package/min/ui-solid-inspector/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte/index.js +1 -1
- package/min/ui-svelte/index.js.gz +0 -0
- package/min/ui-svelte/with-schemas/index.js +1 -1
- package/min/ui-svelte/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte-dom/index.js +1 -1
- package/min/ui-svelte-dom/index.js.gz +0 -0
- package/min/ui-svelte-dom/with-schemas/index.js +1 -1
- package/min/ui-svelte-dom/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte-inspector/index.js +1 -1
- package/min/ui-svelte-inspector/index.js.gz +0 -0
- package/min/ui-svelte-inspector/with-schemas/index.js +1 -1
- package/min/ui-svelte-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/omni/index.js +155 -38
- package/omni/with-schemas/index.js +155 -38
- package/package.json +3 -3
- package/readme.md +14 -14
- package/releases.md +101 -60
- package/store/index.js +116 -38
- package/store/with-schemas/index.js +116 -38
- package/ui-react/index.js +52 -6
- package/ui-react/with-schemas/index.js +52 -6
- package/ui-react-dom/index.js +24 -4
- package/ui-react-dom/with-schemas/index.js +24 -4
- package/ui-react-dom-charts/index.js +24 -4
- package/ui-react-dom-charts/with-schemas/index.js +24 -4
- package/ui-react-inspector/index.js +140 -42
- package/ui-react-inspector/with-schemas/index.js +140 -42
- package/ui-solid/index.js +48 -2
- package/ui-solid/with-schemas/index.js +48 -2
- package/ui-solid-dom/index.js +17 -1
- package/ui-solid-dom/with-schemas/index.js +17 -1
- package/ui-solid-inspector/index.js +133 -39
- package/ui-solid-inspector/with-schemas/index.js +133 -39
- package/ui-svelte/index.js +91 -31
- package/ui-svelte/with-schemas/index.js +91 -31
- package/ui-svelte-dom/index.js +35 -14
- package/ui-svelte-dom/with-schemas/index.js +35 -14
- package/ui-svelte-inspector/index.js +151 -52
- package/ui-svelte-inspector/with-schemas/index.js +151 -52
- package/with-schemas/index.js +155 -38
package/mergeable-store/index.js
CHANGED
|
@@ -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
|
-
|
|
660
|
-
|
|
661
|
-
(
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
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
|
-
|
|
699
|
-
|
|
700
|
-
(
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
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
|
-
(
|
|
789
|
-
|
|
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, [
|
|
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
|
-
(
|
|
809
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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)
|
|
1636
|
+
isUndefined(cellId)
|
|
1637
|
+
? rowId
|
|
1638
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
1562
1639
|
rowId,
|
|
1563
1640
|
]),
|
|
1564
1641
|
([cell1], [cell2]) =>
|
|
1565
|
-
|
|
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
|
-
|
|
660
|
-
|
|
661
|
-
(
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
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
|
-
|
|
699
|
-
|
|
700
|
-
(
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
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
|
-
(
|
|
789
|
-
|
|
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, [
|
|
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
|
-
(
|
|
809
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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)
|
|
1636
|
+
isUndefined(cellId)
|
|
1637
|
+
? rowId
|
|
1638
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
1562
1639
|
rowId,
|
|
1563
1640
|
]),
|
|
1564
1641
|
([cell1], [cell2]) =>
|
|
1565
|
-
|
|
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
|
);
|