@contractspec/lib.runtime-sandbox 0.11.0
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/dist/_virtual/rolldown_runtime.js +18 -0
- package/dist/adapters/pglite/adapter.js +97 -0
- package/dist/adapters/pglite/adapter.js.map +1 -0
- package/dist/adapters/pglite/index.js +3 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/ports/database.port.d.ts +70 -0
- package/dist/ports/database.port.d.ts.map +1 -0
- package/dist/types/database.types.d.ts +47 -0
- package/dist/types/database.types.d.ts.map +1 -0
- package/dist/web/database/migrations.d.ts +12 -0
- package/dist/web/database/migrations.d.ts.map +1 -0
- package/dist/web/database/migrations.js +746 -0
- package/dist/web/database/migrations.js.map +1 -0
- package/dist/web/database/schema.d.ts +7349 -0
- package/dist/web/database/schema.d.ts.map +1 -0
- package/dist/web/database/schema.js +528 -0
- package/dist/web/database/schema.js.map +1 -0
- package/dist/web/events/local-pubsub.d.ts +10 -0
- package/dist/web/events/local-pubsub.d.ts.map +1 -0
- package/dist/web/events/local-pubsub.js +24 -0
- package/dist/web/events/local-pubsub.js.map +1 -0
- package/dist/web/graphql/local-client.d.ts +20 -0
- package/dist/web/graphql/local-client.d.ts.map +1 -0
- package/dist/web/graphql/local-client.js +536 -0
- package/dist/web/graphql/local-client.js.map +1 -0
- package/dist/web/index.d.ts +15 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +68 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/runtime/seeders/index.js +358 -0
- package/dist/web/runtime/seeders/index.js.map +1 -0
- package/dist/web/runtime/services.d.ts +60 -0
- package/dist/web/runtime/services.d.ts.map +1 -0
- package/dist/web/runtime/services.js +80 -0
- package/dist/web/runtime/services.js.map +1 -0
- package/dist/web/storage/indexeddb.d.ts +22 -0
- package/dist/web/storage/indexeddb.d.ts.map +1 -0
- package/dist/web/storage/indexeddb.js +85 -0
- package/dist/web/storage/indexeddb.js.map +1 -0
- package/dist/web/utils/id.d.ts +5 -0
- package/dist/web/utils/id.d.ts.map +1 -0
- package/dist/web/utils/id.js +9 -0
- package/dist/web/utils/id.js.map +1 -0
- package/package.json +70 -0
- package/src/adapters/pglite/adapter.ts +152 -0
- package/src/adapters/pglite/index.ts +1 -0
- package/src/index.ts +41 -0
- package/src/ports/database.port.ts +82 -0
- package/src/ports/index.ts +4 -0
- package/src/types/database.types.ts +55 -0
- package/src/types/index.ts +1 -0
- package/src/web/database/migrations.ts +760 -0
- package/src/web/database/schema.ts +596 -0
- package/src/web/events/local-pubsub.ts +28 -0
- package/src/web/graphql/local-client.ts +747 -0
- package/src/web/index.ts +21 -0
- package/src/web/runtime/seeders/index.ts +449 -0
- package/src/web/runtime/services.ts +132 -0
- package/src/web/storage/indexeddb.ts +116 -0
- package/src/web/utils/id.ts +7 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export interface LocalStorageOptions {
|
|
2
|
+
dbName?: string;
|
|
3
|
+
storeName?: string;
|
|
4
|
+
version?: number;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const DEFAULT_DB_NAME = 'contractspec-runtime';
|
|
8
|
+
const DEFAULT_STORE = 'kv';
|
|
9
|
+
const FALLBACK_STORE = new Map<string, unknown>();
|
|
10
|
+
|
|
11
|
+
export class LocalStorageService {
|
|
12
|
+
private dbPromise?: Promise<IDBDatabase | null>;
|
|
13
|
+
|
|
14
|
+
constructor(private readonly options: LocalStorageOptions = {}) {}
|
|
15
|
+
|
|
16
|
+
async init(): Promise<void> {
|
|
17
|
+
await this.getDb();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async get<TValue = unknown>(
|
|
21
|
+
key: string,
|
|
22
|
+
fallback?: TValue
|
|
23
|
+
): Promise<TValue | undefined> {
|
|
24
|
+
const db = await this.getDb();
|
|
25
|
+
if (!db) {
|
|
26
|
+
return (FALLBACK_STORE.get(key) as TValue | undefined) ?? fallback;
|
|
27
|
+
}
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const tx = db.transaction(this.storeName, 'readonly');
|
|
30
|
+
const store = tx.objectStore(this.storeName);
|
|
31
|
+
const request = store.get(key);
|
|
32
|
+
request.onsuccess = () => {
|
|
33
|
+
resolve((request.result as TValue | undefined) ?? fallback);
|
|
34
|
+
};
|
|
35
|
+
request.onerror = () => reject(request.error);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async set<TValue = unknown>(key: string, value: TValue): Promise<void> {
|
|
40
|
+
const db = await this.getDb();
|
|
41
|
+
if (!db) {
|
|
42
|
+
FALLBACK_STORE.set(key, value);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
await new Promise<void>((resolve, reject) => {
|
|
46
|
+
const tx = db.transaction(this.storeName, 'readwrite');
|
|
47
|
+
const store = tx.objectStore(this.storeName);
|
|
48
|
+
const request = store.put(value, key);
|
|
49
|
+
request.onsuccess = () => resolve();
|
|
50
|
+
request.onerror = () => reject(request.error);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async delete(key: string): Promise<void> {
|
|
55
|
+
const db = await this.getDb();
|
|
56
|
+
if (!db) {
|
|
57
|
+
FALLBACK_STORE.delete(key);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
await new Promise<void>((resolve, reject) => {
|
|
61
|
+
const tx = db.transaction(this.storeName, 'readwrite');
|
|
62
|
+
const store = tx.objectStore(this.storeName);
|
|
63
|
+
const request = store.delete(key);
|
|
64
|
+
request.onsuccess = () => resolve();
|
|
65
|
+
request.onerror = () => reject(request.error);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async clear(): Promise<void> {
|
|
70
|
+
const db = await this.getDb();
|
|
71
|
+
if (!db) {
|
|
72
|
+
FALLBACK_STORE.clear();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
await new Promise<void>((resolve, reject) => {
|
|
76
|
+
const tx = db.transaction(this.storeName, 'readwrite');
|
|
77
|
+
const store = tx.objectStore(this.storeName);
|
|
78
|
+
const request = store.clear();
|
|
79
|
+
request.onsuccess = () => resolve();
|
|
80
|
+
request.onerror = () => reject(request.error);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private get storeName() {
|
|
85
|
+
return this.options.storeName ?? DEFAULT_STORE;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private async getDb(): Promise<IDBDatabase | null> {
|
|
89
|
+
if (typeof indexedDB === 'undefined') {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
if (!this.dbPromise) {
|
|
93
|
+
this.dbPromise = this.openDb();
|
|
94
|
+
}
|
|
95
|
+
return this.dbPromise;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private openDb(): Promise<IDBDatabase> {
|
|
99
|
+
return new Promise((resolve, reject) => {
|
|
100
|
+
const request = indexedDB.open(
|
|
101
|
+
this.options.dbName ?? DEFAULT_DB_NAME,
|
|
102
|
+
this.options.version ?? 1
|
|
103
|
+
);
|
|
104
|
+
request.onerror = () => reject(request.error);
|
|
105
|
+
request.onsuccess = () => {
|
|
106
|
+
resolve(request.result);
|
|
107
|
+
};
|
|
108
|
+
request.onupgradeneeded = () => {
|
|
109
|
+
const db = request.result;
|
|
110
|
+
if (!db.objectStoreNames.contains(this.storeName)) {
|
|
111
|
+
db.createObjectStore(this.storeName);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|