@runappsai/sdk 0.5.1 → 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.
Files changed (68) hide show
  1. package/README.md +29 -0
  2. package/dist/activity-tracker.d.ts +8 -0
  3. package/dist/activity-tracker.d.ts.map +1 -1
  4. package/dist/activity-tracker.js +3 -0
  5. package/dist/activity-tracker.js.map +1 -1
  6. package/dist/browser-auth.d.ts +7 -0
  7. package/dist/browser-auth.d.ts.map +1 -1
  8. package/dist/browser-auth.js +105 -15
  9. package/dist/browser-auth.js.map +1 -1
  10. package/dist/client.d.ts +24 -0
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +22 -0
  13. package/dist/client.js.map +1 -1
  14. package/dist/events.d.ts +20 -0
  15. package/dist/events.d.ts.map +1 -1
  16. package/dist/events.js.map +1 -1
  17. package/dist/files.d.ts +3 -0
  18. package/dist/files.d.ts.map +1 -1
  19. package/dist/files.js +4 -1
  20. package/dist/files.js.map +1 -1
  21. package/dist/idb-sync/codec.d.ts +39 -0
  22. package/dist/idb-sync/codec.d.ts.map +1 -0
  23. package/dist/idb-sync/codec.js +364 -0
  24. package/dist/idb-sync/codec.js.map +1 -0
  25. package/dist/idb-sync/engine.d.ts +143 -0
  26. package/dist/idb-sync/engine.d.ts.map +1 -0
  27. package/dist/idb-sync/engine.js +727 -0
  28. package/dist/idb-sync/engine.js.map +1 -0
  29. package/dist/idb-sync/hook.d.ts +42 -0
  30. package/dist/idb-sync/hook.d.ts.map +1 -0
  31. package/dist/idb-sync/hook.js +426 -0
  32. package/dist/idb-sync/hook.js.map +1 -0
  33. package/dist/idb-sync/index.d.ts +6 -0
  34. package/dist/idb-sync/index.d.ts.map +1 -0
  35. package/dist/idb-sync/index.js +6 -0
  36. package/dist/idb-sync/index.js.map +1 -0
  37. package/dist/idb-sync/log.d.ts +41 -0
  38. package/dist/idb-sync/log.d.ts.map +1 -0
  39. package/dist/idb-sync/log.js +143 -0
  40. package/dist/idb-sync/log.js.map +1 -0
  41. package/dist/idb-sync/remote.d.ts +38 -0
  42. package/dist/idb-sync/remote.d.ts.map +1 -0
  43. package/dist/idb-sync/remote.js +61 -0
  44. package/dist/idb-sync/remote.js.map +1 -0
  45. package/dist/index.d.ts +2 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +3 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/sdk.umd.js +2 -2
  50. package/dist/sdk.umd.js.map +1 -1
  51. package/dist/transport.d.ts +5 -0
  52. package/dist/transport.d.ts.map +1 -1
  53. package/dist/transport.js +19 -6
  54. package/dist/transport.js.map +1 -1
  55. package/package.json +2 -1
  56. package/src/activity-tracker.ts +5 -0
  57. package/src/browser-auth.ts +103 -16
  58. package/src/client.ts +36 -0
  59. package/src/events.ts +22 -0
  60. package/src/files.ts +7 -5
  61. package/src/idb-sync/codec.ts +354 -0
  62. package/src/idb-sync/engine.ts +818 -0
  63. package/src/idb-sync/hook.ts +495 -0
  64. package/src/idb-sync/index.ts +5 -0
  65. package/src/idb-sync/log.ts +170 -0
  66. package/src/idb-sync/remote.ts +59 -0
  67. package/src/index.ts +13 -0
  68. package/src/transport.ts +20 -8
