@livestore/livestore 0.0.10 → 0.0.13
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/README.md +7 -7
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/react/fixture.d.ts +4 -120
- package/dist/__tests__/react/fixture.d.ts.map +1 -1
- package/dist/__tests__/react/fixture.js +19 -26
- package/dist/__tests__/react/fixture.js.map +1 -1
- package/dist/__tests__/reactive.test.js +31 -0
- package/dist/__tests__/reactive.test.js.map +1 -1
- package/dist/backends/base.d.ts +4 -4
- package/dist/backends/{web-in-memory.d.ts → in-memory/index.d.ts} +6 -6
- package/dist/backends/in-memory/index.d.ts.map +1 -0
- package/dist/backends/{web-in-memory.js → in-memory/index.js} +7 -7
- package/dist/backends/in-memory/index.js.map +1 -0
- package/dist/backends/index.d.ts +4 -8
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +0 -22
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/{tauri.d.ts → tauri/index.d.ts} +5 -6
- package/dist/backends/tauri/index.d.ts.map +1 -0
- package/dist/backends/{tauri.js → tauri/index.js} +4 -4
- package/dist/backends/tauri/index.js.map +1 -0
- package/dist/backends/{web.d.ts → web-worker/index.d.ts} +6 -7
- package/dist/backends/web-worker/index.d.ts.map +1 -0
- package/dist/backends/{web.js → web-worker/index.js} +6 -6
- package/dist/backends/web-worker/index.js.map +1 -0
- package/dist/backends/{web-worker.d.ts → web-worker/worker.d.ts} +3 -3
- package/dist/backends/web-worker/worker.d.ts.map +1 -0
- package/dist/backends/{web-worker.js → web-worker/worker.js} +3 -3
- package/dist/backends/web-worker/worker.js.map +1 -0
- package/dist/effect/LiveStore.d.ts +6 -6
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +2 -5
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/events.d.ts +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +1 -1
- package/dist/events.js.map +1 -1
- package/dist/inMemoryDatabase.d.ts +5 -10
- package/dist/inMemoryDatabase.d.ts.map +1 -1
- package/dist/inMemoryDatabase.js +78 -89
- package/dist/inMemoryDatabase.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/migrations.d.ts +9 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +62 -0
- package/dist/migrations.js.map +1 -0
- package/dist/otel.d.ts +0 -1
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +0 -11
- package/dist/otel.js.map +1 -1
- package/dist/react/LiveStoreProvider.d.ts +5 -4
- package/dist/react/LiveStoreProvider.d.ts.map +1 -1
- package/dist/react/LiveStoreProvider.js +6 -5
- package/dist/react/LiveStoreProvider.js.map +1 -1
- package/dist/react/index.d.ts +2 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/useGlobalQuery.d.ts.map +1 -1
- package/dist/react/useGlobalQuery.js +0 -2
- package/dist/react/useGlobalQuery.js.map +1 -1
- package/dist/react/useLiveStoreComponent.d.ts +22 -17
- package/dist/react/useLiveStoreComponent.d.ts.map +1 -1
- package/dist/react/useLiveStoreComponent.js +46 -17
- package/dist/react/useLiveStoreComponent.js.map +1 -1
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +1 -0
- package/dist/reactive.js.map +1 -1
- package/dist/schema.d.ts +32 -112
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +36 -79
- package/dist/schema.js.map +1 -1
- package/dist/storage/base.d.ts +10 -0
- package/dist/storage/base.d.ts.map +1 -0
- package/dist/storage/base.js +14 -0
- package/dist/storage/base.js.map +1 -0
- package/dist/storage/in-memory/index.d.ts +15 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -0
- package/dist/storage/in-memory/index.js +14 -0
- package/dist/storage/in-memory/index.js.map +1 -0
- package/dist/storage/index.d.ts +14 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +9 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/tauri/index.d.ts +19 -0
- package/dist/storage/tauri/index.d.ts.map +1 -0
- package/dist/storage/tauri/index.js +38 -0
- package/dist/storage/tauri/index.js.map +1 -0
- package/dist/storage/utils/idb.d.ts +10 -0
- package/dist/storage/utils/idb.d.ts.map +1 -0
- package/dist/storage/utils/idb.js +58 -0
- package/dist/storage/utils/idb.js.map +1 -0
- package/dist/storage/web-worker/index.d.ts +27 -0
- package/dist/storage/web-worker/index.d.ts.map +1 -0
- package/dist/storage/web-worker/index.js +76 -0
- package/dist/storage/web-worker/index.js.map +1 -0
- package/dist/storage/web-worker/worker.d.ts +13 -0
- package/dist/storage/web-worker/worker.d.ts.map +1 -0
- package/dist/storage/web-worker/worker.js +110 -0
- package/dist/storage/web-worker/worker.js.map +1 -0
- package/dist/store.d.ts +6 -6
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +93 -63
- package/dist/store.js.map +1 -1
- package/dist/util.d.ts +3 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +2 -0
- package/dist/util.js.map +1 -1
- package/package.json +50 -23
- package/src/__tests__/react/fixture.tsx +19 -28
- package/src/__tests__/reactive.test.ts +39 -0
- package/src/effect/LiveStore.ts +8 -13
- package/src/events.ts +1 -1
- package/src/inMemoryDatabase.ts +100 -117
- package/src/index.ts +10 -16
- package/src/migrations.ts +101 -0
- package/src/otel.ts +0 -11
- package/src/react/LiveStoreProvider.tsx +12 -8
- package/src/react/index.ts +9 -0
- package/src/react/useGlobalQuery.ts +0 -3
- package/src/react/useLiveStoreComponent.ts +98 -38
- package/src/reactive.ts +2 -1
- package/src/schema.ts +72 -145
- package/src/storage/in-memory/index.ts +21 -0
- package/src/storage/index.ts +27 -0
- package/src/{backends/tauri.ts → storage/tauri/index.ts} +13 -27
- package/src/storage/web-worker/index.ts +118 -0
- package/src/{backends/web-worker.ts → storage/web-worker/worker.ts} +17 -52
- package/src/store.ts +112 -79
- package/src/util.ts +5 -1
- package/tsconfig.json +1 -3
- package/dist/backends/noop.d.ts +0 -18
- package/dist/backends/noop.d.ts.map +0 -1
- package/dist/backends/noop.js +0 -21
- package/dist/backends/noop.js.map +0 -1
- package/dist/backends/tauri.d.ts.map +0 -1
- package/dist/backends/tauri.js.map +0 -1
- package/dist/backends/web-in-memory.d.ts.map +0 -1
- package/dist/backends/web-in-memory.js.map +0 -1
- package/dist/backends/web-worker.d.ts.map +0 -1
- package/dist/backends/web-worker.js.map +0 -1
- package/dist/backends/web.d.ts.map +0 -1
- package/dist/backends/web.js.map +0 -1
- package/src/backends/base.ts +0 -67
- package/src/backends/index.ts +0 -98
- package/src/backends/noop.ts +0 -32
- package/src/backends/web-in-memory.ts +0 -65
- package/src/backends/web.ts +0 -97
- /package/src/{backends → storage}/utils/idb.ts +0 -0
package/dist/backends/noop.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type * as otel from '@opentelemetry/api';
|
|
2
|
-
import type { ParamsObject } from '../util.js';
|
|
3
|
-
import { BaseBackend } from './base.js';
|
|
4
|
-
import type { SelectResponse } from './index.js';
|
|
5
|
-
export type BackendOptionsNoop = {
|
|
6
|
-
type: 'noop';
|
|
7
|
-
/** Specifies where to persist data for this backend */
|
|
8
|
-
otelTracer?: otel.Tracer;
|
|
9
|
-
};
|
|
10
|
-
export declare class NoopBackend extends BaseBackend {
|
|
11
|
-
readonly otelTracer: otel.Tracer;
|
|
12
|
-
constructor(otelTracer: otel.Tracer);
|
|
13
|
-
static load: (options: BackendOptionsNoop) => Promise<NoopBackend>;
|
|
14
|
-
execute: (_query: string, _bindValues?: ParamsObject) => void;
|
|
15
|
-
select: <T>(_query: string, _bindValues?: ParamsObject) => Promise<SelectResponse<T>>;
|
|
16
|
-
getPersistedData: () => Promise<Uint8Array>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=noop.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../../src/backends/noop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;CACzB,CAAA;AAED,qBAAa,WAAY,SAAQ,WAAW;IAC9B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM;gBAAvB,UAAU,EAAE,IAAI,CAAC,MAAM;IAI5C,MAAM,CAAC,IAAI,YAAmB,kBAAkB,KAAG,QAAQ,WAAW,CAAC,CAEtE;IAED,OAAO,WAAY,MAAM,gBAAgB,YAAY,KAAG,IAAI,CAAM;IAElE,MAAM,cAAqB,MAAM,gBAAgB,YAAY,gCAE5D;IAED,gBAAgB,QAAa,QAAQ,UAAU,CAAC,CAE/C;CACF"}
|
package/dist/backends/noop.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
var _a;
|
|
2
|
-
import { makeNoopTracer } from '@livestore/utils';
|
|
3
|
-
import { BaseBackend } from './base.js';
|
|
4
|
-
export class NoopBackend extends BaseBackend {
|
|
5
|
-
constructor(otelTracer) {
|
|
6
|
-
super();
|
|
7
|
-
this.otelTracer = otelTracer;
|
|
8
|
-
this.execute = (_query, _bindValues) => { };
|
|
9
|
-
this.select = async (_query, _bindValues) => {
|
|
10
|
-
return { results: [] };
|
|
11
|
-
};
|
|
12
|
-
this.getPersistedData = async () => {
|
|
13
|
-
return new Uint8Array();
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
_a = NoopBackend;
|
|
18
|
-
NoopBackend.load = async (options) => {
|
|
19
|
-
return new _a(options.otelTracer ?? makeNoopTracer());
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=noop.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../src/backends/noop.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIjD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AASvC,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAqB,UAAuB;QAC1C,KAAK,EAAE,CAAA;QADY,eAAU,GAAV,UAAU,CAAa;QAQ5C,YAAO,GAAG,CAAC,MAAc,EAAE,WAA0B,EAAQ,EAAE,GAAE,CAAC,CAAA;QAElE,WAAM,GAAG,KAAK,EAAK,MAAc,EAAE,WAA0B,EAA8B,EAAE;YAC3F,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACxB,CAAC,CAAA;QAED,qBAAgB,GAAG,KAAK,IAAyB,EAAE;YACjD,OAAO,IAAI,UAAU,EAAE,CAAA;QACzB,CAAC,CAAA;IAdD,CAAC;;;AAEM,gBAAI,GAAG,KAAK,EAAE,OAA2B,EAAwB,EAAE;IACxE,OAAO,IAAI,EAAW,CAAC,OAAO,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC,CAAA;AAChE,CAAC,AAFU,CAEV"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tauri.d.ts","sourceRoot":"","sources":["../../src/backends/tauri.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAG/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAElE,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,qBAAa,YAAa,SAAQ,WAAW;IAEzC,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM;IAChC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI;gBAHrB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,IAAI,CAAC,MAAM,EACvB,UAAU,EAAE,IAAI,CAAC,IAAI;IAKhC,MAAM,CAAC,IAAI,iCACqB,mBAAmB,8BACrB,gBAAgB,KAC3C,QAAQ,YAAY,CAAC,CAKvB;IAED,OAAO,UAAW,MAAM,eAAe,YAAY,eAAe,KAAK,IAAI,KAAG,IAAI,CAQjF;IAED,MAAM,aAAoB,MAAM,eAAe,YAAY,eAAe,KAAK,IAAI,gCAOlF;IAED,gBAAgB,gBAAuB,KAAK,IAAI,KAAG,QAAQ,UAAU,CAAC,CAOrE;IAED,OAAO,CAAC,WAAW,CAA2E;CAC/F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tauri.js","sourceRoot":"","sources":["../../src/backends/tauri.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AASvC,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YACW,UAAkB,EAClB,SAAiB,EACjB,UAAuB,EACvB,UAAqB;QAE9B,KAAK,EAAE,CAAA;QALE,eAAU,GAAV,UAAU,CAAQ;QAClB,cAAS,GAAT,SAAS,CAAQ;QACjB,eAAU,GAAV,UAAU,CAAa;QACvB,eAAU,GAAV,UAAU,CAAW;QAehC,YAAO,GAAG,CAAC,KAAa,EAAE,UAAyB,EAAE,UAAsB,EAAQ,EAAE;YACnF,2FAA2F;YAC3F,KAAK,MAAM,CAAC,SAAS,EAAE;gBACrB,MAAM,EAAE,IAAI,CAAC,UAAU;gBACvB,KAAK;gBACL,MAAM,EAAE,iBAAiB,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,CAAC;gBAClD,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;aACvC,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,WAAM,GAAG,KAAK,EAAK,KAAa,EAAE,UAAyB,EAAE,UAAsB,EAA8B,EAAE;YACjH,OAAO,MAAM,CAAC,QAAQ,EAAE;gBACtB,EAAE,EAAE,IAAI,CAAC,UAAU;gBACnB,KAAK;gBACL,MAAM,EAAE,UAAU,IAAI,EAAE;gBACxB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;aACvC,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,qBAAgB,GAAG,KAAK,EAAE,UAAsB,EAAuB,EAAE;YACvE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;YAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,oBAAoB,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;YAE/E,OAAO,KAAK,CAAC,uDAAuD,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACtG,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAC9E,CAAA;QACH,CAAC,CAAA;QAEO,gBAAW,GAAG,CAAC,UAAsB,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAE,CAAA;IAxC9F,CAAC;;;AAEM,iBAAI,GAAG,KAAK,EACjB,EAAE,SAAS,EAAE,aAAa,EAAuB,EACjD,EAAE,UAAU,EAAE,UAAU,EAAoB,EACrB,EAAE;IACzB,MAAM,UAAU,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAA;IAClD,MAAM,MAAM,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAEjG,OAAO,IAAI,EAAY,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AACxE,CAAC,AARU,CAQV;AAiCH,MAAM,YAAY,GAAG,CAAC,UAAiC,EAAE,EAAE;IACzD,MAAM,WAAW,GAAG,UAAU,EAAE,WAAW,EAAE,CAAA;IAC7C,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACjG,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-in-memory.d.ts","sourceRoot":"","sources":["../../src/backends/web-in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,KAAK,UAAU,MAAM,YAAY,CAAA;AAG7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAElE,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,eAAe,CAAA;CACtB,CAAA;AAED,OAAO,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAA;CAAE,CAAA;AAG/E,qBAAa,kBAAmB,SAAQ,WAAW;IAE/C,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM;IAChC,QAAQ,CAAC,EAAE,EAAE,gBAAgB;gBADpB,UAAU,EAAE,IAAI,CAAC,MAAM,EACvB,EAAE,EAAE,gBAAgB;IAK/B,MAAM,CAAC,IAAI,aACC,yBAAyB,kBACnB,gBAAgB,KAC/B,QAAQ,kBAAkB,CAAC,CAS7B;IAED,OAAO,UAAW,MAAM,eAAe,YAAY,KAAG,IAAI,CAOzD;IAED,MAAM,aAAoB,MAAM,eAAe,YAAY,gCAY1D;IAED,gBAAgB,QAAa,QAAQ,UAAU,CAAC,CAE/C;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-in-memory.js","sourceRoot":"","sources":["../../src/backends/web-in-memory.ts"],"names":[],"mappings":";AAEA,OAAO,iBAAiB,MAAM,YAAY,CAAA;AAG1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AASvC,wDAAwD;AACxD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,YACW,UAAuB,EACvB,EAAoB;QAE7B,KAAK,EAAE,CAAA;QAHE,eAAU,GAAV,UAAU,CAAa;QACvB,OAAE,GAAF,EAAE,CAAkB;QAmB/B,YAAO,GAAG,CAAC,KAAa,EAAE,UAAyB,EAAQ,EAAE;YAC3D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,iBAAiB,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,CAAS;gBACxD,WAAW,EAAE,YAAY;gBACzB,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,WAAM,GAAG,KAAK,EAAK,KAAa,EAAE,UAAyB,EAA8B,EAAE;YACzF,MAAM,UAAU,GAAQ,EAAE,CAAA;YAE1B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,iBAAiB,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,CAAS;gBACxD,OAAO,EAAE,QAAQ;gBACjB,UAAU;gBACV,iFAAiF;aAC1E,CAAC,CAAA;YAEV,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;QAChC,CAAC,CAAA;QAED,qBAAgB,GAAG,KAAK,IAAyB,EAAE;YACjD,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QAC3D,CAAC,CAAA;IAzCD,CAAC;;;AAEM,uBAAI,GAAG,KAAK,EACjB,QAAmC,EACnC,EAAE,UAAU,EAAoB,EACH,EAAE;IAC/B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;QACtC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC;QAC1D,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC;KAChE,CAAC,CAAA;IACF,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAqB,CAAA;IACvF,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAEtB,OAAO,IAAI,EAAkB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC,AAZU,CAYV"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-worker.d.ts","sourceRoot":"","sources":["../../src/backends/web-worker.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AA6E1E,KAAK,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAA;AA2ElE,QAAA,MAAM,aAAa;;oCA/HqE,wBAAwB;;kCAsD3E,kBAAkB,EAAE,KAAG,IAAI;6BA4ChC,MAAM,eAAe,QAAQ;4BAa1B,QAAQ,UAAU,CAAC;CAgBqB,CAAA;AAE3E,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-worker.js","sourceRoot":"","sources":["../../src/backends/web-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/backends/web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,KAAK,CAAA;IACX,uDAAuD;IACvD,0BAA0B,EAAE,wBAAwB,CAAA;CACrD,CAAA;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IACrC,0BAA0B,EAAE,wBAAwB,CAAA;IACpD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAA;IAEvB,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,YAAY,CAAA;KAAE,EAAE,CAAK;IACrE,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAY;IAEvD,OAAO;IAeP,MAAM,CAAC,IAAI,mCACuB,iBAAiB,kBACjC,gBAAgB,KAC/B,QAAQ,gBAAgB,CAAC,CAgB3B;IAED,OAAO,UAAW,MAAM,gBAAgB,YAAY,UAgBnD;IAED,MAAM,aAAoB,MAAM,eAAe,YAAY,gCAW1D;IAED,gBAAgB,iBAAwB,KAAK,IAAI,KAAG,QAAQ,UAAU,CAAC,CAKtE;CACF"}
|
package/dist/backends/web.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/backends/web.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAGlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAUvC,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAQ/C,YAAoB,EAClB,MAAM,EACN,0BAA0B,EAC1B,UAAU,GAKX;QACC,KAAK,EAAE,CAAA;QAZT,qBAAgB,GAAmD,EAAE,CAAA;QACrE,qBAAgB,GAA8B,SAAS,CAAA;QAsCvD,YAAO,GAAG,CAAC,KAAa,EAAE,WAA0B,EAAE,EAAE;YACtD,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;YAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;YAEjD,sJAAsJ;YACtJ,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;gBACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC9C,UAAU,CAAC,GAAG,EAAE;wBACd,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;wBACnD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;wBAC1B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;wBAEjC,OAAO,EAAE,CAAA;oBACX,CAAC,EAAE,EAAE,CAAC,CAAA;gBACR,CAAC,CAAC,CAAA;aACH;QACH,CAAC,CAAA;QAED,WAAM,GAAG,KAAK,EAAK,KAAa,EAAE,UAAyB,EAA8B,EAAE;YACzF,wJAAwJ;YACxJ,MAAM,IAAI,CAAC,gBAAgB,CAAA;YAE3B,IAAI;gBACF,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAsB,CAAA;gBACnF,OAAO,QAAQ,CAAA;aAChB;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,6CAA6C,KAAK,EAAE,CAAC,CAAA;gBACnE,MAAM,CAAC,CAAA;aACR;QACH,CAAC,CAAA;QAED,qBAAgB,GAAG,KAAK,EAAE,WAAuB,EAAuB,EAAE;YACxE,iEAAiE;YACjE,MAAM,IAAI,CAAC,gBAAgB,CAAA;YAE3B,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAA;QACvC,CAAC,CAAA;QA9DC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAA;QAC5D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;;;AAEM,qBAAI,GAAG,KAAK,EACjB,EAAE,0BAA0B,EAAqB,EACjD,EAAE,UAAU,EAAoB,EACL,EAAE;IAC7B,6DAA6D;IAC7D,sDAAsD;IACtD,sGAAsG;IACtG,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrE,IAAI,EAAE,QAAQ;KACf,CAAC,CAAA;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAgB,MAAM,CAAC,CAAA;IAEzD,MAAM,aAAa,CAAC,UAAU,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAA;IAE9D,OAAO,IAAI,EAAgB,CAAC;QAC1B,MAAM,EAAE,aAAa;QACrB,0BAA0B;QAC1B,UAAU;KACX,CAAC,CAAA;AACJ,CAAC,AAnBU,CAmBV"}
|
package/src/backends/base.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
-
import { errorToString } from '@livestore/utils'
|
|
3
|
-
import { identity } from '@livestore/utils/effect'
|
|
4
|
-
import * as otel from '@opentelemetry/api'
|
|
5
|
-
|
|
6
|
-
import type { LiveStoreEvent } from '../events.js'
|
|
7
|
-
// import { EVENTS_TABLE_NAME } from '../events.js'
|
|
8
|
-
import type { ActionDefinition } from '../schema.js'
|
|
9
|
-
import type { ParamsObject } from '../util.js'
|
|
10
|
-
import type { Backend, SelectResponse } from './index.js'
|
|
11
|
-
|
|
12
|
-
export abstract class BaseBackend implements Backend {
|
|
13
|
-
abstract otelTracer: otel.Tracer
|
|
14
|
-
|
|
15
|
-
select = async <T = any>(query: string, bindValues?: ParamsObject): Promise<SelectResponse<T>> => {
|
|
16
|
-
throw new Error('Method not implemented.')
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
execute = (query: string, bindValues?: ParamsObject, parentSpan?: otel.Span): void => {
|
|
20
|
-
throw new Error('Method not implemented.')
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
getPersistedData = async (parentSpan?: otel.Span): Promise<Uint8Array> => {
|
|
24
|
-
throw new Error('Method not implemented.')
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// TODO move `applyEvent` logic to Store and only call `execute` here
|
|
28
|
-
applyEvent = (event: LiveStoreEvent, eventDefinition: ActionDefinition, parentSpan?: otel.Span): void => {
|
|
29
|
-
const ctx = parentSpan ? otel.trace.setSpan(otel.context.active(), parentSpan) : otel.context.active()
|
|
30
|
-
this.otelTracer.startActiveSpan('LiveStore:backend:applyEvent', {}, ctx, (span) => {
|
|
31
|
-
try {
|
|
32
|
-
// Careful: this SQL statement is duplicated in the backend.
|
|
33
|
-
// Remember to update it in src-tauri/src/store.rs:apply_event as well.
|
|
34
|
-
// await this.execute(sql`insert into ${EVENTS_TABLE_NAME} (id, type, args) values ($id, $type, $args)`, {
|
|
35
|
-
// id: event.id,
|
|
36
|
-
// type: event.type,
|
|
37
|
-
// args: JSON.stringify(event.args ?? {}),
|
|
38
|
-
// })
|
|
39
|
-
|
|
40
|
-
const statement =
|
|
41
|
-
typeof eventDefinition.statement === 'function'
|
|
42
|
-
? eventDefinition.statement(event.args)
|
|
43
|
-
: eventDefinition.statement
|
|
44
|
-
|
|
45
|
-
const prepareBindValues = eventDefinition.prepareBindValues ?? identity
|
|
46
|
-
|
|
47
|
-
const bindValues =
|
|
48
|
-
typeof eventDefinition.statement === 'function' && statement.argsAlreadyBound
|
|
49
|
-
? {}
|
|
50
|
-
: prepareBindValues(event.args)
|
|
51
|
-
|
|
52
|
-
span.setAttributes({
|
|
53
|
-
'livestore.statement.sql': statement.sql,
|
|
54
|
-
'livestore.statement.writeTables': statement.writeTables,
|
|
55
|
-
'livestore.statement.bindVales': JSON.stringify(bindValues),
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
this.execute(statement.sql, bindValues, span)
|
|
59
|
-
} catch (e: any) {
|
|
60
|
-
span.setStatus({ code: otel.SpanStatusCode.ERROR, message: errorToString(e) })
|
|
61
|
-
throw e
|
|
62
|
-
} finally {
|
|
63
|
-
span.end()
|
|
64
|
-
}
|
|
65
|
-
})
|
|
66
|
-
}
|
|
67
|
-
}
|
package/src/backends/index.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
// A backend represents a raw SQLite database.
|
|
2
|
-
// Examples include:
|
|
3
|
-
// - A native SQLite process running in a Tauri Rust process
|
|
4
|
-
// - A SQL.js WASM version of SQLite running in a web worker
|
|
5
|
-
//
|
|
6
|
-
// We can send commands to execute various kinds of queries,
|
|
7
|
-
// and respond to various events from the database.
|
|
8
|
-
|
|
9
|
-
import type * as otel from '@opentelemetry/api'
|
|
10
|
-
|
|
11
|
-
import type { LiveStoreEvent } from '../events.js'
|
|
12
|
-
import type { ActionDefinition } from '../schema.js'
|
|
13
|
-
import type { ParamsObject } from '../util.js'
|
|
14
|
-
import { casesHandled } from '../util.js'
|
|
15
|
-
import type { BackendOptionsTauri } from './tauri.js'
|
|
16
|
-
import type { BackendOptionsWeb } from './web.js'
|
|
17
|
-
import { WebWorkerBackend } from './web.js'
|
|
18
|
-
import type { BackendOptionsWebInMemory } from './web-in-memory.js'
|
|
19
|
-
import { WebInMemoryBackend } from './web-in-memory.js'
|
|
20
|
-
|
|
21
|
-
/* A location of a persistent writable SQLite file */
|
|
22
|
-
export type WritableDatabaseLocation =
|
|
23
|
-
| {
|
|
24
|
-
type: 'opfs'
|
|
25
|
-
virtualFilename: string
|
|
26
|
-
}
|
|
27
|
-
| {
|
|
28
|
-
type: 'indexeddb'
|
|
29
|
-
virtualFilename: string
|
|
30
|
-
}
|
|
31
|
-
| {
|
|
32
|
-
type: 'filesystem'
|
|
33
|
-
directory: string
|
|
34
|
-
filename: string
|
|
35
|
-
}
|
|
36
|
-
| {
|
|
37
|
-
type: 'volatile-in-memory'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface Backend {
|
|
41
|
-
// Select some data from the DB.
|
|
42
|
-
// This should only do reads, not writes, but we don't strongly enforce that.
|
|
43
|
-
select<T = any>(query: string, bindValues?: ParamsObject, parentSpan?: otel.Span): Promise<SelectResponse<T>>
|
|
44
|
-
|
|
45
|
-
// Execute a query where you don't care about the result.
|
|
46
|
-
// Used for writes and configuration changes.
|
|
47
|
-
execute(query: string, bindValues?: ParamsObject, parentSpan?: otel.Span): void
|
|
48
|
-
|
|
49
|
-
/** Apply an event to the backend */
|
|
50
|
-
applyEvent(event: LiveStoreEvent, eventDefiniton: ActionDefinition, parentSpan?: otel.Span): void
|
|
51
|
-
|
|
52
|
-
/** Return a snapshot of persisted data from the backend */
|
|
53
|
-
getPersistedData(parentSpan?: otel.Span): Promise<Uint8Array>
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export type BackendType = 'tauri' | 'web' | 'web-in-memory'
|
|
57
|
-
|
|
58
|
-
export const isBackendType = (type: string): type is BackendType => {
|
|
59
|
-
return type === 'tauri' || type === 'web' || type === 'web-in-memory'
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export type SelectResponse<T = any> = {
|
|
63
|
-
results: T[]
|
|
64
|
-
|
|
65
|
-
// other perf stats metadata about how long the query took
|
|
66
|
-
[key: string]: any
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export enum IndexType {
|
|
70
|
-
Basic = 'Basic',
|
|
71
|
-
FullText = 'FullText',
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export type BackendOptions = BackendOptionsTauri | BackendOptionsWeb | BackendOptionsWebInMemory
|
|
75
|
-
export type BackendOtelProps = {
|
|
76
|
-
otelTracer: otel.Tracer
|
|
77
|
-
parentSpan: otel.Span
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export const createBackend = async (options: BackendOptions, otelProps: BackendOtelProps): Promise<Backend> => {
|
|
81
|
-
switch (options.type) {
|
|
82
|
-
case 'tauri': {
|
|
83
|
-
// NOTE Dynamic import is needed to avoid Tauri is a dependency of LiveStore (e.g. when used in the web)
|
|
84
|
-
const { TauriBackend } = await import('./tauri.js')
|
|
85
|
-
return await TauriBackend.load(options, otelProps)
|
|
86
|
-
}
|
|
87
|
-
case 'web': {
|
|
88
|
-
return WebWorkerBackend.load(options, otelProps)
|
|
89
|
-
}
|
|
90
|
-
// NOTE currently only needed for testing
|
|
91
|
-
case 'web-in-memory': {
|
|
92
|
-
return WebInMemoryBackend.load(options, otelProps)
|
|
93
|
-
}
|
|
94
|
-
default: {
|
|
95
|
-
casesHandled(options)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
package/src/backends/noop.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { makeNoopTracer } from '@livestore/utils'
|
|
2
|
-
import type * as otel from '@opentelemetry/api'
|
|
3
|
-
|
|
4
|
-
import type { ParamsObject } from '../util.js'
|
|
5
|
-
import { BaseBackend } from './base.js'
|
|
6
|
-
import type { SelectResponse } from './index.js'
|
|
7
|
-
|
|
8
|
-
export type BackendOptionsNoop = {
|
|
9
|
-
type: 'noop'
|
|
10
|
-
/** Specifies where to persist data for this backend */
|
|
11
|
-
otelTracer?: otel.Tracer
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export class NoopBackend extends BaseBackend {
|
|
15
|
-
constructor(readonly otelTracer: otel.Tracer) {
|
|
16
|
-
super()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
static load = async (options: BackendOptionsNoop): Promise<NoopBackend> => {
|
|
20
|
-
return new NoopBackend(options.otelTracer ?? makeNoopTracer())
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
execute = (_query: string, _bindValues?: ParamsObject): void => {}
|
|
24
|
-
|
|
25
|
-
select = async <T>(_query: string, _bindValues?: ParamsObject): Promise<SelectResponse<T>> => {
|
|
26
|
-
return { results: [] }
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
getPersistedData = async (): Promise<Uint8Array> => {
|
|
30
|
-
return new Uint8Array()
|
|
31
|
-
}
|
|
32
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type * as otel from '@opentelemetry/api'
|
|
2
|
-
import type * as SqliteWasm from 'sqlite-esm'
|
|
3
|
-
import sqlite3InitModule from 'sqlite-esm'
|
|
4
|
-
|
|
5
|
-
import type { ParamsObject } from '../util.js'
|
|
6
|
-
import { prepareBindValues } from '../util.js'
|
|
7
|
-
import { BaseBackend } from './base.js'
|
|
8
|
-
import type { BackendOtelProps, SelectResponse } from './index.js'
|
|
9
|
-
|
|
10
|
-
export type BackendOptionsWebInMemory = {
|
|
11
|
-
type: 'web-in-memory'
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
declare type DatabaseWithCAPI = SqliteWasm.Database & { capi: SqliteWasm.CAPI }
|
|
15
|
-
|
|
16
|
-
// NOTE: This backend is currently only used for testing
|
|
17
|
-
export class WebInMemoryBackend extends BaseBackend {
|
|
18
|
-
constructor(
|
|
19
|
-
readonly otelTracer: otel.Tracer,
|
|
20
|
-
readonly db: DatabaseWithCAPI,
|
|
21
|
-
) {
|
|
22
|
-
super()
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
static load = async (
|
|
26
|
-
_options: BackendOptionsWebInMemory,
|
|
27
|
-
{ otelTracer }: BackendOtelProps,
|
|
28
|
-
): Promise<WebInMemoryBackend> => {
|
|
29
|
-
const sqlite3 = await sqlite3InitModule({
|
|
30
|
-
print: (message) => console.log(`[sql-client] ${message}`),
|
|
31
|
-
printErr: (message) => console.error(`[sql-client] ${message}`),
|
|
32
|
-
})
|
|
33
|
-
const db = new sqlite3.oo1.DB({ filename: ':memory:', flags: 'c' }) as DatabaseWithCAPI
|
|
34
|
-
db.capi = sqlite3.capi
|
|
35
|
-
|
|
36
|
-
return new WebInMemoryBackend(otelTracer, db)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
execute = (query: string, bindValues?: ParamsObject): void => {
|
|
40
|
-
this.db.exec({
|
|
41
|
-
sql: query,
|
|
42
|
-
bind: prepareBindValues(bindValues ?? {}, query) as TODO,
|
|
43
|
-
returnValue: 'resultRows',
|
|
44
|
-
rowMode: 'object',
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
select = async <T>(query: string, bindValues?: ParamsObject): Promise<SelectResponse<T>> => {
|
|
49
|
-
const resultRows: T[] = []
|
|
50
|
-
|
|
51
|
-
this.db.exec({
|
|
52
|
-
sql: query,
|
|
53
|
-
bind: prepareBindValues(bindValues ?? {}, query) as TODO,
|
|
54
|
-
rowMode: 'object',
|
|
55
|
-
resultRows,
|
|
56
|
-
// callback: (row: any) => console.log('select result', db.filename, query, row),
|
|
57
|
-
} as TODO)
|
|
58
|
-
|
|
59
|
-
return { results: resultRows }
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
getPersistedData = async (): Promise<Uint8Array> => {
|
|
63
|
-
return this.db.capi.sqlite3_js_db_export(this.db.pointer)
|
|
64
|
-
}
|
|
65
|
-
}
|
package/src/backends/web.ts
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import type * as otel from '@opentelemetry/api'
|
|
2
|
-
import * as Comlink from 'comlink'
|
|
3
|
-
|
|
4
|
-
import type { ParamsObject } from '../util.js'
|
|
5
|
-
import { prepareBindValues } from '../util.js'
|
|
6
|
-
import { BaseBackend } from './base.js'
|
|
7
|
-
import type { BackendOtelProps, SelectResponse, WritableDatabaseLocation } from './index.js'
|
|
8
|
-
import type { WrappedWorker } from './web-worker.js'
|
|
9
|
-
|
|
10
|
-
export type BackendOptionsWeb = {
|
|
11
|
-
type: 'web'
|
|
12
|
-
/** Specifies where to persist data for this backend */
|
|
13
|
-
persistentDatabaseLocation: WritableDatabaseLocation
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export class WebWorkerBackend extends BaseBackend {
|
|
17
|
-
worker: Comlink.Remote<WrappedWorker>
|
|
18
|
-
persistentDatabaseLocation: WritableDatabaseLocation
|
|
19
|
-
otelTracer: otel.Tracer
|
|
20
|
-
|
|
21
|
-
executionBacklog: { query: string; bindValues?: ParamsObject }[] = []
|
|
22
|
-
executionPromise: Promise<void> | undefined = undefined
|
|
23
|
-
|
|
24
|
-
private constructor({
|
|
25
|
-
worker,
|
|
26
|
-
persistentDatabaseLocation,
|
|
27
|
-
otelTracer,
|
|
28
|
-
}: {
|
|
29
|
-
worker: Comlink.Remote<WrappedWorker>
|
|
30
|
-
persistentDatabaseLocation: WritableDatabaseLocation
|
|
31
|
-
otelTracer: otel.Tracer
|
|
32
|
-
}) {
|
|
33
|
-
super()
|
|
34
|
-
this.worker = worker
|
|
35
|
-
this.persistentDatabaseLocation = persistentDatabaseLocation
|
|
36
|
-
this.otelTracer = otelTracer
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
static load = async (
|
|
40
|
-
{ persistentDatabaseLocation }: BackendOptionsWeb,
|
|
41
|
-
{ otelTracer }: BackendOtelProps,
|
|
42
|
-
): Promise<WebWorkerBackend> => {
|
|
43
|
-
// TODO: Importing the worker like this only works with Vite;
|
|
44
|
-
// should this really be inside the LiveStore library?
|
|
45
|
-
// Doesn't work with Firefox right now during dev https://bugzilla.mozilla.org/show_bug.cgi?id=1247687
|
|
46
|
-
const worker = new Worker(new URL('./web-worker.js', import.meta.url), {
|
|
47
|
-
type: 'module',
|
|
48
|
-
})
|
|
49
|
-
const wrappedWorker = Comlink.wrap<WrappedWorker>(worker)
|
|
50
|
-
|
|
51
|
-
await wrappedWorker.initialize({ persistentDatabaseLocation })
|
|
52
|
-
|
|
53
|
-
return new WebWorkerBackend({
|
|
54
|
-
worker: wrappedWorker,
|
|
55
|
-
persistentDatabaseLocation,
|
|
56
|
-
otelTracer,
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
execute = (query: string, bindValues_?: ParamsObject) => {
|
|
61
|
-
const bindValues = prepareBindValues(bindValues_ ?? {}, query)
|
|
62
|
-
this.executionBacklog.push({ query, bindValues })
|
|
63
|
-
|
|
64
|
-
// Instead of sending the queries to the worker immediately, we wait a bit and batch them up (which reduces the number of messages sent to the worker)
|
|
65
|
-
if (this.executionPromise === undefined) {
|
|
66
|
-
this.executionPromise = new Promise((resolve) => {
|
|
67
|
-
setTimeout(() => {
|
|
68
|
-
void this.worker.executeBulk(this.executionBacklog)
|
|
69
|
-
this.executionBacklog = []
|
|
70
|
-
this.executionPromise = undefined
|
|
71
|
-
|
|
72
|
-
resolve()
|
|
73
|
-
}, 10)
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
select = async <T>(query: string, bindValues?: ParamsObject): Promise<SelectResponse<T>> => {
|
|
79
|
-
// NOTE we need to wait for the executionBacklog to be worked off, before we run the select query (as it might depend on the previous execution queries)
|
|
80
|
-
await this.executionPromise
|
|
81
|
-
|
|
82
|
-
try {
|
|
83
|
-
const response = (await this.worker.select(query, bindValues)) as SelectResponse<T>
|
|
84
|
-
return response
|
|
85
|
-
} catch (e) {
|
|
86
|
-
console.error(`Error while executing query via "select": ${query}`)
|
|
87
|
-
throw e
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
getPersistedData = async (_parentSpan?: otel.Span): Promise<Uint8Array> => {
|
|
92
|
-
// NOTE we need to wait for the executionBacklog to be worked off
|
|
93
|
-
await this.executionPromise
|
|
94
|
-
|
|
95
|
-
return this.worker.getPersistedData()
|
|
96
|
-
}
|
|
97
|
-
}
|
|
File without changes
|