tinybase 4.0.0-beta.4 → 4.0.0-beta.5
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/lib/cjs/persisters/persister-automerge.cjs +1 -0
- package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-browser.cjs +1 -0
- package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -0
- package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-file.cjs +1 -0
- package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-remote.cjs +1 -0
- package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -0
- package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs +1 -0
- package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs/persisters/persister-yjs.cjs +1 -0
- package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/store.cjs +1 -1
- package/lib/cjs/store.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.cjs.gz +0 -0
- package/lib/cjs/ui-react.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-file.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
- package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -0
- package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/store.cjs +1 -1
- package/lib/cjs-es6/store.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/tools.cjs +1 -1
- package/lib/cjs-es6/tools.cjs.gz +0 -0
- package/lib/cjs-es6/ui-react.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/{persister-automerge.js → persisters/persister-automerge.js} +57 -30
- package/lib/debug/{persister-browser.js → persisters/persister-browser.js} +48 -19
- package/lib/debug/persisters/persister-cr-sqlite-wasm.js +665 -0
- package/lib/debug/{persister-file.js → persisters/persister-file.js} +50 -24
- package/lib/debug/{persister-remote.js → persisters/persister-remote.js} +47 -18
- package/lib/debug/persisters/persister-sqlite-wasm.js +673 -0
- package/lib/debug/persisters/persister-sqlite3.js +676 -0
- package/lib/debug/{persister-yjs.js → persisters/persister-yjs.js} +48 -19
- package/lib/debug/persisters.js +46 -17
- package/lib/debug/store.js +77 -27
- package/lib/debug/tinybase.js +120 -43
- package/lib/debug/tools.js +121 -27
- package/lib/debug/ui-react.js +24 -0
- package/lib/es6/persisters/persister-automerge.js +1 -0
- package/lib/es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/es6/persisters/persister-browser.js +1 -0
- package/lib/es6/persisters/persister-browser.js.gz +0 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-file.js +1 -0
- package/lib/es6/persisters/persister-file.js.gz +0 -0
- package/lib/es6/persisters/persister-remote.js +1 -0
- package/lib/es6/persisters/persister-remote.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/es6/persisters/persister-sqlite3.js +1 -0
- package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/es6/persisters/persister-yjs.js +1 -0
- package/lib/es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/store.js +1 -1
- package/lib/es6/store.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- package/lib/es6/ui-react.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/persisters/persister-automerge.js +1 -0
- package/lib/persisters/persister-automerge.js.gz +0 -0
- package/lib/persisters/persister-browser.js +1 -0
- package/lib/persisters/persister-browser.js.gz +0 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-file.js +1 -0
- package/lib/persisters/persister-file.js.gz +0 -0
- package/lib/persisters/persister-remote.js +1 -0
- package/lib/persisters/persister-remote.js.gz +0 -0
- package/lib/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/persisters/persister-sqlite3.js +1 -0
- package/lib/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/persisters/persister-yjs.js +1 -0
- package/lib/persisters/persister-yjs.js.gz +0 -0
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/tools.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/types/checkpoints.d.ts +0 -27
- package/lib/types/common.d.ts +0 -9
- package/lib/types/indexes.d.ts +0 -26
- package/lib/types/metrics.d.ts +0 -23
- package/lib/types/{persister-automerge.d.ts → persisters/persister-automerge.d.ts} +4 -6
- package/lib/types/{persister-browser.d.ts → persisters/persister-browser.d.ts} +2 -5
- package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +95 -0
- package/lib/types/{persister-file.d.ts → persisters/persister-file.d.ts} +3 -5
- package/lib/types/{persister-remote.d.ts → persisters/persister-remote.d.ts} +2 -4
- package/lib/types/persisters/persister-sqlite-wasm.d.ts +102 -0
- package/lib/types/persisters/persister-sqlite3.d.ts +109 -0
- package/lib/types/{persister-yjs.d.ts → persisters/persister-yjs.d.ts} +4 -6
- package/lib/types/persisters.d.ts +517 -27
- package/lib/types/queries.d.ts +52 -127
- package/lib/types/relationships.d.ts +0 -26
- package/lib/types/store.d.ts +347 -196
- package/lib/types/tinybase.d.ts +0 -1
- package/lib/types/tools.d.ts +15 -28
- package/lib/types/ui-react.d.ts +196 -181
- package/lib/types/with-schemas/checkpoints.d.ts +5 -32
- package/lib/types/with-schemas/common.d.ts +0 -9
- package/lib/types/with-schemas/indexes.d.ts +9 -35
- package/lib/types/with-schemas/metrics.d.ts +9 -32
- package/lib/types/with-schemas/{persister-automerge.d.ts → persisters/persister-automerge.d.ts} +4 -6
- package/lib/types/with-schemas/{persister-browser.d.ts → persisters/persister-browser.d.ts} +2 -5
- package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +105 -0
- package/lib/types/with-schemas/{persister-file.d.ts → persisters/persister-file.d.ts} +3 -5
- package/lib/types/with-schemas/{persister-remote.d.ts → persisters/persister-remote.d.ts} +2 -4
- package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +113 -0
- package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +119 -0
- package/lib/types/with-schemas/{persister-yjs.d.ts → persisters/persister-yjs.d.ts} +4 -6
- package/lib/types/with-schemas/persisters.d.ts +534 -29
- package/lib/types/with-schemas/queries.d.ts +61 -224
- package/lib/types/with-schemas/relationships.d.ts +9 -35
- package/lib/types/with-schemas/store.d.ts +488 -239
- package/lib/types/with-schemas/tinybase.d.ts +0 -1
- package/lib/types/with-schemas/tools.d.ts +19 -32
- package/lib/types/with-schemas/ui-react.d.ts +221 -186
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/persisters/persister-automerge.js +1 -0
- package/lib/umd/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd/persisters/persister-browser.js +1 -0
- package/lib/umd/persisters/persister-browser.js.gz +0 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-file.js +1 -0
- package/lib/umd/persisters/persister-file.js.gz +0 -0
- package/lib/umd/persisters/persister-remote.js +1 -0
- package/lib/umd/persisters/persister-remote.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd/persisters/persister-sqlite3.js +1 -0
- package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd/persisters/persister-yjs.js +1 -0
- package/lib/umd/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-automerge.js +1 -0
- package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-browser.js +1 -0
- package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -0
- package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-file.js +1 -0
- package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-remote.js +1 -0
- package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -0
- package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js +1 -0
- package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
- package/lib/umd-es6/persisters/persister-yjs.js +1 -0
- package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/store.js +1 -1
- package/lib/umd-es6/store.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/tools.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +38 -21
- package/readme.md +3 -3
- package/lib/cjs/persister-automerge.cjs +0 -1
- package/lib/cjs/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persister-browser.cjs +0 -1
- package/lib/cjs/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persister-file.cjs +0 -1
- package/lib/cjs/persister-file.cjs.gz +0 -0
- package/lib/cjs/persister-remote.cjs +0 -1
- package/lib/cjs/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persister-yjs.cjs +0 -1
- package/lib/cjs/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persister-automerge.cjs +0 -1
- package/lib/cjs-es6/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persister-browser.cjs +0 -1
- package/lib/cjs-es6/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persister-file.cjs +0 -1
- package/lib/cjs-es6/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persister-remote.cjs +0 -1
- package/lib/cjs-es6/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persister-yjs.cjs +0 -1
- package/lib/cjs-es6/persister-yjs.cjs.gz +0 -0
- package/lib/es6/persister-automerge.js +0 -1
- package/lib/es6/persister-automerge.js.gz +0 -0
- package/lib/es6/persister-browser.js +0 -1
- package/lib/es6/persister-browser.js.gz +0 -0
- package/lib/es6/persister-file.js +0 -1
- package/lib/es6/persister-file.js.gz +0 -0
- package/lib/es6/persister-remote.js +0 -1
- package/lib/es6/persister-remote.js.gz +0 -0
- package/lib/es6/persister-yjs.js +0 -1
- package/lib/es6/persister-yjs.js.gz +0 -0
- package/lib/persister-automerge.js +0 -1
- package/lib/persister-automerge.js.gz +0 -0
- package/lib/persister-browser.js +0 -1
- package/lib/persister-browser.js.gz +0 -0
- package/lib/persister-file.js +0 -1
- package/lib/persister-file.js.gz +0 -0
- package/lib/persister-remote.js +0 -1
- package/lib/persister-remote.js.gz +0 -0
- package/lib/persister-yjs.js +0 -1
- package/lib/persister-yjs.js.gz +0 -0
- package/lib/umd/persister-automerge.js +0 -1
- package/lib/umd/persister-automerge.js.gz +0 -0
- package/lib/umd/persister-browser.js +0 -1
- package/lib/umd/persister-browser.js.gz +0 -0
- package/lib/umd/persister-file.js +0 -1
- package/lib/umd/persister-file.js.gz +0 -0
- package/lib/umd/persister-remote.js +0 -1
- package/lib/umd/persister-remote.js.gz +0 -0
- package/lib/umd/persister-yjs.js +0 -1
- package/lib/umd/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persister-automerge.js +0 -1
- package/lib/umd-es6/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persister-browser.js +0 -1
- package/lib/umd-es6/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persister-file.js +0 -1
- package/lib/umd-es6/persister-file.js.gz +0 -0
- package/lib/umd-es6/persister-remote.js +0 -1
- package/lib/umd-es6/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persister-yjs.js +0 -1
- package/lib/umd-es6/persister-yjs.js.gz +0 -0
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* returns a new Metrics object. From there, you can create new Metric
|
|
7
7
|
* definitions, access the values of those Metrics directly, and register
|
|
8
8
|
* listeners for when they change.
|
|
9
|
-
*
|
|
10
9
|
* @packageDocumentation
|
|
11
10
|
* @module metrics
|
|
12
11
|
*/
|
|
@@ -18,7 +17,6 @@ import {Id, IdOrNull, Ids} from './common.d';
|
|
|
18
17
|
/**
|
|
19
18
|
* The Metric type is simply an alias, but represents a number formed by
|
|
20
19
|
* aggregating multiple other numbers together.
|
|
21
|
-
*
|
|
22
20
|
* @category Metric
|
|
23
21
|
*/
|
|
24
22
|
export type Metric = number;
|
|
@@ -30,7 +28,6 @@ export type Metric = number;
|
|
|
30
28
|
* A MetricCallback is provided when using the forEachMetric method, so that you
|
|
31
29
|
* can do something based on every Metric in the Metrics object. See that method
|
|
32
30
|
* for specific examples.
|
|
33
|
-
*
|
|
34
31
|
* @param metricId The Id of the Metric that the callback can operate on.
|
|
35
32
|
* @param metric The value of the Metric.
|
|
36
33
|
* @category Callback
|
|
@@ -45,7 +42,6 @@ export type MetricCallback = (metricId: Id, metric?: Metric) => void;
|
|
|
45
42
|
* summing, and averaging values. This type is instead used for when you wish to
|
|
46
43
|
* use a more complex aggregation of your own devising. See the
|
|
47
44
|
* setMetricDefinition method for more examples.
|
|
48
|
-
*
|
|
49
45
|
* @param numbers The array of numbers in the Metric's aggregation.
|
|
50
46
|
* @param length The length of the array of numbers in the Metric's aggregation.
|
|
51
47
|
* @returns The value of the Metric.
|
|
@@ -70,7 +66,6 @@ export type MetricAggregate = (numbers: number[], length: number) => Metric;
|
|
|
70
66
|
* implementation of an MetricAggregateAdd function that can reduce the
|
|
71
67
|
* complexity cost of growing the input data set. See the setMetricDefinition
|
|
72
68
|
* method for more examples.
|
|
73
|
-
*
|
|
74
69
|
* @param metric The current value of the Metric.
|
|
75
70
|
* @param add The number being added to the Metric's aggregation.
|
|
76
71
|
* @param length The length of the array of numbers in the Metric's aggregation.
|
|
@@ -103,7 +98,6 @@ export type MetricAggregateAdd = (
|
|
|
103
98
|
* implementation of an MetricAggregateRemove function that can reduce the
|
|
104
99
|
* complexity cost of shrinking the input data set. See the setMetricDefinition
|
|
105
100
|
* method for more examples.
|
|
106
|
-
*
|
|
107
101
|
* @param metric The current value of the Metric.
|
|
108
102
|
* @param remove The number being removed from the Metric's aggregation.
|
|
109
103
|
* @param length The length of the array of numbers in the Metric's aggregation.
|
|
@@ -133,7 +127,6 @@ export type MetricAggregateRemove = (
|
|
|
133
127
|
* implementation of an MetricAggregateReplace function that can reduce the
|
|
134
128
|
* complexity cost of changing the input data set in place. See the
|
|
135
129
|
* setMetricDefinition method for more examples.
|
|
136
|
-
*
|
|
137
130
|
* @param metric The current value of the Metric.
|
|
138
131
|
* @param add The number being added to the Metric's aggregation.
|
|
139
132
|
* @param remove The number being removed from the Metric's aggregation.
|
|
@@ -172,7 +165,6 @@ export type MetricAggregateReplace = (
|
|
|
172
165
|
* If this is the first time that a Metric has had a value (such as when a table
|
|
173
166
|
* has gained its first row), the old value will be `undefined`. If a Metric now
|
|
174
167
|
* no longer has a value, the new value will be `undefined`.
|
|
175
|
-
*
|
|
176
168
|
* @param metrics A reference to the Metrics object that changed.
|
|
177
169
|
* @param metricId The Id of the Metric that changed.
|
|
178
170
|
* @param newMetric The new value of the Metric that changed.
|
|
@@ -192,7 +184,6 @@ export type MetricListener<Schemas extends OptionalSchemas> = (
|
|
|
192
184
|
*
|
|
193
185
|
* A MetricsListenerStats object is returned from the getListenerStats method,
|
|
194
186
|
* and is only populated in a debug build.
|
|
195
|
-
*
|
|
196
187
|
* @category Development
|
|
197
188
|
*/
|
|
198
189
|
export type MetricsListenerStats = {
|
|
@@ -218,7 +209,6 @@ export type MetricsListenerStats = {
|
|
|
218
209
|
* ('sum', 'avg', 'min', and 'max'), and defaults to counting Row objects when
|
|
219
210
|
* using the setMetricDefinition method. However, far more complex aggregations
|
|
220
211
|
* can be configured with custom functions.
|
|
221
|
-
*
|
|
222
212
|
* @example
|
|
223
213
|
* This example shows a very simple lifecycle of a Metrics object: from
|
|
224
214
|
* creation, to adding a definition, getting a Metric, and then registering and
|
|
@@ -299,7 +289,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
299
289
|
* function's algorithmic complexity by providing shortcuts that can nudge an
|
|
300
290
|
* aggregation result when a single value is added, removed, or replaced in
|
|
301
291
|
* the input values.
|
|
302
|
-
*
|
|
303
292
|
* @param metricId The Id of the Metric to define.
|
|
304
293
|
* @param tableId The Id of the Table the Metric will be calculated from.
|
|
305
294
|
* @param aggregate Either a string representing one of a set of common
|
|
@@ -451,6 +440,11 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
451
440
|
|
|
452
441
|
/**
|
|
453
442
|
* The delMetricDefinition method removes an existing Metric definition.
|
|
443
|
+
* @param metricId The Id of the Metric to remove.
|
|
444
|
+
* @returns A reference to the Metrics object.
|
|
445
|
+
* @example
|
|
446
|
+
* This example creates a Store, creates a Metrics object, defines a simple
|
|
447
|
+
* Metric, and then removes it.
|
|
454
448
|
*
|
|
455
449
|
* This has schema-based typing. The following is a simplified representation:
|
|
456
450
|
*
|
|
@@ -458,12 +452,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
458
452
|
* delMetricDefinition(metricId: Id): Metrics;
|
|
459
453
|
* ```
|
|
460
454
|
*
|
|
461
|
-
* @param metricId The Id of the Metric to remove.
|
|
462
|
-
* @returns A reference to the Metrics object.
|
|
463
|
-
* @example
|
|
464
|
-
* This example creates a Store, creates a Metrics object, defines a simple
|
|
465
|
-
* Metric, and then removes it.
|
|
466
|
-
*
|
|
467
455
|
* ```js
|
|
468
456
|
* const store = createStore().setTable('species', {
|
|
469
457
|
* dog: {price: 5},
|
|
@@ -487,6 +475,10 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
487
475
|
/**
|
|
488
476
|
* The getStore method returns a reference to the underlying Store that is
|
|
489
477
|
* backing this Metrics object.
|
|
478
|
+
* @returns A reference to the Store.
|
|
479
|
+
* @example
|
|
480
|
+
* This example creates a Metrics object against a newly-created Store and
|
|
481
|
+
* then gets its reference in order to update its data.
|
|
490
482
|
*
|
|
491
483
|
* This has schema-based typing. The following is a simplified representation:
|
|
492
484
|
*
|
|
@@ -494,11 +486,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
494
486
|
* getStore(): Store;
|
|
495
487
|
* ```
|
|
496
488
|
*
|
|
497
|
-
* @returns A reference to the Store.
|
|
498
|
-
* @example
|
|
499
|
-
* This example creates a Metrics object against a newly-created Store and
|
|
500
|
-
* then gets its reference in order to update its data.
|
|
501
|
-
*
|
|
502
489
|
* ```js
|
|
503
490
|
* const metrics = createMetrics(createStore());
|
|
504
491
|
* metrics.setMetricDefinition('speciesCount', 'species');
|
|
@@ -513,7 +500,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
513
500
|
/**
|
|
514
501
|
* The getMetricIds method returns an array of the Metric Ids registered with
|
|
515
502
|
* this Metrics object.
|
|
516
|
-
*
|
|
517
503
|
* @returns An array of Ids.
|
|
518
504
|
* @example
|
|
519
505
|
* This example creates a Metrics object with two definitions, and then gets
|
|
@@ -538,7 +524,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
538
524
|
* This method is useful for iterating over all the Metrics in a functional
|
|
539
525
|
* style. The `metricCallback` parameter is a MetricCallback function that
|
|
540
526
|
* will be called with the Id of each Metric and its value.
|
|
541
|
-
*
|
|
542
527
|
* @param metricCallback The function that should be called for every Metric.
|
|
543
528
|
* @example
|
|
544
529
|
* This example iterates over each Metric in a Metrics object.
|
|
@@ -566,7 +551,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
566
551
|
/**
|
|
567
552
|
* The hasMetric method returns a boolean indicating whether a given Metric
|
|
568
553
|
* exists in the Metrics object, and has a value.
|
|
569
|
-
*
|
|
570
554
|
* @param metricId The Id of a possible Metric in the Metrics object.
|
|
571
555
|
* @returns Whether a Metric with that Id exists.
|
|
572
556
|
* @example
|
|
@@ -600,7 +584,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
600
584
|
* ```
|
|
601
585
|
*
|
|
602
586
|
* If the Metric Id is invalid, the method returns `undefined`.
|
|
603
|
-
*
|
|
604
587
|
* @param metricId The Id of a Metric.
|
|
605
588
|
* @returns The Id of the Table backing the Metric, or `undefined`.
|
|
606
589
|
* @example
|
|
@@ -627,7 +610,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
627
610
|
*
|
|
628
611
|
* If the identified Metric does not exist (or if the definition references a
|
|
629
612
|
* Table or Cell value that does not exist) then `undefined` is returned.
|
|
630
|
-
*
|
|
631
613
|
* @param metricId The Id of the Metric.
|
|
632
614
|
* @returns The numeric value of the Metric, or `undefined`.
|
|
633
615
|
* @example
|
|
@@ -673,7 +655,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
673
655
|
* The provided listener is a MetricListener function, and will be called with
|
|
674
656
|
* a reference to the Metrics object, the Id of the Metric that changed, the
|
|
675
657
|
* new Metric value, and the old Metric value.
|
|
676
|
-
*
|
|
677
658
|
* @param metricId The Id of the Metric to listen to, or `null` as a wildcard.
|
|
678
659
|
* @param listener The function that will be called whenever the Metric
|
|
679
660
|
* changes.
|
|
@@ -753,7 +734,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
753
734
|
*
|
|
754
735
|
* Use the Id returned by the addMetricListener method. Note that the Metrics
|
|
755
736
|
* object may re-use this Id for future listeners added to it.
|
|
756
|
-
*
|
|
757
737
|
* @param listenerId The Id of the listener to remove.
|
|
758
738
|
* @returns A reference to the Metrics object.
|
|
759
739
|
* @example
|
|
@@ -796,7 +776,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
796
776
|
*
|
|
797
777
|
* This guarantees that all of the listeners that the object registered with
|
|
798
778
|
* the underlying Store are removed and it can be correctly garbage collected.
|
|
799
|
-
*
|
|
800
779
|
* @example
|
|
801
780
|
* This example creates a Store, adds a Metrics object with a definition (that
|
|
802
781
|
* registers a RowListener with the underlying Store), and then destroys it
|
|
@@ -832,7 +811,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
832
811
|
* return an empty object. The method is intended to be used during
|
|
833
812
|
* development to ensure your application is not leaking listener
|
|
834
813
|
* registrations, for example.
|
|
835
|
-
*
|
|
836
814
|
* @returns A MetricsListenerStats object containing Metrics listener
|
|
837
815
|
* statistics.
|
|
838
816
|
* @example
|
|
@@ -864,7 +842,6 @@ export interface Metrics<in out Schemas extends OptionalSchemas> {
|
|
|
864
842
|
* A given Store can only have one Metrics object associated with it. If you
|
|
865
843
|
* call this function twice on the same Store, your second call will return a
|
|
866
844
|
* reference to the Metrics object created by the first.
|
|
867
|
-
*
|
|
868
845
|
* @param store The Store for which to register Metric definitions.
|
|
869
846
|
* @returns A reference to the new Metrics object.
|
|
870
847
|
* @example
|
package/lib/types/with-schemas/{persister-automerge.d.ts → persisters/persister-automerge.d.ts}
RENAMED
|
@@ -5,16 +5,15 @@
|
|
|
5
5
|
* A single entry point, the createAutomergePersister function, is provided,
|
|
6
6
|
* which returns a new Persister object that can bind a Store to a provided
|
|
7
7
|
* Automerge document handle (and in turn, its document).
|
|
8
|
-
*
|
|
9
8
|
* @see Synchronizing Data guide
|
|
10
9
|
* @packageDocumentation
|
|
11
10
|
* @module persister-automerge
|
|
12
|
-
* @since v4.0
|
|
11
|
+
* @since v4.0.0
|
|
13
12
|
*/
|
|
14
13
|
|
|
15
|
-
import {OptionalSchemas, Store} from '
|
|
14
|
+
import {OptionalSchemas, Store} from '../store';
|
|
16
15
|
import {DocHandle} from 'automerge-repo';
|
|
17
|
-
import {Persister} from '
|
|
16
|
+
import {Persister} from '../persisters';
|
|
18
17
|
|
|
19
18
|
/**
|
|
20
19
|
* The createAutomergePersister function creates a Persister object that can
|
|
@@ -32,7 +31,6 @@ import {Persister} from './persisters';
|
|
|
32
31
|
*
|
|
33
32
|
* As well as providing a reference to the Store to persist, you must provide
|
|
34
33
|
* the Automerge document handler to persist it with.
|
|
35
|
-
*
|
|
36
34
|
* @param store The Store to persist.
|
|
37
35
|
* @param docHandle The Automerge document handler to persist the Store with.
|
|
38
36
|
* @param docMapName The name of the map used inside the Automerge document to
|
|
@@ -111,7 +109,7 @@ import {Persister} from './persisters';
|
|
|
111
109
|
* persister2.destroy();
|
|
112
110
|
* ```
|
|
113
111
|
* @category Creation
|
|
114
|
-
* @since v4.0
|
|
112
|
+
* @since v4.0.0
|
|
115
113
|
*/
|
|
116
114
|
export function createAutomergePersister<Schemas extends OptionalSchemas>(
|
|
117
115
|
store: Store<Schemas>,
|
|
@@ -9,14 +9,13 @@
|
|
|
9
9
|
* browser's session storage.
|
|
10
10
|
* - The createLocalPersister function returns a Persister that uses the
|
|
11
11
|
* browser's local storage.
|
|
12
|
-
*
|
|
13
12
|
* @see Persisting Data guide
|
|
14
13
|
* @packageDocumentation
|
|
15
14
|
* @module persister-browser
|
|
16
15
|
*/
|
|
17
16
|
|
|
18
|
-
import {OptionalSchemas, Store} from '
|
|
19
|
-
import {Persister} from '
|
|
17
|
+
import {OptionalSchemas, Store} from '../store';
|
|
18
|
+
import {Persister} from '../persisters';
|
|
20
19
|
|
|
21
20
|
/**
|
|
22
21
|
* The createSessionPersister function creates a Persister object that can
|
|
@@ -34,7 +33,6 @@ import {Persister} from './persisters';
|
|
|
34
33
|
* As well as providing a reference to the Store to persist, you must provide a
|
|
35
34
|
* `storageName` parameter which is unique to your application. This is the key
|
|
36
35
|
* that the browser uses to identify the storage location.
|
|
37
|
-
*
|
|
38
36
|
* @param store The Store to persist.
|
|
39
37
|
* @param storageName The unique key to identify the storage location.
|
|
40
38
|
* @returns A reference to the new Persister object.
|
|
@@ -76,7 +74,6 @@ export function createSessionPersister<Schemas extends OptionalSchemas>(
|
|
|
76
74
|
* As well as providing a reference to the Store to persist, you must provide a
|
|
77
75
|
* `storageName` parameter which is unique to your application. This is the key
|
|
78
76
|
* that the browser uses to identify the storage location.
|
|
79
|
-
*
|
|
80
77
|
* @param store The Store to persist.
|
|
81
78
|
* @param storageName The unique key to identify the storage location.
|
|
82
79
|
* @returns A reference to the new Persister object.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-cr-sqlite-wasm module of the TinyBase project lets you save and
|
|
3
|
+
* load Store data to and from a local CR-SQLite database (in an appropriate
|
|
4
|
+
* environment).
|
|
5
|
+
* @see Persisting Data guide
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module persister-cr-sqlite-wasm
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {DatabasePersisterConfig, Persister} from '../persisters';
|
|
11
|
+
import {OptionalSchemas, Store} from '../store';
|
|
12
|
+
import {DB} from '@vlcn.io/crsqlite-wasm';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The createCrSqliteWasmPersister function creates a Persister object that can
|
|
16
|
+
* persist the Store to a local CR-SQLite database (in an appropriate
|
|
17
|
+
* environment).
|
|
18
|
+
*
|
|
19
|
+
* This has schema-based typing. The following is a simplified representation:
|
|
20
|
+
*
|
|
21
|
+
* ```ts override
|
|
22
|
+
* createCrSqliteWasmPersister(
|
|
23
|
+
* store: Store,
|
|
24
|
+
* db: DB,
|
|
25
|
+
* configOrStoreTableName?: DatabasePersisterConfig | string,
|
|
26
|
+
* ): Persister;
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* As well as providing a reference to the Store to persist, you must provide
|
|
30
|
+
* a `db` parameter which identifies the database instance.
|
|
31
|
+
*
|
|
32
|
+
* A database Persister uses one of two modes: either a JSON serialization of
|
|
33
|
+
* the whole Store stored in a single row of a table (the default), or a tabular
|
|
34
|
+
* mapping of Table Ids to database table names and vice-versa).
|
|
35
|
+
*
|
|
36
|
+
* The third argument is a DatabasePersisterConfig object that configures which
|
|
37
|
+
* of those modes to use, and settings for each. If the third argument is simply
|
|
38
|
+
* a string, it is used as the `storeTableName` property of the JSON
|
|
39
|
+
* serialization.
|
|
40
|
+
*
|
|
41
|
+
* See the documentation for the DpcJson and DpcTabular types for more
|
|
42
|
+
* information on how both of those modes can be configured.
|
|
43
|
+
* @param store The Store to persist.
|
|
44
|
+
* @param db The database instance that was returned from `crSqlite3.open(...)`.
|
|
45
|
+
* @param configOrStoreTableName A DatabasePersisterConfig to configure the
|
|
46
|
+
* persistence mode (or a string to set the `storeTableName` property of the
|
|
47
|
+
* JSON serialization).
|
|
48
|
+
* @returns A reference to the new Persister object.
|
|
49
|
+
* @example
|
|
50
|
+
* This example creates a Persister object and persists the Store to a local
|
|
51
|
+
* CR-SQLite database as a JSON serialization into the `my_tinybase` table. It
|
|
52
|
+
* makes a change to the database directly and then reloads it back into the
|
|
53
|
+
* Store.
|
|
54
|
+
*
|
|
55
|
+
* ```js
|
|
56
|
+
* const crSqlite3 = await initWasm();
|
|
57
|
+
* const db = await crSqlite3.open();
|
|
58
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
59
|
+
* const persister = createCrSqliteWasmPersister(store, db, 'my_tinybase');
|
|
60
|
+
*
|
|
61
|
+
* await persister.save();
|
|
62
|
+
* console.log(await db.execO('SELECT * FROM my_tinybase;'));
|
|
63
|
+
* // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
|
|
64
|
+
*
|
|
65
|
+
* await db.exec(
|
|
66
|
+
* 'UPDATE my_tinybase SET store = ' +
|
|
67
|
+
* `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
|
|
68
|
+
* );
|
|
69
|
+
* await persister.load();
|
|
70
|
+
* console.log(store.getTables());
|
|
71
|
+
* // -> {pets: {felix: {species: 'cat'}}}
|
|
72
|
+
*
|
|
73
|
+
* persister.destroy();
|
|
74
|
+
* ```
|
|
75
|
+
* @example
|
|
76
|
+
* This example creates a Persister object and persists the Store to a local
|
|
77
|
+
* SQLite database with tabular mapping.
|
|
78
|
+
*
|
|
79
|
+
* ```js
|
|
80
|
+
* const crSqlite3 = await initWasm();
|
|
81
|
+
* const db = await crSqlite3.open();
|
|
82
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
83
|
+
* const persister = createCrSqliteWasmPersister(store, db, {
|
|
84
|
+
* mode: 'tabular',
|
|
85
|
+
* tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
|
|
86
|
+
* });
|
|
87
|
+
*
|
|
88
|
+
* await persister.save();
|
|
89
|
+
* console.log(await db.execO('SELECT * FROM pets;'));
|
|
90
|
+
* // -> [{_id: 'fido', species: 'dog'}]
|
|
91
|
+
*
|
|
92
|
+
* await db.exec(`INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`);
|
|
93
|
+
* await persister.load();
|
|
94
|
+
* console.log(store.getTables());
|
|
95
|
+
* // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
|
|
96
|
+
*
|
|
97
|
+
* persister.destroy();
|
|
98
|
+
* ```
|
|
99
|
+
* @category Creation
|
|
100
|
+
*/
|
|
101
|
+
export function createCrSqliteWasmPersister<Schemas extends OptionalSchemas>(
|
|
102
|
+
store: Store<Schemas>,
|
|
103
|
+
db: DB,
|
|
104
|
+
configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
|
|
105
|
+
): Persister<Schemas>;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The persister-file module of the TinyBase project lets you save and load
|
|
3
3
|
* Store data to and from a local file system (in an appropriate environment).
|
|
4
|
-
*
|
|
5
4
|
* @see Persisting Data guide
|
|
6
5
|
* @packageDocumentation
|
|
7
6
|
* @module persister-file
|
|
8
7
|
*/
|
|
9
8
|
|
|
10
|
-
import {OptionalSchemas, Store} from '
|
|
11
|
-
import {Persister} from '
|
|
9
|
+
import {OptionalSchemas, Store} from '../store';
|
|
10
|
+
import {Persister} from '../persisters';
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* The createFilePersister function creates a Persister object that can persist
|
|
@@ -20,9 +19,8 @@ import {Persister} from './persisters';
|
|
|
20
19
|
* createFilePersister(store: Store, filePath: string): Persister;
|
|
21
20
|
* ```
|
|
22
21
|
*
|
|
23
|
-
* As well as providing a reference to the Store to persist, you must provide
|
|
22
|
+
* As well as providing a reference to the Store to persist, you must provide a
|
|
24
23
|
* `filePath` parameter which identifies the file to persist it to.
|
|
25
|
-
*
|
|
26
24
|
* @param store The Store to persist.
|
|
27
25
|
* @param filePath The location of the local file to persist the Store to.
|
|
28
26
|
* @returns A reference to the new Persister object.
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The persister-remote module of the TinyBase project lets you save and load
|
|
3
3
|
* Store data to and from a remote server.
|
|
4
|
-
*
|
|
5
4
|
* @see Persisting Data guide
|
|
6
5
|
* @packageDocumentation
|
|
7
6
|
* @module persister-remote
|
|
8
7
|
*/
|
|
9
8
|
|
|
10
|
-
import {OptionalSchemas, Store} from '
|
|
11
|
-
import {Persister} from '
|
|
9
|
+
import {OptionalSchemas, Store} from '../store';
|
|
10
|
+
import {Persister} from '../persisters';
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* The createRemotePersister function creates a Persister object that can
|
|
@@ -33,7 +32,6 @@ import {Persister} from './persisters';
|
|
|
33
32
|
* For when you choose to enable automatic loading for the Persister (with the
|
|
34
33
|
* startAutoLoad method), it will poll the loadUrl for changes. The
|
|
35
34
|
* `autoLoadIntervalSeconds` method is used to indicate how often to do this.
|
|
36
|
-
*
|
|
37
35
|
* @param store The Store to persist.
|
|
38
36
|
* @param loadUrl The endpoint that supports a `GET` method to load JSON.
|
|
39
37
|
* @param saveUrl The endpoint that supports a `POST` method to save JSON.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-sqlite-wasm module of the TinyBase project lets you save and
|
|
3
|
+
* load Store data to and from a local SQLite database (in an appropriate
|
|
4
|
+
* environment).
|
|
5
|
+
* @see Persisting Data guide
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module persister-sqlite-wasm
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {DatabasePersisterConfig, Persister} from '../persisters';
|
|
11
|
+
import {OptionalSchemas, Store} from '../store';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The createSqliteWasmPersister function creates a Persister object that can
|
|
15
|
+
* persist the Store to a local SQLite database (in an appropriate environment).
|
|
16
|
+
*
|
|
17
|
+
* This has schema-based typing. The following is a simplified representation:
|
|
18
|
+
*
|
|
19
|
+
* ```ts override
|
|
20
|
+
* createSqliteWasmPersister(
|
|
21
|
+
* store: Store,
|
|
22
|
+
* sqlite3: any,
|
|
23
|
+
* db: any,
|
|
24
|
+
* configOrStoreTableName?: DatabasePersisterConfig | string,
|
|
25
|
+
* ): Persister;
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* As well as providing a reference to the Store to persist, you must provide
|
|
29
|
+
* `sqlite3` and `db` parameters which identify the WASM module and database
|
|
30
|
+
* instance respectively.
|
|
31
|
+
*
|
|
32
|
+
* A database Persister uses one of two modes: either a JSON serialization of
|
|
33
|
+
* the whole Store stored in a single row of a table (the default), or a tabular
|
|
34
|
+
* mapping of Table Ids to database table names and vice-versa).
|
|
35
|
+
*
|
|
36
|
+
* The fourth argument is a DatabasePersisterConfig object that configures which
|
|
37
|
+
* of those modes to use, and settings for each. If the fourth argument is
|
|
38
|
+
* simply a string, it is used as the `storeTableName` property of the JSON
|
|
39
|
+
* serialization.
|
|
40
|
+
*
|
|
41
|
+
* See the documentation for the DpcJson and DpcTabular types for more
|
|
42
|
+
* information on how both of those modes can be configured.
|
|
43
|
+
* @param store The Store to persist.
|
|
44
|
+
* @param sqlite3 The WASM module that was returned from `sqlite3InitModule`.
|
|
45
|
+
* @param db The database instance that was returned from `new
|
|
46
|
+
* sqlite3.oo1.DB(...)`.
|
|
47
|
+
* @param configOrStoreTableName A DatabasePersisterConfig to configure the
|
|
48
|
+
* persistence mode (or a string to set the `storeTableName` property of the
|
|
49
|
+
* JSON serialization).
|
|
50
|
+
* @returns A reference to the new Persister object.
|
|
51
|
+
* @example
|
|
52
|
+
* This example creates a Persister object and persists the Store to a local
|
|
53
|
+
* SQLite database as a JSON serialization into the `my_tinybase` table. It
|
|
54
|
+
* makes a change to the database directly and then reloads it back into the
|
|
55
|
+
* Store.
|
|
56
|
+
*
|
|
57
|
+
* ```js
|
|
58
|
+
* const sqlite3 = await sqlite3InitModule();
|
|
59
|
+
* const db = new sqlite3.oo1.DB(':memory:', 'c');
|
|
60
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
61
|
+
* const persister = createSqliteWasmPersister(
|
|
62
|
+
* store,
|
|
63
|
+
* sqlite3,
|
|
64
|
+
* db,
|
|
65
|
+
* 'my_tinybase',
|
|
66
|
+
* );
|
|
67
|
+
*
|
|
68
|
+
* await persister.save();
|
|
69
|
+
* console.log(db.exec('SELECT * FROM my_tinybase;', {rowMode: 'object'}));
|
|
70
|
+
* // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
|
|
71
|
+
*
|
|
72
|
+
* db.exec(
|
|
73
|
+
* 'UPDATE my_tinybase SET store = ' +
|
|
74
|
+
* `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
|
|
75
|
+
* );
|
|
76
|
+
* await persister.load();
|
|
77
|
+
* console.log(store.getTables());
|
|
78
|
+
* // -> {pets: {felix: {species: 'cat'}}}
|
|
79
|
+
*
|
|
80
|
+
* persister.destroy();
|
|
81
|
+
* ```
|
|
82
|
+
* @example
|
|
83
|
+
* This example creates a Persister object and persists the Store to a local
|
|
84
|
+
* SQLite database with tabular mapping.
|
|
85
|
+
*
|
|
86
|
+
* ```js
|
|
87
|
+
* const sqlite3 = await sqlite3InitModule();
|
|
88
|
+
* const db = new sqlite3.oo1.DB(':memory:', 'c');
|
|
89
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
90
|
+
* const persister = createSqliteWasmPersister(store, sqlite3, db, {
|
|
91
|
+
* mode: 'tabular',
|
|
92
|
+
* tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
|
|
93
|
+
* });
|
|
94
|
+
*
|
|
95
|
+
* await persister.save();
|
|
96
|
+
* console.log(db.exec('SELECT * FROM pets;', {rowMode: 'object'}));
|
|
97
|
+
* // -> [{_id: 'fido', species: 'dog'}]
|
|
98
|
+
*
|
|
99
|
+
* db.exec(`INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`);
|
|
100
|
+
* await persister.load();
|
|
101
|
+
* console.log(store.getTables());
|
|
102
|
+
* // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
|
|
103
|
+
*
|
|
104
|
+
* persister.destroy();
|
|
105
|
+
* ```
|
|
106
|
+
* @category Creation
|
|
107
|
+
*/
|
|
108
|
+
export function createSqliteWasmPersister<Schemas extends OptionalSchemas>(
|
|
109
|
+
store: Store<Schemas>,
|
|
110
|
+
sqlite3: any,
|
|
111
|
+
db: any,
|
|
112
|
+
configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
|
|
113
|
+
): Persister<Schemas>;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-sqlite3 module of the TinyBase project lets you save and load
|
|
3
|
+
* Store data to and from a local SQLite database (in an appropriate
|
|
4
|
+
* environment).
|
|
5
|
+
* @see Persisting Data guide
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module persister-sqlite3
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {DatabasePersisterConfig, Persister} from '../persisters';
|
|
11
|
+
import {OptionalSchemas, Store} from '../store';
|
|
12
|
+
import {Database} from 'sqlite3';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The createSqlite3Persister function creates a Persister object that can
|
|
16
|
+
* persist the Store to a local SQLite database (in an appropriate environment).
|
|
17
|
+
*
|
|
18
|
+
* This has schema-based typing. The following is a simplified representation:
|
|
19
|
+
*
|
|
20
|
+
* ```ts override
|
|
21
|
+
* createSqlite3Persister(
|
|
22
|
+
* store: Store,
|
|
23
|
+
* db: Database,
|
|
24
|
+
* configOrStoreTableName?: DatabasePersisterConfig | string,
|
|
25
|
+
* ): Persister;
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* As well as providing a reference to the Store to persist, you must provide a
|
|
29
|
+
* `db` parameter which identifies the database instance.
|
|
30
|
+
*
|
|
31
|
+
* A database Persister uses one of two modes: either a JSON serialization of
|
|
32
|
+
* the whole Store stored in a single row of a table (the default), or a tabular
|
|
33
|
+
* mapping of Table Ids to database table names and vice-versa).
|
|
34
|
+
*
|
|
35
|
+
* The third argument is a DatabasePersisterConfig object that configures which
|
|
36
|
+
* of those modes to use, and settings for each. If the third argument is simply
|
|
37
|
+
* a string, it is used as the `storeTableName` property of the JSON
|
|
38
|
+
* serialization.
|
|
39
|
+
*
|
|
40
|
+
* See the documentation for the DpcJson and DpcTabular types for more
|
|
41
|
+
* information on how both of those modes can be configured.
|
|
42
|
+
* @param store The Store to persist.
|
|
43
|
+
* @param db The database instance that was returned from `new
|
|
44
|
+
* sqlite3.Database(...)`.
|
|
45
|
+
* @param configOrStoreTableName A DatabasePersisterConfig to configure the
|
|
46
|
+
* persistence mode (or a string to set the `storeTableName` property of the
|
|
47
|
+
* JSON serialization).
|
|
48
|
+
* @returns A reference to the new Persister object.
|
|
49
|
+
* @example
|
|
50
|
+
* This example creates a Persister object and persists the Store to a local
|
|
51
|
+
* SQLite database as a JSON serialization into the `my_tinybase` table. It
|
|
52
|
+
* makes a change to the database directly and then reloads it back into the
|
|
53
|
+
* Store.
|
|
54
|
+
*
|
|
55
|
+
* ```js
|
|
56
|
+
* const db = new sqlite3.Database(':memory:');
|
|
57
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
58
|
+
* const persister = createSqlite3Persister(store, db, 'my_tinybase');
|
|
59
|
+
*
|
|
60
|
+
* await persister.save();
|
|
61
|
+
* console.log(
|
|
62
|
+
* await new Promise((resolve) =>
|
|
63
|
+
* db.all('SELECT * FROM my_tinybase;', (_, rows) => resolve(rows)),
|
|
64
|
+
* ),
|
|
65
|
+
* );
|
|
66
|
+
* // -> [{_id: '_', store: '[{"pets":{"fido":{"species":"dog"}}},{}]'}]
|
|
67
|
+
*
|
|
68
|
+
* await new Promise((resolve) =>
|
|
69
|
+
* db.all(
|
|
70
|
+
* 'UPDATE my_tinybase SET store = ' +
|
|
71
|
+
* `'[{"pets":{"felix":{"species":"cat"}}},{}]' WHERE _id = '_';`,
|
|
72
|
+
* resolve,
|
|
73
|
+
* ),
|
|
74
|
+
* );
|
|
75
|
+
* await persister.load();
|
|
76
|
+
* console.log(store.getTables());
|
|
77
|
+
* // -> {pets: {felix: {species: 'cat'}}}
|
|
78
|
+
*
|
|
79
|
+
* persister.destroy();
|
|
80
|
+
* ```
|
|
81
|
+
* @example
|
|
82
|
+
* This example creates a Persister object and persists the Store to a local
|
|
83
|
+
* SQLite database with tabular mapping.
|
|
84
|
+
*
|
|
85
|
+
* ```js
|
|
86
|
+
* const db = new sqlite3.Database(':memory:');
|
|
87
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
88
|
+
* const persister = createSqlite3Persister(store, db, {
|
|
89
|
+
* mode: 'tabular',
|
|
90
|
+
* tables: {load: {pets: 'pets'}, save: {pets: 'pets'}},
|
|
91
|
+
* });
|
|
92
|
+
*
|
|
93
|
+
* await persister.save();
|
|
94
|
+
* console.log(
|
|
95
|
+
* await new Promise((resolve) =>
|
|
96
|
+
* db.all('SELECT * FROM pets;', (_, rows) => resolve(rows)),
|
|
97
|
+
* ),
|
|
98
|
+
* );
|
|
99
|
+
* // -> [{_id: 'fido', species: 'dog'}]
|
|
100
|
+
*
|
|
101
|
+
* await new Promise((resolve) =>
|
|
102
|
+
* db.all(
|
|
103
|
+
* `INSERT INTO pets (_id, species) VALUES ('felix', 'cat')`,
|
|
104
|
+
* resolve,
|
|
105
|
+
* ),
|
|
106
|
+
* );
|
|
107
|
+
* await persister.load();
|
|
108
|
+
* console.log(store.getTables());
|
|
109
|
+
* // -> {pets: {fido: {species: 'dog'}, felix: {species: 'cat'}}}
|
|
110
|
+
*
|
|
111
|
+
* persister.destroy();
|
|
112
|
+
* ```
|
|
113
|
+
* @category Creation
|
|
114
|
+
*/
|
|
115
|
+
export function createSqlite3Persister<Schemas extends OptionalSchemas>(
|
|
116
|
+
store: Store<Schemas>,
|
|
117
|
+
db: Database,
|
|
118
|
+
configOrStoreTableName?: DatabasePersisterConfig<Schemas> | string,
|
|
119
|
+
): Persister<Schemas>;
|