@@ -0,0 +1,143 @@
1
+ // idb-sync/log.ts — the SDK's own IndexedDB database.
2
+ //
3
+ // Holds what the sync engine needs to survive a reload:
4
+ // ops — local changes not yet pushed, in commit order. Values are kept
5
+ // as the app wrote them (structured clone, Blobs included);
6
+ // they are encoded only when pushed, so logging works offline.
7
+ // meta — small key/value state: the owner (user id the local data
8
+ // belongs to), shard ETags seen last, store clear marks.
9
+ //
10
+ // Opened through the untouched `indexedDB.open`, never the hooked one,
11
+ // and its name starts with `__runapps` so the hook leaves it alone.
12
+ export const SYNC_DB_NAME = "__runapps_sync__";
13
+ const SYNC_DB_VERSION = 1;
14
+ function req(r) {
15
+ return new Promise((resolve, reject) => {
16
+ r.onsuccess = () => resolve(r.result);
17
+ r.onerror = () => reject(r.error ?? new Error("IndexedDB request failed"));
18
+ });
19
+ }
20
+ function done(tx) {
21
+ return new Promise((resolve, reject) => {
22
+ tx.oncomplete = () => resolve();
23
+ tx.onabort = () => reject(tx.error ?? new Error("IndexedDB transaction aborted"));
24
+ tx.onerror = () => reject(tx.error ?? new Error("IndexedDB transaction failed"));
25
+ });
26
+ }
27
+ export class SyncLog {
28
+ open;
29
+ dbPromise = null;
30
+ constructor(open) {
31
+ this.open = open;
32
+ }
33
+ db() {
34
+ if (!this.dbPromise) {
35
+ this.dbPromise = new Promise((resolve, reject) => {
36
+ const r = this.open(SYNC_DB_NAME, SYNC_DB_VERSION);
37
+ r.onupgradeneeded = () => {
38
+ const db = r.result;
39
+ if (!db.objectStoreNames.contains("ops")) {
40
+ const ops = db.createObjectStore("ops", { keyPath: "id", autoIncrement: true });
41
+ ops.createIndex("store", ["db", "store"], { unique: false });
42
+ }
43
+ if (!db.objectStoreNames.contains("meta"))
44
+ db.createObjectStore("meta");
45
+ };
46
+ r.onsuccess = () => {
47
+ const db = r.result;
48
+ // Another tab upgrading (a future SDK) must not be blocked by us.
49
+ db.onversionchange = () => {
50
+ db.close();
51
+ this.dbPromise = null;
52
+ };
53
+ resolve(db);
54
+ };
55
+ r.onerror = () => reject(r.error ?? new Error("cannot open sync log"));
56
+ r.onblocked = () => reject(new Error("sync log open blocked"));
57
+ });
58
+ this.dbPromise.catch(() => {
59
+ this.dbPromise = null;
60
+ });
61
+ }
62
+ return this.dbPromise;
63
+ }
64
+ async append(ops) {
65
+ if (ops.length === 0)
66
+ return;
67
+ const db = await this.db();
68
+ const tx = db.transaction("ops", "readwrite");
69
+ const st = tx.objectStore("ops");
70
+ for (const op of ops)
71
+ st.add(op);
72
+ await done(tx);
73
+ }
74
+ async pending() {
75
+ const db = await this.db();
76
+ const tx = db.transaction("ops", "readonly");
77
+ const all = (await req(tx.objectStore("ops").getAll()));
78
+ return all;
79
+ }
80
+ async pendingCount() {
81
+ const db = await this.db();
82
+ const tx = db.transaction("ops", "readonly");
83
+ return req(tx.objectStore("ops").count());
84
+ }
85
+ async remove(ids) {
86
+ if (ids.length === 0)
87
+ return;
88
+ const db = await this.db();
89
+ const tx = db.transaction("ops", "readwrite");
90
+ const st = tx.objectStore("ops");
91
+ for (const id of ids)
92
+ st.delete(id);
93
+ await done(tx);
94
+ }
95
+ async clearOps() {
96
+ const db = await this.db();
97
+ const tx = db.transaction("ops", "readwrite");
98
+ tx.objectStore("ops").clear();
99
+ await done(tx);
100
+ }
101
+ async getMeta(key) {
102
+ const db = await this.db();
103
+ const tx = db.transaction("meta", "readonly");
104
+ return (await req(tx.objectStore("meta").get(key)));
105
+ }
106
+ async setMeta(entries) {
107
+ const db = await this.db();
108
+ const tx = db.transaction("meta", "readwrite");
109
+ const st = tx.objectStore("meta");
110
+ for (const k of Object.keys(entries)) {
111
+ if (entries[k] === undefined)
112
+ st.delete(k);
113
+ else
114
+ st.put(entries[k], k);
115
+ }
116
+ await done(tx);
117
+ }
118
+ /** Every meta entry whose key starts with `prefix`, as a map. */
119
+ async metaWithPrefix(prefix) {
120
+ const db = await this.db();
121
+ const tx = db.transaction("meta", "readonly");
122
+ const st = tx.objectStore("meta");
123
+ const range = IDBKeyRange.bound(prefix, prefix + "￿");
124
+ const keys = (await req(st.getAllKeys(range)));
125
+ const vals = await req(st.getAll(range));
126
+ const out = new Map();
127
+ keys.forEach((k, i) => out.set(k, vals[i]));
128
+ return out;
129
+ }
130
+ async clearAll() {
131
+ const db = await this.db();
132
+ const tx = db.transaction(["ops", "meta"], "readwrite");
133
+ tx.objectStore("ops").clear();
134
+ tx.objectStore("meta").clear();
135
+ await done(tx);
136
+ }
137
+ close() {
138
+ this.dbPromise?.then((db) => db.close()).catch(() => { });
139
+ this.dbPromise = null;
140
+ }
141
+ }
142
+ export { req as idbRequest, done as idbDone };
143
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/idb-sync/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { FilesService } from "../files.js";
2
+ import type { SyncRemote } from "./engine.js";
3
+ export declare class FilesRemote implements SyncRemote {
4
+ private readonly files;
5
+ constructor(files: FilesService);
6
+ list(prefix: string): Promise<{
7
+ path: string;
8
+ etag: string;
9
+ }[]>;
10
+ getJSON(path: string, ifNoneMatch?: string): Promise<{
11
+ status: "unchanged";
12
+ value?: undefined;
13
+ etag?: undefined;
14
+ } | {
15
+ status: "missing";
16
+ value?: undefined;
17
+ etag?: undefined;
18
+ } | {
19
+ status: "ok";
20
+ value: {} | null;
21
+ etag: string;
22
+ }>;
23
+ putJSON(path: string, value: unknown, cond: {
24
+ ifMatch?: string;
25
+ ifNoneMatch?: boolean;
26
+ }): Promise<{
27
+ status: "ok";
28
+ etag: string;
29
+ serverTime: number | undefined;
30
+ } | {
31
+ status: "conflict";
32
+ etag?: undefined;
33
+ serverTime?: undefined;
34
+ }>;
35
+ putBlob(path: string, blob: Blob): Promise<void>;
36
+ getBlob(path: string): Promise<Blob>;
37
+ }
38
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/idb-sync/remote.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,WAAY,YAAW,UAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAE1C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAW/D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;;;;;;;;IAO1C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;IAevF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrC"}
@@ -0,0 +1,61 @@
1
+ // idb-sync/remote.ts — the sync engine's storage, over the files API.
2
+ //
3
+ // Shards are plain JSON files in the user's file space for the app, so
4
+ // they share its quota, billing and deletion with everything else the
5
+ // app stores for that user. Conditional reads (304) and writes (412 /
6
+ // 409) come from the files API, which checks them against the store.
7
+ export class FilesRemote {
8
+ files;
9
+ constructor(files) {
10
+ this.files = files;
11
+ }
12
+ async list(prefix) {
13
+ const out = [];
14
+ let cursor;
15
+ do {
16
+ const page = await this.files.list({ prefix, limit: 1000, ...(cursor ? { cursor } : {}) });
17
+ for (const f of page.files)
18
+ if (f.etag)
19
+ out.push({ path: f.path, etag: f.etag });
20
+ cursor = page.next_cursor;
21
+ } while (cursor);
22
+ return out;
23
+ }
24
+ async getJSON(path, ifNoneMatch) {
25
+ const r = await this.files.readJSON(path, ifNoneMatch ? { ifNoneMatch } : undefined);
26
+ if (r.notModified)
27
+ return { status: "unchanged" };
28
+ if (r.value === undefined)
29
+ return { status: "missing" };
30
+ return { status: "ok", value: r.value, etag: r.etag ?? "" };
31
+ }
32
+ async putJSON(path, value, cond) {
33
+ try {
34
+ const obj = await this.files.put(path, JSON.stringify(value), {
35
+ contentType: "application/json",
36
+ ...(cond.ifMatch ? { ifMatch: cond.ifMatch } : {}),
37
+ ...(cond.ifNoneMatch ? { ifNoneMatch: true } : {}),
38
+ });
39
+ return { status: "ok", etag: obj.etag ?? "", serverTime: obj.last_modified ? Date.parse(obj.last_modified) : undefined };
40
+ }
41
+ catch (e) {
42
+ const code = e.statusCode;
43
+ if (code === 412 || code === 409)
44
+ return { status: "conflict" };
45
+ throw e;
46
+ }
47
+ }
48
+ async putBlob(path, blob) {
49
+ try {
50
+ await this.files.put(path, blob, { contentType: blob.type || "application/octet-stream", ifNoneMatch: true });
51
+ }
52
+ catch (e) {
53
+ if (e.statusCode !== 409)
54
+ throw e; // already stored: same bytes, same name
55
+ }
56
+ }
57
+ getBlob(path) {
58
+ return this.files.get(path);
59
+ }
60
+ }
61
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/idb-sync/remote.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,8 @@ export { RunApps, RunApps as Client, RunApps as RunJobs, type ClientOptions, typ
9
9
  export { SDKEvents, newRequestId, type RequestStartEvent, type RequestStreamDeltaEvent, type RequestEndEvent, type RequestErrorEvent, type SDKEventMap, type SDKCapability, type Unsubscribe, } from "./events.js";
10
10
  export { ActivityTracker, type ActiveCall, type CompletedCall, type SessionStats, type ActivitySnapshot, } from "./activity-tracker.js";
11
11
  export { BrowserAuth, type BrowserAuthOptions, type BrowserUser } from "./browser-auth.js";
12
+ export { SyncEngine, FilesRemote, installIndexedDBHook, type SyncOptions, type SyncState, type DbChange, type SyncRemote, type SyncDeps, } from "./idb-sync/index.js";
13
+ export type { SyncStateEvent, DbChangeEvent } from "./events.js";
12
14
  export { APIError } from "./errors.js";
13
15
  export type { Usage } from "./types.js";
14
16
  export type { ChatMessage, ContentPart, ChatTool, StreamOptions, ChatCompletionParams, ChatToolCall, ChatChoiceMessage, ChatChoice, ChatCompletion, ChatChunkDelta, ChatChunkChoice, ChatCompletionChunk, } from "./chat.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAOpH,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,YAAY,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,WAAW,CAAC;AAGnB,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,MAAM,EACN,WAAW,EACX,UAAU,EACV,cAAc,EACd,OAAO,GACR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,aAAa,EACb,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5D,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,UAAU,EACV,cAAc,EACd,UAAU,IAAI,cAAc,EAC5B,WAAW,IAAI,eAAe,EAC9B,iBAAiB,IAAI,qBAAqB,EAC1C,OAAO,IAAI,WAAW,EACtB,WAAW,IAAI,eAAe,GAC/B,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -16,6 +16,9 @@ export { RunApps, RunApps as Client, RunApps as RunJobs } from "./client.js";
16
16
  export { SDKEvents, newRequestId, } from "./events.js";
17
17
  export { ActivityTracker, } from "./activity-tracker.js";
18
18
  export { BrowserAuth } from "./browser-auth.js";
19
+ // IndexedDB sync — on by default in apps; exported for status UIs and
20
+ // for tests that drive the engine with their own storage.
21
+ export { SyncEngine, FilesRemote, installIndexedDBHook, } from "./idb-sync/index.js";
19
22
  export { APIError } from "./errors.js";
20
23
  export { userMessage, systemMessage, assistantMessage, toolResultMessage, userMessageParts, textPart, imagePart, videoPart, audioPart, } from "./chat.js";
21
24
  export { hasCapabilityTag, acceptsModality, supportsVoiceClone, supportsInstructText, defaultVoice, } from "./models.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sEAAsE;AACtE,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,OAAO,EAAyC,MAAM,aAAa,CAAC;AAEpH,mEAAmE;AACnE,sEAAsE;AACtE,gEAAgE;AAChE,gEAAgE;AAChE,kEAAkE;AAClE,OAAO,EACL,SAAS,EACT,YAAY,GAQb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,GAKhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAA6C,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkBvC,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,GACb,MAAM,aAAa,CAAC;AAUrB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA+BhD,4DAA4D;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4B5D,0EAA0E;AAC1E,OAAO,EAAE,WAAW,EAAuB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sEAAsE;AACtE,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,OAAO,EAAyC,MAAM,aAAa,CAAC;AAEpH,mEAAmE;AACnE,sEAAsE;AACtE,gEAAgE;AAChE,gEAAgE;AAChE,kEAAkE;AAClE,OAAO,EACL,SAAS,EACT,YAAY,GAQb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,GAKhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAA6C,MAAM,mBAAmB,CAAC;AAC3F,sEAAsE;AACtE,0DAA0D;AAC1D,OAAO,EACL,UAAU,EACV,WAAW,EACX,oBAAoB,GAMrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkBvC,OAAO,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,GACV,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,GACb,MAAM,aAAa,CAAC;AAUrB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA+BhD,4DAA4D;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4B5D,0EAA0E;AAC1E,OAAO,EAAE,WAAW,EAAuB,MAAM,WAAW,CAAC"}