@runappsai/sdk 0.5.0 → 0.6.1
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 +30 -1
- package/dist/activity-tracker.d.ts +8 -0
- package/dist/activity-tracker.d.ts.map +1 -1
- package/dist/activity-tracker.js +3 -0
- package/dist/activity-tracker.js.map +1 -1
- package/dist/browser-auth.d.ts +7 -0
- package/dist/browser-auth.d.ts.map +1 -1
- package/dist/browser-auth.js +105 -15
- package/dist/browser-auth.js.map +1 -1
- package/dist/client.d.ts +24 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +22 -0
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +20 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/files.d.ts +3 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +4 -1
- package/dist/files.js.map +1 -1
- package/dist/idb-sync/codec.d.ts +39 -0
- package/dist/idb-sync/codec.d.ts.map +1 -0
- package/dist/idb-sync/codec.js +364 -0
- package/dist/idb-sync/codec.js.map +1 -0
- package/dist/idb-sync/engine.d.ts +143 -0
- package/dist/idb-sync/engine.d.ts.map +1 -0
- package/dist/idb-sync/engine.js +727 -0
- package/dist/idb-sync/engine.js.map +1 -0
- package/dist/idb-sync/hook.d.ts +42 -0
- package/dist/idb-sync/hook.d.ts.map +1 -0
- package/dist/idb-sync/hook.js +426 -0
- package/dist/idb-sync/hook.js.map +1 -0
- package/dist/idb-sync/index.d.ts +6 -0
- package/dist/idb-sync/index.d.ts.map +1 -0
- package/dist/idb-sync/index.js +6 -0
- package/dist/idb-sync/index.js.map +1 -0
- package/dist/idb-sync/log.d.ts +41 -0
- package/dist/idb-sync/log.d.ts.map +1 -0
- package/dist/idb-sync/log.js +143 -0
- package/dist/idb-sync/log.js.map +1 -0
- package/dist/idb-sync/remote.d.ts +38 -0
- package/dist/idb-sync/remote.d.ts.map +1 -0
- package/dist/idb-sync/remote.js +61 -0
- package/dist/idb-sync/remote.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +1 -1
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +4 -2
- package/dist/models.js.map +1 -1
- package/dist/sdk.umd.js +2 -2
- package/dist/sdk.umd.js.map +1 -1
- package/dist/transport.d.ts +11 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +33 -6
- package/dist/transport.js.map +1 -1
- package/package.json +2 -1
- package/src/activity-tracker.ts +5 -0
- package/src/browser-auth.ts +103 -16
- package/src/client.ts +36 -0
- package/src/events.ts +22 -0
- package/src/files.ts +7 -5
- package/src/idb-sync/codec.ts +354 -0
- package/src/idb-sync/engine.ts +818 -0
- package/src/idb-sync/hook.ts +495 -0
- package/src/idb-sync/index.ts +5 -0
- package/src/idb-sync/log.ts +170 -0
- package/src/idb-sync/remote.ts +59 -0
- package/src/index.ts +13 -0
- package/src/models.ts +4 -2
- package/src/transport.ts +38 -8
package/dist/client.js
CHANGED
|
@@ -8,6 +8,7 @@ import { ComputerService } from "./computer.js";
|
|
|
8
8
|
import { FilesService } from "./files.js";
|
|
9
9
|
import { EmbeddingsService } from "./embeddings.js";
|
|
10
10
|
import { BrowserAuth } from "./browser-auth.js";
|
|
11
|
+
import { FilesRemote, SyncEngine } from "./idb-sync/index.js";
|
|
11
12
|
import { SDKEvents } from "./events.js";
|
|
12
13
|
// The platform, not the bare gateway: personal rk_ keys are checked and
|
|
13
14
|
// billed by www.runapps.ai, which forwards to the gateway. api.runapps.ai
|
|
@@ -52,6 +53,13 @@ export class RunApps {
|
|
|
52
53
|
* subscription, etc.).
|
|
53
54
|
*/
|
|
54
55
|
auth = null;
|
|
56
|
+
/**
|
|
57
|
+
* IndexedDB sync (see `ClientOptions.syncIndexedDB`), or null when it
|
|
58
|
+
* is off. `status()` gives the state the badge shows; `now()` pushes
|
|
59
|
+
* and pulls immediately; `client.events.on("db:change", …)` tells the
|
|
60
|
+
* app which store received remote changes so it can re-read.
|
|
61
|
+
*/
|
|
62
|
+
sync = null;
|
|
55
63
|
/**
|
|
56
64
|
* Runtime event bus for SDK-call telemetry. Every LLM-ish service
|
|
57
65
|
* (chat / embeddings / image / audio / video / computer) fires
|
|
@@ -139,6 +147,20 @@ export class RunApps {
|
|
|
139
147
|
// legacy unscoped /v1/files/... paths.
|
|
140
148
|
this.files = new FilesService(transport, options.project);
|
|
141
149
|
this.embeddings = new EmbeddingsService(transport, this.events);
|
|
150
|
+
// IndexedDB sync: an app on RunApps gets it unless it says no. It
|
|
151
|
+
// stores under the signed-in user, so only browser sign-in mode has
|
|
152
|
+
// someone to sync for.
|
|
153
|
+
const wantSync = options.syncIndexedDB ?? this.auth !== null;
|
|
154
|
+
if (wantSync && typeof indexedDB !== "undefined" && this.auth) {
|
|
155
|
+
const auth = this.auth;
|
|
156
|
+
const engine = new SyncEngine({
|
|
157
|
+
remote: new FilesRemote(this.files),
|
|
158
|
+
events: this.events,
|
|
159
|
+
userId: () => auth.ownerId(),
|
|
160
|
+
onAuthChange: (cb) => auth.onTokenChange(() => cb()),
|
|
161
|
+
}, typeof wantSync === "object" ? wantSync : {});
|
|
162
|
+
this.sync = engine;
|
|
163
|
+
}
|
|
142
164
|
}
|
|
143
165
|
/** Force a redirect to the runapps.ai grant page. No-op in static
|
|
144
166
|
* auth mode or in Node. */
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,wEAAwE;AACxE,0EAA0E;AAC1E,qCAAqC;AACrC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
CHANGED
|
@@ -78,11 +78,31 @@ export interface RequestErrorEvent {
|
|
|
78
78
|
/** Compile-time map of event name → payload shape. Drives handler
|
|
79
79
|
* inference in `on()` / `emit()` so callers can't subscribe to a
|
|
80
80
|
* typo'd name or read a non-existent field. */
|
|
81
|
+
/** Fired whenever the IndexedDB sync's state, pending count or last
|
|
82
|
+
* sync time changes. See `client.sync`. */
|
|
83
|
+
export interface SyncStateEvent {
|
|
84
|
+
state: "off" | "idle" | "syncing" | "offline" | "error";
|
|
85
|
+
pending: number;
|
|
86
|
+
lastSyncedAt?: number;
|
|
87
|
+
error?: string;
|
|
88
|
+
}
|
|
89
|
+
/** Fired after the sync wrote remote changes into a local object store,
|
|
90
|
+
* in this tab and (through BroadcastChannel) in the app's other tabs.
|
|
91
|
+
* Re-read the store to show the new data. */
|
|
92
|
+
export interface DbChangeEvent {
|
|
93
|
+
db: string;
|
|
94
|
+
store: string;
|
|
95
|
+
keys: IDBValidKey[];
|
|
96
|
+
cleared: boolean;
|
|
97
|
+
source: "remote";
|
|
98
|
+
}
|
|
81
99
|
export interface SDKEventMap {
|
|
82
100
|
"request:start": RequestStartEvent;
|
|
83
101
|
"request:streamDelta": RequestStreamDeltaEvent;
|
|
84
102
|
"request:end": RequestEndEvent;
|
|
85
103
|
"request:error": RequestErrorEvent;
|
|
104
|
+
"sync:state": SyncStateEvent;
|
|
105
|
+
"db:change": DbChangeEvent;
|
|
86
106
|
}
|
|
87
107
|
/** Disposer returned by `on()` — call to unsubscribe. */
|
|
88
108
|
export type Unsubscribe = () => void;
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,sEAAsE;AACtE,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,QAAQ,GACR,WAAW,GACX,kBAAkB,GAClB,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,CAAC;AAEnB,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,UAAU,EAAE,aAAa,CAAC;IAC1B,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB;+DAC2D;IAC3D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX;gEAC4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;IAC1B,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB;sDACkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB;iEAC6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;4CACwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,KAAK,EAAE,KAAK,CAAC;IACb,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;gDAEgD;AAChD,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,iBAAiB,CAAC;IACnC,qBAAqB,EAAE,uBAAuB,CAAC;IAC/C,aAAa,EAAE,eAAe,CAAC;IAC/B,eAAe,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAyGH;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IACH,QAAQ,GAAG,IAAI,GAAG,EAAsD,CAAC;IAE1F;;;;OAIG;IACH,EAAE,CAA8B,IAAO,EAAE,OAAwC;QAC/E,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,OAAO,GAAG,OAAqC,CAAC;QACtD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAA8B,IAAO,EAAE,OAAuB;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACnC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,CAAC,CAAC,OAAO,CAAC,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,6DAA6D;gBAC7D,2CAA2C;gBAC3C,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAED;;wDAEwD;AACxD,MAAM,UAAU,YAAY;IAC1B,OAAO,CACL,MAAM;QACN,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,GAAG;QACH,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACvC,CAAC;AACJ,CAAC"}
|
package/dist/files.d.ts
CHANGED
|
@@ -141,6 +141,7 @@ export declare class FilesService {
|
|
|
141
141
|
*/
|
|
142
142
|
read(path: string, init?: {
|
|
143
143
|
signal?: AbortSignal;
|
|
144
|
+
ifNoneMatch?: string;
|
|
144
145
|
}): Promise<FileRead>;
|
|
145
146
|
/**
|
|
146
147
|
* Read a JSON file and its version in one call. A missing file is
|
|
@@ -149,9 +150,11 @@ export declare class FilesService {
|
|
|
149
150
|
*/
|
|
150
151
|
readJSON<T = unknown>(path: string, init?: {
|
|
151
152
|
signal?: AbortSignal;
|
|
153
|
+
ifNoneMatch?: string;
|
|
152
154
|
}): Promise<{
|
|
153
155
|
value: T | undefined;
|
|
154
156
|
etag?: string;
|
|
157
|
+
notModified?: boolean;
|
|
155
158
|
}>;
|
|
156
159
|
/** Stat: HEAD-only object metadata. */
|
|
157
160
|
stat(path: string, init?: {
|
package/dist/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|
package/dist/files.js
CHANGED
|
@@ -78,11 +78,12 @@ export class FilesService {
|
|
|
78
78
|
* still the version that was read.
|
|
79
79
|
*/
|
|
80
80
|
async read(path, init) {
|
|
81
|
-
const { data, contentType, etag } = await this.transport.getRaw(pathToURL(this.base, path), init);
|
|
81
|
+
const { data, contentType, etag, notModified } = await this.transport.getRaw(pathToURL(this.base, path), init);
|
|
82
82
|
return {
|
|
83
83
|
blob: new Blob([new Uint8Array(data)], { type: contentType || "application/octet-stream" }),
|
|
84
84
|
contentType,
|
|
85
85
|
etag,
|
|
86
|
+
...(notModified ? { notModified: true } : {}),
|
|
86
87
|
};
|
|
87
88
|
}
|
|
88
89
|
/**
|
|
@@ -102,6 +103,8 @@ export class FilesService {
|
|
|
102
103
|
}
|
|
103
104
|
throw e;
|
|
104
105
|
}
|
|
106
|
+
if (r.notModified)
|
|
107
|
+
return { value: undefined, etag: r.etag, notModified: true };
|
|
105
108
|
return { value: JSON.parse(await r.blob.text()), etag: r.etag };
|
|
106
109
|
}
|
|
107
110
|
/** Stat: HEAD-only object metadata. */
|
package/dist/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,qEAAqE;AACrE,gEAAgE;AAChE,iDAAiD;AACjD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAwF1C,SAAS,SAAS,CAAC,IAAY,EAAE,CAAS;IACxC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,OAAO,YAAY;IAqBJ;IApBnB;;;;;;;;;;;;;;;;OAgBG;IACc,IAAI,CAAS;IAE9B,YACmB,SAAoB,EACrC,OAAgB;QADC,cAAS,GAAT,SAAS,CAAW;QAGrC,IAAI,CAAC,IAAI,GAAG,OAAO;YACjB,CAAC,CAAC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,QAAQ;YACnD,CAAC,CAAC,WAAW,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,CACP,IAAY,EACZ,IAAc,EACd,IAAiB;QAEjB,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,IAAI,EAAE,WAAW;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QACtD,IAAI,IAAI,EAAE,OAAO;YAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;QAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAa,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;YAC3E,WAAW,EAAE,IAAI,EAAE,WAAW;YAC9B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC1D,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,OAAe,EACf,IAAiB;QAEjB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE;YAC7B,GAAG,IAAI;YACP,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,2BAA2B;SAC9D,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,IAA+B;QACrD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,qEAAqE;AACrE,gEAAgE;AAChE,iDAAiD;AACjD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAwF1C,SAAS,SAAS,CAAC,IAAY,EAAE,CAAS;IACxC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,OAAO,YAAY;IAqBJ;IApBnB;;;;;;;;;;;;;;;;OAgBG;IACc,IAAI,CAAS;IAE9B,YACmB,SAAoB,EACrC,OAAgB;QADC,cAAS,GAAT,SAAS,CAAW;QAGrC,IAAI,CAAC,IAAI,GAAG,OAAO;YACjB,CAAC,CAAC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,QAAQ;YACnD,CAAC,CAAC,WAAW,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,CACP,IAAY,EACZ,IAAc,EACd,IAAiB;QAEjB,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,IAAI,EAAE,WAAW;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QACtD,IAAI,IAAI,EAAE,OAAO;YAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;QAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAa,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;YAC3E,WAAW,EAAE,IAAI,EAAE,WAAW;YAC9B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC1D,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,OAAe,EACf,IAAiB;QAEjB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE;YAC7B,GAAG,IAAI;YACP,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,2BAA2B;SAC9D,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,IAA+B;QACrD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAAqD;QAC5E,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/G,OAAO;YACL,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,IAAI,0BAA0B,EAAE,CAAC;YAC3F,WAAW;YACX,IAAI;YACJ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CACZ,IAAY,EACZ,IAAqD;QAErD,IAAI,CAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAK,CAA8C,EAAE,UAAU,KAAK,GAAG;gBAClE,CAA8C,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACpE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC/C,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,IAAI,CAAC,CAAC,WAAW;YAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAChF,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAA+B;QACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACxF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAClB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAChE,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI;YACxC,IAAI;YACJ,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS;YACtD,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,SAAS;YAChE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,IAA+B;QACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;IACvC,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,IAA+B;QACrD,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAkB,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,IAAI,CAAC,IAAkB;QAC3B,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI,EAAE,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,EAAE,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,EAAE,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,IAAI,EAAE,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAC3B,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAChC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CACnD,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,UAAU,CACd,IAAwC,EACxC,IAA+B;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC5B,IAAI,CAAC,IAAI,GAAG,SAAS,EACrB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EACpD,IAAI,CACL,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,EAAU,EAAE,IAA+B;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAa,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,EAAU,EAAE,IAA+B;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAa,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,MAAc,EACd,IAAwB;QAExB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC5B,IAAI,CAAC,IAAI,GAAG,UAAU,EACtB;YACE,IAAI;YACJ,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,IAAI,EAAE,WAAW;YAC/B,aAAa,EAAE,IAAI,EAAE,WAAW;YAChC,QAAQ,EAAE,IAAI,EAAE,OAAO;SACxB,EACD,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CACnD,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,KAAK,CACT,GAAc,EACd,IAA+B;QAE/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CACxC,IAAI,CAAC,IAAI,GAAG,QAAQ,EACpB,EAAE,GAAG,EAAE,EACP,IAAI,CACL,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QACD,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CACxC,IAAI,CAAC,IAAI,GAAG,QAAQ,EACpB,EAAE,GAAG,EAAE,KAAK,EAAE,EACd,IAAI,CACL,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** How an encoded value refers to a Blob stored out of band. */
|
|
2
|
+
export interface BlobRef {
|
|
3
|
+
ref: string;
|
|
4
|
+
type: string;
|
|
5
|
+
size: number;
|
|
6
|
+
}
|
|
7
|
+
export interface BlobSink {
|
|
8
|
+
/** Store the blob and return a stable reference for it. */
|
|
9
|
+
(blob: Blob): Promise<BlobRef>;
|
|
10
|
+
}
|
|
11
|
+
export interface BlobSource {
|
|
12
|
+
(ref: BlobRef): Promise<Blob>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Encode a structured-clone value into a JSON-safe one. Async only
|
|
16
|
+
* because Blobs have to be read.
|
|
17
|
+
*/
|
|
18
|
+
export declare function encodeValue(value: unknown, sink?: BlobSink): Promise<unknown>;
|
|
19
|
+
/** Inverse of `encodeValue`. */
|
|
20
|
+
export declare function decodeValue(value: unknown, source?: BlobSource): Promise<unknown>;
|
|
21
|
+
export declare function encodeKey(key: IDBValidKey): unknown;
|
|
22
|
+
export declare function decodeKey(encoded: unknown): IDBValidKey;
|
|
23
|
+
/** Canonical string id for a key: equal keys give equal ids. */
|
|
24
|
+
export declare function keyId(key: IDBValidKey): string;
|
|
25
|
+
/** Deterministic 32-bit hash of a string (FNV-1a). */
|
|
26
|
+
export declare function hash32(s: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Structural equality for structured-clone values: Dates by time,
|
|
29
|
+
* binary by bytes, Map/Set by entries, Blobs by identity (two different
|
|
30
|
+
* Blob objects count as a change). Used to find which fields a write
|
|
31
|
+
* touched.
|
|
32
|
+
*/
|
|
33
|
+
export declare function deepEqual(a: unknown, b: unknown): boolean;
|
|
34
|
+
/** The fields of `value` that differ from `prior` (added, changed or
|
|
35
|
+
* removed). `undefined` when there is no prior: everything is new. */
|
|
36
|
+
export declare function changedFields(prior: unknown, value: unknown): string[] | undefined;
|
|
37
|
+
/** Read an inline key out of a value by IndexedDB keyPath rules. */
|
|
38
|
+
export declare function extractKey(value: unknown, keyPath: string | string[] | null): IDBValidKey | undefined;
|
|
39
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/idb-sync/codec.ts"],"names":[],"mappings":"AAeA,gEAAgE;AAChE,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,2DAA2D;IAC3D,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAmDD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAwEnF;AAED,gCAAgC;AAChC,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAyDvF;AASD,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAiBnD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAcvD;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAE9C;AAED,sDAAsD;AACtD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAuCzD;AAED;uEACuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CASlF;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,CAiBrG"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
// idb-sync/codec.ts — JSON encoding for IndexedDB values and keys.
|
|
2
|
+
//
|
|
3
|
+
// IndexedDB stores anything the structured-clone algorithm accepts:
|
|
4
|
+
// Dates, Maps, Sets, binary, Blobs, nested objects, undefined. The sync
|
|
5
|
+
// snapshots on the server are JSON, so every such value is wrapped in a
|
|
6
|
+
// small tagged object on the way out and rebuilt on the way in. Plain
|
|
7
|
+
// JSON values pass through untouched, which keeps the common case (a
|
|
8
|
+
// record of strings and numbers) byte-for-byte readable on the server.
|
|
9
|
+
//
|
|
10
|
+
// Blobs are not inlined: `encodeValue` hands them to a `BlobSink` which
|
|
11
|
+
// stores the bytes elsewhere (the engine uploads them as files) and
|
|
12
|
+
// returns a reference; `decodeValue` asks a `BlobSource` for the bytes.
|
|
13
|
+
const TAG = "$rt";
|
|
14
|
+
const BIN_CTORS = {
|
|
15
|
+
ArrayBuffer: (b) => b,
|
|
16
|
+
Uint8Array: (b) => new Uint8Array(b),
|
|
17
|
+
Int8Array: (b) => new Int8Array(b),
|
|
18
|
+
Uint8ClampedArray: (b) => new Uint8ClampedArray(b),
|
|
19
|
+
Int16Array: (b) => new Int16Array(b),
|
|
20
|
+
Uint16Array: (b) => new Uint16Array(b),
|
|
21
|
+
Int32Array: (b) => new Int32Array(b),
|
|
22
|
+
Uint32Array: (b) => new Uint32Array(b),
|
|
23
|
+
Float32Array: (b) => new Float32Array(b),
|
|
24
|
+
Float64Array: (b) => new Float64Array(b),
|
|
25
|
+
BigInt64Array: (b) => new BigInt64Array(b),
|
|
26
|
+
BigUint64Array: (b) => new BigUint64Array(b),
|
|
27
|
+
DataView: (b) => new DataView(b),
|
|
28
|
+
};
|
|
29
|
+
function bytesToBase64(bytes) {
|
|
30
|
+
let s = "";
|
|
31
|
+
for (let i = 0; i < bytes.length; i += 0x8000) {
|
|
32
|
+
s += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
|
|
33
|
+
}
|
|
34
|
+
return btoa(s);
|
|
35
|
+
}
|
|
36
|
+
function base64ToBytes(b64) {
|
|
37
|
+
const s = atob(b64);
|
|
38
|
+
const out = new Uint8Array(s.length);
|
|
39
|
+
for (let i = 0; i < s.length; i++)
|
|
40
|
+
out[i] = s.charCodeAt(i);
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
function isPlainObject(v) {
|
|
44
|
+
if (v === null || typeof v !== "object")
|
|
45
|
+
return false;
|
|
46
|
+
const proto = Object.getPrototypeOf(v);
|
|
47
|
+
return proto === Object.prototype || proto === null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Encode a structured-clone value into a JSON-safe one. Async only
|
|
51
|
+
* because Blobs have to be read.
|
|
52
|
+
*/
|
|
53
|
+
export async function encodeValue(value, sink) {
|
|
54
|
+
if (value === undefined)
|
|
55
|
+
return { [TAG]: "undef" };
|
|
56
|
+
if (value === null)
|
|
57
|
+
return null;
|
|
58
|
+
switch (typeof value) {
|
|
59
|
+
case "string":
|
|
60
|
+
case "boolean":
|
|
61
|
+
return value;
|
|
62
|
+
case "number":
|
|
63
|
+
if (Number.isNaN(value))
|
|
64
|
+
return { [TAG]: "num", v: "NaN" };
|
|
65
|
+
if (value === Infinity)
|
|
66
|
+
return { [TAG]: "num", v: "Infinity" };
|
|
67
|
+
if (value === -Infinity)
|
|
68
|
+
return { [TAG]: "num", v: "-Infinity" };
|
|
69
|
+
if (Object.is(value, -0))
|
|
70
|
+
return { [TAG]: "num", v: "-0" };
|
|
71
|
+
return value;
|
|
72
|
+
case "bigint":
|
|
73
|
+
return { [TAG]: "bigint", v: value.toString() };
|
|
74
|
+
case "function":
|
|
75
|
+
case "symbol":
|
|
76
|
+
throw new TypeError(`runapps sync: ${typeof value} values cannot be stored`);
|
|
77
|
+
}
|
|
78
|
+
if (value instanceof Date) {
|
|
79
|
+
const t = value.getTime();
|
|
80
|
+
return { [TAG]: "date", v: Number.isNaN(t) ? "invalid" : t };
|
|
81
|
+
}
|
|
82
|
+
if (value instanceof RegExp)
|
|
83
|
+
return { [TAG]: "re", s: value.source, f: value.flags };
|
|
84
|
+
if (typeof Blob !== "undefined" && value instanceof Blob) {
|
|
85
|
+
if (!sink)
|
|
86
|
+
throw new TypeError("runapps sync: Blob values need a blob sink");
|
|
87
|
+
const ref = await sink(value);
|
|
88
|
+
const out = { [TAG]: "blob", r: ref.ref, t: ref.type, s: ref.size };
|
|
89
|
+
const f = value;
|
|
90
|
+
if (typeof File !== "undefined" && value instanceof File) {
|
|
91
|
+
out.n = f.name;
|
|
92
|
+
out.m = f.lastModified;
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
if (value instanceof ArrayBuffer) {
|
|
97
|
+
return { [TAG]: "bin", c: "ArrayBuffer", v: bytesToBase64(new Uint8Array(value)) };
|
|
98
|
+
}
|
|
99
|
+
if (ArrayBuffer.isView(value)) {
|
|
100
|
+
const name = value.constructor.name;
|
|
101
|
+
if (!(name in BIN_CTORS))
|
|
102
|
+
throw new TypeError(`runapps sync: unsupported binary type ${name}`);
|
|
103
|
+
const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
104
|
+
return { [TAG]: "bin", c: name, v: bytesToBase64(bytes) };
|
|
105
|
+
}
|
|
106
|
+
if (value instanceof Map) {
|
|
107
|
+
const v = [];
|
|
108
|
+
for (const [k, x] of value)
|
|
109
|
+
v.push([await encodeValue(k, sink), await encodeValue(x, sink)]);
|
|
110
|
+
return { [TAG]: "map", v };
|
|
111
|
+
}
|
|
112
|
+
if (value instanceof Set) {
|
|
113
|
+
const v = [];
|
|
114
|
+
for (const x of value)
|
|
115
|
+
v.push(await encodeValue(x, sink));
|
|
116
|
+
return { [TAG]: "set", v };
|
|
117
|
+
}
|
|
118
|
+
if (Array.isArray(value)) {
|
|
119
|
+
const out = new Array(value.length);
|
|
120
|
+
for (let i = 0; i < value.length; i++)
|
|
121
|
+
out[i] = await encodeValue(value[i], sink);
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
if (isPlainObject(value)) {
|
|
125
|
+
// A plain object that happens to carry our tag key is wrapped so it
|
|
126
|
+
// cannot be mistaken for an encoding marker.
|
|
127
|
+
const needsWrap = Object.prototype.hasOwnProperty.call(value, TAG);
|
|
128
|
+
const out = {};
|
|
129
|
+
for (const k of Object.keys(value))
|
|
130
|
+
out[k] = await encodeValue(value[k], sink);
|
|
131
|
+
return needsWrap ? { [TAG]: "obj", v: out } : out;
|
|
132
|
+
}
|
|
133
|
+
// Class instances: structured clone keeps own enumerable properties
|
|
134
|
+
// only, so do the same.
|
|
135
|
+
const out = {};
|
|
136
|
+
for (const k of Object.keys(value))
|
|
137
|
+
out[k] = await encodeValue(value[k], sink);
|
|
138
|
+
return out;
|
|
139
|
+
}
|
|
140
|
+
/** Inverse of `encodeValue`. */
|
|
141
|
+
export async function decodeValue(value, source) {
|
|
142
|
+
if (value === null || typeof value !== "object")
|
|
143
|
+
return value;
|
|
144
|
+
if (Array.isArray(value)) {
|
|
145
|
+
const out = new Array(value.length);
|
|
146
|
+
for (let i = 0; i < value.length; i++)
|
|
147
|
+
out[i] = await decodeValue(value[i], source);
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
const obj = value;
|
|
151
|
+
const tag = obj[TAG];
|
|
152
|
+
if (typeof tag === "string") {
|
|
153
|
+
const t = obj;
|
|
154
|
+
switch (t[TAG]) {
|
|
155
|
+
case "undef":
|
|
156
|
+
return undefined;
|
|
157
|
+
case "date":
|
|
158
|
+
return t.v === "invalid" ? new Date(NaN) : new Date(t.v);
|
|
159
|
+
case "num":
|
|
160
|
+
return t.v === "NaN" ? NaN : t.v === "Infinity" ? Infinity : t.v === "-Infinity" ? -Infinity : -0;
|
|
161
|
+
case "bigint":
|
|
162
|
+
return BigInt(t.v);
|
|
163
|
+
case "re":
|
|
164
|
+
return new RegExp(t.s, t.f);
|
|
165
|
+
case "bin": {
|
|
166
|
+
const bytes = base64ToBytes(t.v);
|
|
167
|
+
const buf = new ArrayBuffer(bytes.byteLength);
|
|
168
|
+
new Uint8Array(buf).set(bytes);
|
|
169
|
+
const make = BIN_CTORS[t.c];
|
|
170
|
+
if (!make)
|
|
171
|
+
throw new TypeError(`runapps sync: unsupported binary type ${t.c}`);
|
|
172
|
+
return make(buf);
|
|
173
|
+
}
|
|
174
|
+
case "map": {
|
|
175
|
+
const m = new Map();
|
|
176
|
+
for (const pair of t.v) {
|
|
177
|
+
m.set(await decodeValue(pair[0], source), await decodeValue(pair[1], source));
|
|
178
|
+
}
|
|
179
|
+
return m;
|
|
180
|
+
}
|
|
181
|
+
case "set": {
|
|
182
|
+
const s = new Set();
|
|
183
|
+
for (const x of t.v)
|
|
184
|
+
s.add(await decodeValue(x, source));
|
|
185
|
+
return s;
|
|
186
|
+
}
|
|
187
|
+
case "blob": {
|
|
188
|
+
if (!source)
|
|
189
|
+
throw new TypeError("runapps sync: Blob values need a blob source");
|
|
190
|
+
const blob = await source({ ref: t.r, type: t.t, size: t.s });
|
|
191
|
+
if (t.n !== undefined && typeof File !== "undefined") {
|
|
192
|
+
return new File([blob], t.n, { type: t.t, lastModified: t.m ?? Date.now() });
|
|
193
|
+
}
|
|
194
|
+
return blob;
|
|
195
|
+
}
|
|
196
|
+
case "obj":
|
|
197
|
+
return decodeValue(t.v, source);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const out = {};
|
|
201
|
+
for (const k of Object.keys(obj))
|
|
202
|
+
out[k] = await decodeValue(obj[k], source);
|
|
203
|
+
return out;
|
|
204
|
+
}
|
|
205
|
+
// ── Keys ─────────────────────────────────────────────────────────────
|
|
206
|
+
//
|
|
207
|
+
// A valid IndexedDB key is a number, a string, a Date, binary, or an
|
|
208
|
+
// array of those. Keys are encoded synchronously (no Blobs possible)
|
|
209
|
+
// and also rendered to a canonical string that serves as the record id
|
|
210
|
+
// inside a shard and as the input to the shard hash.
|
|
211
|
+
export function encodeKey(key) {
|
|
212
|
+
if (typeof key === "number") {
|
|
213
|
+
if (Number.isNaN(key))
|
|
214
|
+
throw new TypeError("runapps sync: NaN is not a valid key");
|
|
215
|
+
return key;
|
|
216
|
+
}
|
|
217
|
+
if (typeof key === "string")
|
|
218
|
+
return key;
|
|
219
|
+
if (key instanceof Date)
|
|
220
|
+
return { [TAG]: "date", v: key.getTime() };
|
|
221
|
+
if (key instanceof ArrayBuffer)
|
|
222
|
+
return { [TAG]: "bin", c: "ArrayBuffer", v: bytesToBase64(new Uint8Array(key)) };
|
|
223
|
+
if (ArrayBuffer.isView(key)) {
|
|
224
|
+
return {
|
|
225
|
+
[TAG]: "bin",
|
|
226
|
+
c: "ArrayBuffer",
|
|
227
|
+
v: bytesToBase64(new Uint8Array(key.buffer, key.byteOffset, key.byteLength)),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
if (Array.isArray(key))
|
|
231
|
+
return key.map((k) => encodeKey(k));
|
|
232
|
+
throw new TypeError("runapps sync: invalid IndexedDB key");
|
|
233
|
+
}
|
|
234
|
+
export function decodeKey(encoded) {
|
|
235
|
+
if (typeof encoded === "number" || typeof encoded === "string")
|
|
236
|
+
return encoded;
|
|
237
|
+
if (Array.isArray(encoded))
|
|
238
|
+
return encoded.map(decodeKey);
|
|
239
|
+
if (encoded && typeof encoded === "object") {
|
|
240
|
+
const t = encoded;
|
|
241
|
+
if (t[TAG] === "date")
|
|
242
|
+
return new Date(t.v);
|
|
243
|
+
if (t[TAG] === "bin") {
|
|
244
|
+
const bytes = base64ToBytes(t.v);
|
|
245
|
+
const buf = new ArrayBuffer(bytes.byteLength);
|
|
246
|
+
new Uint8Array(buf).set(bytes);
|
|
247
|
+
return buf;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
throw new TypeError("runapps sync: invalid encoded key");
|
|
251
|
+
}
|
|
252
|
+
/** Canonical string id for a key: equal keys give equal ids. */
|
|
253
|
+
export function keyId(key) {
|
|
254
|
+
return JSON.stringify(encodeKey(key));
|
|
255
|
+
}
|
|
256
|
+
/** Deterministic 32-bit hash of a string (FNV-1a). */
|
|
257
|
+
export function hash32(s) {
|
|
258
|
+
let h = 0x811c9dc5;
|
|
259
|
+
for (let i = 0; i < s.length; i++) {
|
|
260
|
+
h ^= s.charCodeAt(i);
|
|
261
|
+
h = Math.imul(h, 0x01000193);
|
|
262
|
+
}
|
|
263
|
+
return h >>> 0;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Structural equality for structured-clone values: Dates by time,
|
|
267
|
+
* binary by bytes, Map/Set by entries, Blobs by identity (two different
|
|
268
|
+
* Blob objects count as a change). Used to find which fields a write
|
|
269
|
+
* touched.
|
|
270
|
+
*/
|
|
271
|
+
export function deepEqual(a, b) {
|
|
272
|
+
if (Object.is(a, b))
|
|
273
|
+
return true;
|
|
274
|
+
if (a === null || b === null || typeof a !== "object" || typeof b !== "object")
|
|
275
|
+
return false;
|
|
276
|
+
if (a instanceof Date || b instanceof Date) {
|
|
277
|
+
return a instanceof Date && b instanceof Date && Object.is(a.getTime(), b.getTime());
|
|
278
|
+
}
|
|
279
|
+
if (typeof Blob !== "undefined" && (a instanceof Blob || b instanceof Blob))
|
|
280
|
+
return false;
|
|
281
|
+
if (ArrayBuffer.isView(a) || a instanceof ArrayBuffer || ArrayBuffer.isView(b) || b instanceof ArrayBuffer) {
|
|
282
|
+
const toBytes = (x) => x instanceof ArrayBuffer ? new Uint8Array(x) : ArrayBuffer.isView(x) ? new Uint8Array(x.buffer, x.byteOffset, x.byteLength) : null;
|
|
283
|
+
const ba = toBytes(a);
|
|
284
|
+
const bb = toBytes(b);
|
|
285
|
+
if (!ba || !bb || ba.length !== bb.length || a.constructor !== b.constructor)
|
|
286
|
+
return false;
|
|
287
|
+
for (let i = 0; i < ba.length; i++)
|
|
288
|
+
if (ba[i] !== bb[i])
|
|
289
|
+
return false;
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
if (a instanceof Map || b instanceof Map) {
|
|
293
|
+
if (!(a instanceof Map && b instanceof Map) || a.size !== b.size)
|
|
294
|
+
return false;
|
|
295
|
+
for (const [k, v] of a)
|
|
296
|
+
if (!b.has(k) || !deepEqual(v, b.get(k)))
|
|
297
|
+
return false;
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
if (a instanceof Set || b instanceof Set) {
|
|
301
|
+
if (!(a instanceof Set && b instanceof Set) || a.size !== b.size)
|
|
302
|
+
return false;
|
|
303
|
+
for (const v of a)
|
|
304
|
+
if (!b.has(v))
|
|
305
|
+
return false;
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
309
|
+
if (!(Array.isArray(a) && Array.isArray(b)) || a.length !== b.length)
|
|
310
|
+
return false;
|
|
311
|
+
for (let i = 0; i < a.length; i++)
|
|
312
|
+
if (!deepEqual(a[i], b[i]))
|
|
313
|
+
return false;
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
const ka = Object.keys(a);
|
|
317
|
+
const kb = Object.keys(b);
|
|
318
|
+
if (ka.length !== kb.length)
|
|
319
|
+
return false;
|
|
320
|
+
for (const k of ka) {
|
|
321
|
+
if (!Object.prototype.hasOwnProperty.call(b, k))
|
|
322
|
+
return false;
|
|
323
|
+
if (!deepEqual(a[k], b[k]))
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
/** The fields of `value` that differ from `prior` (added, changed or
|
|
329
|
+
* removed). `undefined` when there is no prior: everything is new. */
|
|
330
|
+
export function changedFields(prior, value) {
|
|
331
|
+
if (!isPlainObject(prior) || !isPlainObject(value))
|
|
332
|
+
return undefined;
|
|
333
|
+
const out = [];
|
|
334
|
+
for (const k of new Set([...Object.keys(prior), ...Object.keys(value)])) {
|
|
335
|
+
const inP = Object.prototype.hasOwnProperty.call(prior, k);
|
|
336
|
+
const inV = Object.prototype.hasOwnProperty.call(value, k);
|
|
337
|
+
if (inP !== inV || !deepEqual(prior[k], value[k]))
|
|
338
|
+
out.push(k);
|
|
339
|
+
}
|
|
340
|
+
return out;
|
|
341
|
+
}
|
|
342
|
+
/** Read an inline key out of a value by IndexedDB keyPath rules. */
|
|
343
|
+
export function extractKey(value, keyPath) {
|
|
344
|
+
if (keyPath === null || keyPath === undefined)
|
|
345
|
+
return undefined;
|
|
346
|
+
const one = (path) => {
|
|
347
|
+
let cur = value;
|
|
348
|
+
if (path === "")
|
|
349
|
+
return cur;
|
|
350
|
+
for (const part of path.split(".")) {
|
|
351
|
+
if (cur === null || typeof cur !== "object")
|
|
352
|
+
return undefined;
|
|
353
|
+
cur = cur[part];
|
|
354
|
+
}
|
|
355
|
+
return cur;
|
|
356
|
+
};
|
|
357
|
+
if (Array.isArray(keyPath)) {
|
|
358
|
+
const parts = keyPath.map(one);
|
|
359
|
+
return parts.some((p) => p === undefined) ? undefined : parts;
|
|
360
|
+
}
|
|
361
|
+
const k = one(keyPath);
|
|
362
|
+
return k === undefined ? undefined : k;
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=codec.js.map
|